Skip to content

Commit af103cd

Browse files
committed
Negotiation needed when transceiver stopping
1 parent 966d3c1 commit af103cd

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

lib/ex_webrtc/peer_connection.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2417,6 +2417,9 @@ defmodule ExWebRTC.PeerConnection do
24172417
# https://www.w3.org/TR/webrtc/#dfn-check-if-negotiation-is-needed
24182418
defp tr_negotiation_needed?([], _), do: false
24192419

2420+
defp tr_negotiation_needed?([tr | _transceivers], _state) when tr.stopping and not tr.stopped,
2421+
do: true
2422+
24202423
defp tr_negotiation_needed?([tr | _transceivers], _state) when tr.mid == nil, do: true
24212424

24222425
defp tr_negotiation_needed?([tr | transceivers], state) do

test/ex_webrtc/peer_connection_test.exs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,8 +674,34 @@ defmodule ExWebRTC.PeerConnectionTest do
674674

675675
{:ok, answer} = PeerConnection.create_answer(pc2)
676676
[video] = ExSDP.parse!(answer.sdp).media
677-
678677
assert video.port == 9
678+
679+
:ok = PeerConnection.set_local_description(pc2, answer)
680+
:ok = PeerConnection.set_remote_description(pc1, answer)
681+
682+
assert_receive {:ex_webrtc, ^pc2, :negotiation_needed}
683+
684+
# Ensure transceiver is removed after renegotiation
685+
686+
{:ok, offer2} = PeerConnection.create_offer(pc2)
687+
:ok = PeerConnection.set_local_description(pc2, offer2)
688+
[new_video] = ExSDP.parse!(offer2.sdp).media
689+
assert new_video.port == 0
690+
691+
assert [
692+
%RTPTransceiver{
693+
current_direction: :inactive,
694+
direction: :inactive,
695+
stopping: true,
696+
stopped: false
697+
}
698+
] = PeerConnection.get_transceivers(pc2)
699+
700+
:ok = PeerConnection.set_remote_description(pc1, offer2)
701+
{:ok, answer2} = PeerConnection.create_answer(pc1)
702+
703+
:ok = PeerConnection.set_remote_description(pc2, answer2)
704+
assert [] = PeerConnection.get_transceivers(pc2)
679705
end
680706

681707
test "with renegotiation" do

0 commit comments

Comments
 (0)