Skip to content
This repository has been archived by the owner on May 16, 2024. It is now read-only.

Commit

Permalink
Improve getEndpoints & Fix toggleCamera/Microphone
Browse files Browse the repository at this point in the history
  • Loading branch information
incubo4u committed Nov 24, 2023
1 parent dd47dcb commit ee447ad
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 50 deletions.
59 changes: 29 additions & 30 deletions android/src/main/java/com/reactnativemembrane/MembraneWebRTC.kt
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,10 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map<String, Any?>) -> U
}
}

fun toggleCamera() {
fun toggleCamera(): Boolean {
ensureVideoTrack()
localVideoTrack?.let { setCameraTrackState(it, !isCameraOn) }
return isCameraOn
}

fun flipCamera() {
Expand Down Expand Up @@ -322,9 +323,10 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map<String, Any?>) -> U
emitEvent("IsMicrophoneOn", isMicrophoneOnMap)
}

fun toggleMicrophone() {
fun toggleMicrophone(): Boolean {
ensureAudioTrack()
localAudioTrack?.let { setMicrophoneTrackState(it, !isMicrophoneOn) }
return isMicrophoneOn
}

fun toggleScreencast(screencastOptions: ScreencastOptions, promise: Promise) {
Expand All @@ -349,8 +351,29 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map<String, Any?>) -> U
}
}

fun getEndpoints(): Map<String, Any> {
return getEndpointsAsRNMap()
fun getEndpoints(): List<Map<String, Any>> {
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<Map<String, Any>> {
Expand Down Expand Up @@ -619,33 +642,9 @@ class MembraneWebRTC(val sendEvent: (name: String, data: Map<String, Any?>) -> U
sendEvent(eventName, data)
}

private fun getEndpointsAsRNMap(): Map<String, Any> {
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<String, String?> {
Expand Down
39 changes: 19 additions & 20 deletions ios/MembraneWebRTC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -441,24 +441,8 @@ class MembraneWebRTC: MembraneRTCDelegate {
}
}

func getEndpoints() -> Dictionary<String, Array<Dictionary<String, Any>>> {
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<String, Array<Dictionary<String, Any>>> {
return ["endpoints": MembraneRoom.sharedInstance.endpoints.values.sorted(by: {$0.order < $1.order}).map {
func getEndpoints() -> Array<Dictionary<String, Any>> {
MembraneRoom.sharedInstance.endpoints.values.sorted(by: {$0.order < $1.order}).map {
(p) -> Dictionary in
let videoTracks = p.videoTracks.keys.map { trackId in [
"id": trackId,
Expand All @@ -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] {
Expand Down Expand Up @@ -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() {
Expand Down

0 comments on commit ee447ad

Please sign in to comment.