From dc7bc906772a79db9eb0faac5cad3b165927f60c Mon Sep 17 00:00:00 2001 From: sergey radionov Date: Thu, 20 Jan 2022 22:42:42 +0700 Subject: [PATCH 1/2] PluginMediaStreamTrack: save original track id for later use ref cordova-rtc/cordova-plugin-iosrtc#734 --- src/PluginMediaStreamTrack.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/PluginMediaStreamTrack.swift b/src/PluginMediaStreamTrack.swift index ffa09587..aca9c534 100644 --- a/src/PluginMediaStreamTrack.swift +++ b/src/PluginMediaStreamTrack.swift @@ -3,6 +3,7 @@ import Foundation class PluginMediaStreamTrack : NSObject { var rtcMediaStreamTrack: RTCMediaStreamTrack + var originalId: String var id: String var kind: String var eventListener: ((_ data: NSDictionary) -> Void)? @@ -16,6 +17,7 @@ class PluginMediaStreamTrack : NSObject { self.rtcMediaStreamTrack = rtcMediaStreamTrack if (trackId == nil) { + self.originalId = rtcMediaStreamTrack.trackId; // Handle possible duplicate remote trackId with janus or short duplicate name // See: https://github.com/cordova-rtc/cordova-plugin-iosrtc/issues/432 if (rtcMediaStreamTrack.trackId.count<36) { @@ -24,6 +26,7 @@ class PluginMediaStreamTrack : NSObject { self.id = rtcMediaStreamTrack.trackId; } } else { + self.originalId = String(); self.id = trackId!; } From 9c1089951403b391d92cddaf274d119ffc20f639 Mon Sep 17 00:00:00 2001 From: sergey radionov Date: Thu, 20 Jan 2022 22:45:19 +0700 Subject: [PATCH 2/2] fixed track Id in transeivers description ref cordova-rtc/cordova-plugin-iosrtc#734 --- src/PluginMediaStreamTrack.swift | 2 +- src/PluginRTCPeerConnection.swift | 38 ++++++++++++++++++++++++++++--- src/PluginRTCRtpReceiver.swift | 2 +- src/PluginRTCRtpSender.swift | 2 +- src/PluginRTCRtpTransceiver.swift | 2 +- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/PluginMediaStreamTrack.swift b/src/PluginMediaStreamTrack.swift index aca9c534..44d4f424 100644 --- a/src/PluginMediaStreamTrack.swift +++ b/src/PluginMediaStreamTrack.swift @@ -54,7 +54,7 @@ class PluginMediaStreamTrack : NSObject { } } - func getJSON() -> NSDictionary { + func getJSON() -> [String: Any] { return [ "id": self.id, "kind": self.kind, diff --git a/src/PluginRTCPeerConnection.swift b/src/PluginRTCPeerConnection.swift index e899e3c5..853e52db 100644 --- a/src/PluginRTCPeerConnection.swift +++ b/src/PluginRTCPeerConnection.swift @@ -815,17 +815,49 @@ class PluginRTCPeerConnection : NSObject, RTCPeerConnectionDelegate { return currentMediaStreamTrack; } - func getTransceiversJSON() -> [NSDictionary] { + func getTransceiversJSON() -> [[String: Any]] { if (!IsUnifiedPlan()) { NSLog("PluginRTCPeerConnection#getTransceiversJSON() | transceiers is not available when using plan-b") return []; } - return self.rtcPeerConnection.transceivers.map({ (transceiver: RTCRtpTransceiver) -> NSDictionary in + return self.rtcPeerConnection.transceivers.map({ (transceiver: RTCRtpTransceiver) -> [String: Any] in // let receiverTrack = self.getPluginMediaStreamTrack(transceiver.receiver.track, trackId: nil); // let senderTrack = self.getPluginMediaStreamTrack(transceiver.sender.track, trackId: nil); let transceiverHolder = self.updateTransceivers(rtcRtpTransceiver: transceiver) - return transceiverHolder.getJSON() + var transceiverDesc = transceiverHolder.getJSON() + + if var receiver = transceiverDesc["receiver"] as? [String: Any] { + if var track = receiver["track"] as? [String: Any] { + if let id = track["id"] as? String { + let pluginTrack = self.pluginMediaTracks.first { (key: String, value: PluginMediaStreamTrack) in + return value.originalId == id + } + if let pluginTrack = pluginTrack { + track["id"] = pluginTrack.value.id + } + } + receiver["track"] = track + } + transceiverDesc["receiver"] = receiver + } + + if var sender = transceiverDesc["sender"] as? [String: Any] { + if var track = sender["track"] as? [String: Any] { + if let id = track["id"] as? String { + let pluginTrack = self.pluginMediaTracks.first { (key: String, value: PluginMediaStreamTrack) in + return value.originalId == id + } + if let pluginTrack = pluginTrack { + track["id"] = pluginTrack.value.id + } + } + sender["track"] = track + } + transceiverDesc["sender"] = sender + } + + return transceiverDesc }) } diff --git a/src/PluginRTCRtpReceiver.swift b/src/PluginRTCRtpReceiver.swift index 73611adb..51d87adc 100644 --- a/src/PluginRTCRtpReceiver.swift +++ b/src/PluginRTCRtpReceiver.swift @@ -9,7 +9,7 @@ class PluginRTCRtpReceiver : NSObject { self.id = id != 0 ? id : Int.random(in: 0...10000) } - func getJSON() -> NSDictionary { + func getJSON() -> [String: Any] { let track = self.rtpReceiver.track != nil ? [ "id": self.rtpReceiver.track!.trackId, "kind": self.rtpReceiver.track!.kind, diff --git a/src/PluginRTCRtpSender.swift b/src/PluginRTCRtpSender.swift index 90edd06a..4527824b 100644 --- a/src/PluginRTCRtpSender.swift +++ b/src/PluginRTCRtpSender.swift @@ -60,7 +60,7 @@ class PluginRTCRtpSender : NSObject { self.rtpSender.track = rtcMediaStreamTrack } - func getJSON() -> NSDictionary { + func getJSON() -> [String: Any] { let track = self.rtpSender.track != nil ? [ "id": self.rtpSender.track!.trackId, "kind": self.rtpSender.track!.kind, diff --git a/src/PluginRTCRtpTransceiver.swift b/src/PluginRTCRtpTransceiver.swift index ec5c7ba5..796b0726 100644 --- a/src/PluginRTCRtpTransceiver.swift +++ b/src/PluginRTCRtpTransceiver.swift @@ -153,7 +153,7 @@ class PluginRTCRtpTransceiver : NSObject { return rtcRtpTransceiverInit } - func getJSON() -> NSDictionary { + func getJSON() -> [String: Any] { var currentDirection = RTCRtpTransceiverDirection.inactive self.rtcRtpTransceiver?.currentDirection(¤tDirection)