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) {
val videoCapturer = ScreenCapturerAndroid(activityResult.data, object : MediaProjection.Callback() {
override fun onStop() {
Timber.v("User revoked the screen capturing permission")
Timber.i("User revoked the screen capturing permission")
}
})
callViewModel.handle(VectorCallViewActions.StartScreenSharing(videoCapturer))

View File

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