我不确定你能从中流出来 的 相机 强> 和 的 屏幕 强> 同时。但是你可以做的是:
PeerConnection
PeerConnection.removeTrack(RtpSender sender)
ScreenCapturerAndroid
如果你说屏幕共享没有通话就行了,那么第4步和第5步应该已经完成了。
不要忘记处置/释放与之相关的所有资源 Camera 当你删除它的轨道。
Camera
也停止了 的 屏幕 强> 分享并回到 的 相机 强> 只需执行上述步骤即可 的 屏幕 强> 跟踪。
以供参考 : PeerConnection.java
的 更新: 强>
以下是WebRTC客户端的一部分,它允许我实现您的要求(您可以根据当前的代码库进行调整):
private fun stopCameraShare(){ videoCapturerAndroid?.stopCapture() localRenderer.dispose() localVideoView.release() localVideoView.clearImage() stream?.removeTrack(localVideoTrack) localVideoTrack.dispose() } private fun shareScreen(){ stopCameraShare() val mediaProjectionManager = activity!!.getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), 29) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode != 29) return initVideos() videoCapturerAndroid = ScreenCapturerAndroid( data, object : MediaProjection.Callback() { override fun onStop() { Timber.e("User revoked permission to capture the screen.") } }) peerConnectionFactory.setVideoHwAccelerationOptions(rootEglBase.eglBaseContext, rootEglBase.eglBaseContext) videoSource = peerConnectionFactory.createVideoSource(videoCapturerAndroid) localVideoTrack = peerConnectionFactory.createVideoTrack("100", videoSource) videoCapturerAndroid?.startCapture(300, 300, 30) stream?.addTrack(localVideoTrack) }
PS:这非常重要 peerConnectionFactory.setVideoHwAccelerationOptions(rootEglBase.eglBaseContext, rootEglBase.eglBaseContext)
peerConnectionFactory.setVideoHwAccelerationOptions(rootEglBase.eglBaseContext, rootEglBase.eglBaseContext)
希望对你有帮助 !