基于webrtc的全平台-屏幕共享-方案
一. 屏幕共享需求:
- 视频: pc端桌面或者窗口可以指定,移动端就桌面。
- 音频: 支持系统声音共享,原有的mic声音保持通话。
二. webrtc自身的屏幕共享方案
- pc:windows,mac,linux
- 用各自平台api:实现了窗口和屏幕采集
- 代码目录:webrtc\src\modules\desktop_capture
- 分析:没有录制系统声音,mic的声音在通话流。
- 参考
- android
- 采用MediaProjection实现了屏幕采集
- 代码目录:webrtc\src\sdk\android\api\org\webrtc\ScreenCapturerAndroid.java
- 分析:没有录制系统声音,mic的声音在通话流。
- MediaProjection使用参考
- ios
- web端
三. 我们的方案
- pc(windows/mac/linux):用obs。
- Android:在webrtc android的基础上增加AudioTrack+AudioPlaybackCapture录制系统声音。
- ios:用ReplayKit。
- web端:用chrome自带的api。
四. 怎么处理:麦克风音频流 + 系统声音流的并存
- 方案1:多路音频流独立,可能有回音消除问题吗
- 方案2:混音成一路到通话流。
五. webrtc的is_screencast参数
- 设置sources来源是截屏,这意味着会选择适合屏幕共享的编码设置。也许不是最合适的处理方式,例如,文本文档截屏和youtube视频截屏等不同的需求。
- 也就是说在设置为true后,会对屏幕共享的流使用差别与普通Video的处理方式;实际测试后如果设置该参数为true后,WebRTC不会再动态调整分辨率;设置为true后,WebRTC里就不会对视屏动态调整分辨流但是会降低帧率。
- 来自:参考1 和 参考2 和参考3
- webrtc之Android视频质量提升:保帧率降分辨率
- 关于ContentHint { kNone, kFluid, kDetailed, kText };