返回

H264 软编解码——Android WebRTC 实战开启指南

Android

在 Android WebRTC 中使用 H264 软编解码的全面指南

前言

WebRTC 是一个革命性的开源通信框架,让开发人员能够在 Web 浏览器和移动设备之间实现实时音视频通话。其中,H264 是 WebRTC 支持的一种流行编解码器,以其高质量的视频和较低的带宽消耗而闻名。

在 Android 平台上,WebRTC 默认使用硬件编解码器来处理 H264 视频。然而,在某些情况下,例如设备不支持硬件编解码器,就需要使用软件编解码器。本文将深入探讨在 Android WebRTC 中启用 H264 软编解码的步骤,并指导您如何将其用于音视频通信。

开启 H264 软编解码

  1. 在构建文件中添加 CMake 参数

在 app/build.gradle 文件的 defaultConfig 块中,添加以下代码行:

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DUSE_H264_SOFT_CODECS=ON"
            }
        }
    }
}
  1. 修改 VideoEncoderFactory.cpp

在 app/src/main/cpp/webrtc/VideoEncoderFactory.cpp 文件中,找到以下代码块:

#if defined(WEBRTC_ANDROID)
  if (IsMediaCodecH264EncoderSupported()) {
    encoder_factories.emplace_back(CreateMediaCodecH264EncoderFactory());
  } else {
    encoder_factories.emplace_back(CreateSoftwareH264EncoderFactory());
  }
#endif  // defined(WEBRTC_ANDROID)

将其替换为:

#if defined(WEBRTC_ANDROID)
  encoder_factories.emplace_back(CreateSoftwareH264EncoderFactory());
#endif  // defined(WEBRTC_ANDROID)
  1. 修改 VideoDecoderFactory.cpp

在 app/src/main/cpp/webrtc/VideoDecoderFactory.cpp 文件中,找到以下代码块:

#if defined(WEBRTC_ANDROID)
  if (IsMediaCodecH264DecoderSupported()) {
    decoder_factories.emplace_back(CreateMediaCodecH264DecoderFactory());
  } else {
    decoder_factories.emplace_back(CreateSoftwareH264DecoderFactory());
  }
#endif  // defined(WEBRTC_ANDROID)

将其替换为:

#if defined(WEBRTC_ANDROID)
  decoder_factories.emplace_back(CreateSoftwareH264DecoderFactory());
#endif  // defined(WEBRTC_ANDROID)
  1. 重新构建项目

重新构建您的 Android Studio 项目。

使用 H264 软编解码

开启软编解码后,您可以在 WebRTC 应用中使用 H264:

  1. 创建 PeerConnection 对象

创建新的 PeerConnection 对象,并设置以下选项:

peerConnection.setCodecPreferences(new RTCCodecPreferences(
    Arrays.asList("H264")));
  1. 创建音视频轨道

在 PeerConnection 对象上创建新的音视频轨道,并启用它:

track.setEnabled(true);
  1. 将轨道添加到 PeerConnection

将音视频轨道添加到 PeerConnection 对象。

  1. 连接 PeerConnection

连接 PeerConnection 对象。

结论

通过遵循这些步骤,您可以在 Android WebRTC 中成功启用 H264 软编解码,并将其用于高质量、低带宽的音视频通信。

常见问题解答

  1. 为什么需要使用软编解码器?

当设备不支持硬件编解码器时,使用软编解码器是必要的。

  1. 软编解码器与硬件编解码器的区别是什么?

硬件编解码器利用设备的专用硬件进行编解码,而软编解码器则使用 CPU 进行编解码。

  1. 软编解码器是否会影响视频质量?

使用软编解码器可能会降低视频质量,但程度取决于设备的 CPU 性能。

  1. 使用 H264 软编解码器是否会增加延迟?

是,与硬件编解码器相比,使用软编解码器可能会引入额外的延迟。

  1. 是否可以在所有 Android 设备上使用 H264 软编解码器?

只要设备支持 WebRTC 和 H264 解码,就可以在所有 Android 设备上使用 H264 软编解码器。