diff --git a/android/src/main/java/com/reactnativemembrane/MembraneWebRTC.kt b/android/src/main/java/com/reactnativemembrane/MembraneWebRTC.kt index 436ff09b..332bf532 100644 --- a/android/src/main/java/com/reactnativemembrane/MembraneWebRTC.kt +++ b/android/src/main/java/com/reactnativemembrane/MembraneWebRTC.kt @@ -263,9 +263,10 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map) -> U } } - fun toggleCamera() { + fun toggleCamera(): Boolean { ensureVideoTrack() localVideoTrack?.let { setCameraTrackState(it, !isCameraOn) } + return isCameraOn } fun flipCamera() { @@ -322,9 +323,10 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map) -> U emitEvent("IsMicrophoneOn", isMicrophoneOnMap) } - fun toggleMicrophone() { + fun toggleMicrophone(): Boolean { ensureAudioTrack() localAudioTrack?.let { setMicrophoneTrackState(it, !isMicrophoneOn) } + return isMicrophoneOn } fun toggleScreencast(screencastOptions: ScreencastOptions, promise: Promise) { @@ -349,8 +351,29 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map) -> U } } - fun getEndpoints(): Map { - return getEndpointsAsRNMap() + fun getEndpoints(): List> { + return endpoints.values.map { endpoint -> + mapOf("id" to endpoint.id, + "isLocal" to (endpoint.id == localEndpointId), + "type" to endpoint.type, + "metadata" to endpoint.metadata, + "tracks" to endpoint.videoTracks.values.map { video -> + mapOf( + "id" to video.id(), + "type" to "Video", + "metadata" to (endpoint.tracksMetadata[video.id()] ?: emptyMap()), + "encoding" to trackContexts[video.id()]?.encoding?.rid, + "encodingReason" to trackContexts[video.id()]?.encodingReason?.value + ) + } + endpoint.audioTracks.values.map { audio -> + mapOf( + "id" to audio.id(), + "type" to "Audio", + "metadata" to (endpoint.tracksMetadata[audio.id()] ?: emptyMap()), + "vadStatus" to trackContexts[audio.id()]?.vadStatus?.value + ) + }) + } } fun getCaptureDevices(): List> { @@ -619,33 +642,9 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map) -> U sendEvent(eventName, data) } - private fun getEndpointsAsRNMap(): Map { - return mapOf("endpoints" to endpoints.values.map { endpoint -> - mapOf("id" to endpoint.id, - "isLocal" to (endpoint.id == localEndpointId), - "type" to endpoint.type, - "metadata" to endpoint.metadata, - "tracks" to endpoint.videoTracks.values.map { video -> - mapOf( - "id" to video.id(), - "type" to "Video", - "metadata" to (endpoint.tracksMetadata[video.id()] ?: emptyMap()), - "encoding" to trackContexts[video.id()]?.encoding?.rid, - "encodingReason" to trackContexts[video.id()]?.encodingReason?.value - ) - } + endpoint.audioTracks.values.map { audio -> - mapOf( - "id" to audio.id(), - "type" to "Audio", - "metadata" to (endpoint.tracksMetadata[audio.id()] ?: emptyMap()), - "vadStatus" to trackContexts[audio.id()]?.vadStatus?.value - ) - }) - }) - } - private fun emitEndpoints() { - emitEvent("EndpointsUpdate", getEndpointsAsRNMap()) + val map = mapOf("EndpointsUpdate" to getEndpoints()) + emitEvent("EndpointsUpdate", map) } private fun audioDeviceAsRNMap(audioDevice: AudioDevice): Map { diff --git a/ios/MembraneWebRTC.swift b/ios/MembraneWebRTC.swift index 40d7b6fb..5e8766c4 100644 --- a/ios/MembraneWebRTC.swift +++ b/ios/MembraneWebRTC.swift @@ -441,24 +441,8 @@ class MembraneWebRTC: MembraneRTCDelegate { } } - func getEndpoints() -> Dictionary>> { - return getEndpointsForRN() - } - func getCaptureDevices() -> [[String: Any]] { - let devices = LocalCameraVideoTrack.getCaptureDevices() - var rnArray: [[String : Any]] = [] - devices.forEach { device in - rnArray.append([ - "id": device.uniqueID, - "name": device.localizedName, - "isFrontFacing": device.position == .front, - "isBackFacing": device.position == .back, - ]) - } - return rnArray - } - func getEndpointsForRN() -> Dictionary>> { - return ["endpoints": MembraneRoom.sharedInstance.endpoints.values.sorted(by: {$0.order < $1.order}).map { + func getEndpoints() -> Array> { + MembraneRoom.sharedInstance.endpoints.values.sorted(by: {$0.order < $1.order}).map { (p) -> Dictionary in let videoTracks = p.videoTracks.keys.map { trackId in [ "id": trackId, @@ -482,7 +466,21 @@ class MembraneWebRTC: MembraneRTCDelegate { "isLocal": p.id == localEndpointId, "type": p.type, ] - }] + } + } + + func getCaptureDevices() -> [[String: Any]] { + let devices = LocalCameraVideoTrack.getCaptureDevices() + var rnArray: [[String : Any]] = [] + devices.forEach { device in + rnArray.append([ + "id": device.uniqueID, + "name": device.localizedName, + "isFrontFacing": device.position == .front, + "isBackFacing": device.position == .back, + ]) + } + return rnArray } func getSimulcastConfigAsRNMap(simulcastConfig: SimulcastConfig) -> [String: Any] { @@ -749,7 +747,8 @@ class MembraneWebRTC: MembraneRTCDelegate { } func emitEndpoints() -> Void { - emitEvent(name: "EndpointsUpdate", data: getEndpointsForRN()) + let EndpointsUpdateMap = ["EndpointsUpdate": getEndpoints()] + emitEvent(name: "EndpointsUpdate", data: EndpointsUpdateMap ) } @objc func onRouteChangeNotification() {