Skip to content

Commit 41b339b

Browse files
committed
refactor
1 parent 6c952f4 commit 41b339b

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

packages/webrtc/src/peerConnection.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)