我正在使用用于WebRTC的Objective-C框架来构建屏幕共享应用。使用CGDisplayStream捕获视频。我有一个可以正常工作的演示,但在2580x1080分辨率下,我只有3-4 fps。我的googAvgEncodeMs大约为100-300毫秒(理想情况下应为> 10毫秒),这解释了为什么屏幕共享远不能流畅(30fsp +)。我还在编解码器(h264 / vp8 / vp9)之间切换,但是使用它们时,我得到的都是相同的缓慢体验。 webRTC中的contentType设置为screen(值:[screen,realtime])。
我的Mac的CPU使用率介于80-100%之间。我的猜测是我错过的编解码器的C ++代码中有一些主要的优化(qpMax,硬件加速等)。不幸的是,我对编解码器的了解有限。
也很有趣:即使我将分辨率降低到320x240,googAvgEncodeMs仍在30-60ms的范围内。
[我将从2018年开始在15英寸的MacBook Pro上运行此程序。在Chrome / Firefox等内部运行随机webrtc时,与使用香草webrtc框架相比,我得到的结果更平滑。
WebRTC使用软件编码,这才是真正的罪魁祸首。而且在软件中对2580 x 1080进行编码也不可行。尝试将水平和垂直分辨率降低一半,这将改善性能,但质量有所下降。另外,如果您要进行屏幕共享并且视频支持不是很关键,则可以将帧速率降低到每秒10帧。逻辑解决方案是弄清楚如何合并硬件加速。