【问题标题】:WebRTC: Bad Encoding Performance for Screensharing via CGDisplayStream (h264/vp8/vp9)WebRTC:通过 CGDisplayStream (h264/vp8/vp9) 进行屏幕共享的编码性能不佳
【发布时间】:2020-05-01 15:36:18
【问题描述】:

我正在使用 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-60 毫秒的范围内。

我从 2018 年开始在 15 英寸 MacBook Pro 上运行它。在 Chrome/Firefox 等中运行随机 webrtc 时,我得到的结果比使用普通 webrtc 框架更流畅。

【问题讨论】:

    标签: objective-c swift performance encoding webrtc


    【解决方案1】:

    WebRTC 使用软件编码,这才是真正的罪魁祸首。在软件中编码 2580 x 1080 也不实用。尝试将 H 和 V 分辨率降低一半,它会提高性能,但会降低一些质量。此外,如果您正在进行屏幕共享并且视频支持不重要,则可以将帧速率降低到每秒 10 帧。合乎逻辑的解决方案是弄清楚如何结合硬件加速。

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 2021-10-14
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多