@@ -824,16 +824,19 @@ export class RTCPeerConnection extends EventTarget {
824824
825825 // # apply description
826826
827- const removedTransceivers = new Set ( this . transceivers ) ;
827+ const matchTransceiverWithMedia = (
828+ transceiver : RTCRtpTransceiver ,
829+ media : MediaDescription
830+ ) =>
831+ transceiver . kind === media . kind &&
832+ [ undefined , media . rtp . muxId ] . includes ( transceiver . mid ) ;
828833
829834 let transports = enumerate ( remoteSdp . media ) . map ( ( [ i , remoteMedia ] ) => {
830835 let dtlsTransport : RTCDtlsTransport | undefined ;
831836
832837 if ( [ "audio" , "video" ] . includes ( remoteMedia . kind ) ) {
833- let transceiver = this . transceivers . find (
834- ( t ) =>
835- t . kind === remoteMedia . kind &&
836- [ undefined , remoteMedia . rtp . muxId ] . includes ( t . mid )
838+ let transceiver = this . transceivers . find ( ( t ) =>
839+ matchTransceiverWithMedia ( t , remoteMedia )
837840 ) ;
838841 if ( ! transceiver ) {
839842 // create remote transceiver
@@ -843,7 +846,6 @@ export class RTCPeerConnection extends EventTarget {
843846 transceiver . mid = remoteMedia . rtp . muxId ;
844847 this . onRemoteTransceiverAdded . execute ( transceiver ) ;
845848 } else {
846- removedTransceivers . delete ( transceiver ) ;
847849 if ( transceiver . direction === "inactive" && transceiver . stopping ) {
848850 transceiver . stopped = true ;
849851 transceiver . currentDirection = "inactive" ;
@@ -909,11 +911,17 @@ export class RTCPeerConnection extends EventTarget {
909911 remoteMedia . dtlsParams . role === "client" ? "server" : "client" ;
910912 }
911913 return iceTransport ;
912- } ) ;
914+ } ) as RTCIceTransport [ ] ;
913915
914916 // filter out inactive transports
915917 transports = transports . filter ( ( iceTransport ) => ! ! iceTransport ) ;
916918
919+ const removedTransceivers = this . transceivers . filter (
920+ ( t ) =>
921+ remoteSdp . media . find ( ( m ) => matchTransceiverWithMedia ( t , m ) ) ==
922+ undefined
923+ ) ;
924+
917925 if ( sessionDescription . type === "answer" ) {
918926 for ( const transceiver of removedTransceivers ) {
919927 // todo: handle answer side transceiver removal work.
@@ -940,7 +948,7 @@ export class RTCPeerConnection extends EventTarget {
940948
941949 await Promise . all (
942950 transports . map ( async ( iceTransport ) => {
943- await iceTransport ? .iceGather . gather ( ) ;
951+ await iceTransport . iceGather . gather ( ) ;
944952 } )
945953 ) ;
946954
0 commit comments