File tree Expand file tree Collapse file tree 2 files changed +30
-1
lines changed
Expand file tree Collapse file tree 2 files changed +30
-1
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments