【问题标题】:How can I maintain HD resolution with WebRTC on Android mobile如何在 Android 手机上使用 WebRTC 保持高清分辨率
【发布时间】:2015-11-09 19:58:55
【问题描述】:

我正在基于this source 制作 WebRTC-node.js 服务。 我想以高清分辨率(1280x720)在 PC(Chrome)和移动设备(Android Chrome)之间进行视频聊天。

当我将约束设置为 1280x720,带宽设置为 2000 并进行测试时,来自移动设备的视频最初质量很好 (1280x720),但几秒钟后质量下降,而来自 PC 的视频质量保持良好。

我读到了这个问答:Why does video resolution change when streaming from Android via WebRTC

上面写着:

您看到的降级是在 PeerConnection 层,而不是在 getUserMedia 层。当硬件和带宽统计表明性能低下时,webrtc 实现会触发降级,并由双方协商。

对于一些带宽的怀疑,我也在本地网络中测试过,但结果是一样的。 而不是 node.js,我尝试了 XSockets.WebRTC,但结果是一样的。

那么,如何在安卓手机上保持高清分辨率? 这是 Chrome-vp8 的问题吗?

我需要你的帮助。谢谢。

【问题讨论】:

  • 你在安卓设备上的 CPU 利用率是多少?
  • 糟糕!超过90%,几乎是100%! CPU 为高通骁龙 800 2.3GHz 四核。用 WebRTC 管理高清视频是不是很糟糕?无论如何,非常感谢!
  • 我不确定 android 上的 chrome 何时开始利用硬件加速,但我知道在这些设备上,如果您没有 VP8 或 9 的硬件加速,它绝对会影响性能。我知道在本机应用程序中有一个硬件加速选项,但我不确定它是否 100% 可靠(我自己也遇到过性能问题)。
  • 那么,也许最好的方法是构建原生安卓应用,不是吗?非常感谢!

标签: android google-chrome webrtc


【解决方案1】:

为了保持稳定的视频质量,您必须在PeerConnectionRTCConfiguration 中将enableCpuOveruseDetection 标志设置为false,并确保VideoCapture 使用startCapture 方法设置所需的视频分辨率(您可以使用getSupportedFormats CameraEnumerator 以获得合理支持的手机摄像头视频分辨率)。

这可为您提供稳定的高清视频分辨率(如果您通过startCapture 设置)和更高(除非带宽足够),但缺点可能会增加电池消耗并可能导致 CPU 过热(尤其是对于一些旧的 Android 手机) .

 factory.createPeerConnection(PeerConnection.RTCConfiguration(iceServers).apply {
        ...
        enableCpuOveruseDetection = false
    }, object : PeerConnection.Observer {
     ...
    })

【讨论】:

  • 非常感谢,这解决了我的快速测试问题。我相信这应该是公认的答案。
  • 谢谢,它适用于android,但我应该为IOS做什么? RTCConfiguration 没有“enableCpuOveruseDetection”字段。
【解决方案2】:

在WebRTC官方仓库https://chromium.googlesource.com/external/webrtc/

文件 /talk/media/base/videoadapter.cc 显示 WebRTC 会根据设备 CPU 负载降低视频分辨率。该功能默认开启。

我在禁用视频适配器的情况下构建了原生 iOS 应用,但 720p 视频在 iPhone 6s 中不够流畅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多