Code review fixes.

This commit is contained in:
Onuray Sahin 2022-05-03 16:25:19 +03:00
parent dd5d263847
commit 166be43f23
2 changed files with 26 additions and 14 deletions

View File

@ -651,7 +651,7 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
private fun startScreenSharing(activityResult: ActivityResult) { private fun startScreenSharing(activityResult: ActivityResult) {
val videoCapturer = ScreenCapturerAndroid(activityResult.data, object : MediaProjection.Callback() { val videoCapturer = ScreenCapturerAndroid(activityResult.data, object : MediaProjection.Callback() {
override fun onStop() { override fun onStop() {
Timber.v("User revoked the screen capturing permission") Timber.i("User revoked the screen capturing permission")
} }
}) })
callViewModel.handle(VectorCallViewActions.StartScreenSharing(videoCapturer)) callViewModel.handle(VectorCallViewActions.StartScreenSharing(videoCapturer))

View File

@ -783,31 +783,43 @@ class WebRtcCall(
val localMediaStream = factory.createLocalMediaStream(STREAM_ID) val localMediaStream = factory.createLocalMediaStream(STREAM_ID)
val videoSource = factory.createVideoSource(videoCapturer.isScreencast) val videoSource = factory.createVideoSource(videoCapturer.isScreencast)
// Start capturing screen startCapturingScreen(videoCapturer, videoSource)
val surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", rootEglBase!!.eglBaseContext)
videoCapturer.initialize(surfaceTextureHelper, context, videoSource.capturerObserver)
videoCapturer.startCapture(currentCaptureFormat.width, currentCaptureFormat.height, currentCaptureFormat.fps)
// Remove local camera previews removeLocalSurfaceRenderers()
localSurfaceRenderers.forEach { it.get()?.let { localVideoTrack?.removeSink(it) } }
// Show screen preview locally showScreenLocally(factory, videoSource, localMediaStream)
localVideoTrack = factory.createVideoTrack(VIDEO_TRACK_ID, videoSource).apply { setEnabled(true) }
localMediaStream?.addTrack(localVideoTrack)
localSurfaceRenderers.forEach { it.get()?.let { localVideoTrack?.addSink(it) } }
// Remove camera stream videoSender?.let { removeStream(it) }
peerConnection?.removeTrack(videoSender)
screenSender = peerConnection?.addTrack(localVideoTrack, listOf(STREAM_ID)) screenSender = peerConnection?.addTrack(localVideoTrack, listOf(STREAM_ID))
} }
fun stopSharingScreen() { fun stopSharingScreen() {
screenSender?.let { peerConnection?.removeTrack(it) } screenSender?.let { removeStream(it) }
peerConnectionFactoryProvider.get()?.let { configureVideoTrack(it) } peerConnectionFactoryProvider.get()?.let { configureVideoTrack(it) }
sessionScope?.launch(dispatcher) { attachViewRenderersInternal() } sessionScope?.launch(dispatcher) { attachViewRenderersInternal() }
} }
private fun removeStream(sender: RtpSender) {
peerConnection?.removeTrack(sender)
}
private fun showScreenLocally(factory: PeerConnectionFactory, videoSource: VideoSource?, localMediaStream: MediaStream?) {
localVideoTrack = factory.createVideoTrack(VIDEO_TRACK_ID, videoSource).apply { setEnabled(true) }
localMediaStream?.addTrack(localVideoTrack)
localSurfaceRenderers.forEach { it.get()?.let { localVideoTrack?.addSink(it) } }
}
private fun removeLocalSurfaceRenderers() {
localSurfaceRenderers.forEach { it.get()?.let { localVideoTrack?.removeSink(it) } }
}
private fun startCapturingScreen(videoCapturer: VideoCapturer, videoSource: VideoSource) {
val surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", rootEglBase!!.eglBaseContext)
videoCapturer.initialize(surfaceTextureHelper, context, videoSource.capturerObserver)
videoCapturer.startCapture(currentCaptureFormat.width, currentCaptureFormat.height, currentCaptureFormat.fps)
}
private suspend fun release() { private suspend fun release() {
listeners.clear() listeners.clear()
mxCall.removeListener(this) mxCall.removeListener(this)