为什么 WebRTC 仅在 Chrome 中支持 H264 而在某些设备的本机应用程序中不支持

Why WebRTC only support H264 in Chrome but not in native application with some devices

我在AndroidChrome中使用official sample创建offer SDP,我们可以找到a=rtpmap:100 H264/90000,这意味着它可以支持H264。

但是如果我构建 AppRTC(official Android sample) and use official prebuilt libraries 版本 1.0.25821,调用 createOffer 然后在 SdpObserver::onCreateSuccess 中接收 SDP,SDP 包含 H264。

我的测试设备是 Oppo R15(搭配 MTK Helio P60,Android 8.1)。

那么,为什么 WebRTC 仅在 Chrome 中支持 H264 而在某些 Android 设备的本机应用程序中不支持?

Chrome 构建使用 openh264,常规 **WebRTC 不使用它。我所说的常规是指来自 chrome 版本的软件 h.264 编码器有变体,您可以使用它,但我不推荐它。

在 Android WebRTC 上,仅当

时才支持 H.264
  1. 设备硬件支持它,并且
  2. WebRTC 硬件编码器粘合逻辑支持该硬件编码器。目前仅支持 QCOMEXYNOS 设备。因此,任何其他设备,即使它们支持 h.264 HW 编码器,也不会被使用,也不会作为编解码器工厂的一部分添加,您也不会在 WebRTC 示例应用程序生成的 SDP 中看到。

在 Java 级别,您可以在 HardwareVideoEncoderFactory.java 中看到,它在 isHardwareSupportedInCurrentSdkH264 函数中检查 QCOM 和 EXYNOS 设备。

有趣的是,如果您使用本机代码,甚至不支持 QCOM 和 EXYNOS 硬件编码器(Webrtc 问题跟踪器上有错误记录)。这是因为 HW 编码代码与 JNI 代码的紧密集成——绝对不是好的模块化代码。