Android平台GeckoView/Firefox的WebRTC是否支持AV1与H264编码?
在GeckoView中启用WebRTC的H264/AV1编码
问题背景
在Android 12设备上使用GeckoView 107.0.20221110173214实现WebRTC功能时,调用以下代码仅能识别VP8、VP9编码,无法检测到H264/AV1:
new RTCPeerConnection().createOffer({offerToReceiveVideo: true}).then(s => console.log(s.sdp))
相同代码在Chromium WebView中可正常识别H264/AV1,且Firefox官方应用测试也出现同样的无H264/AV1问题,测试页面显示H264不支持。
解决方案
启用H264编码
- 使用带专利编解码器的GeckoView变体
GeckoView默认版本不包含H264编解码器(受专利授权限制),需在项目依赖中替换为带openh264后缀的版本,例如:
dependencies { implementation 'org.mozilla.geckoview:geckoview-openh264:107.0.20221110173214' }
- 配置GeckoRuntime偏好
初始化GeckoRuntime时,开启H264相关开关:
val runtimeSettings = GeckoRuntimeSettings.Builder() .preference("media.peerconnection.video.h264_enabled", true) .preference("media.navigator.video.h264.enabled", true) .build() val geckoRuntime = GeckoRuntime.create(context, runtimeSettings)
启用AV1编码
版本与硬件要求
AV1支持需要GeckoView版本≥100,且设备硬件需支持AV1编解码(Android 12部分设备原生支持,需确认设备规格)。配置GeckoRuntime偏好
添加AV1相关启用配置:
val runtimeSettings = GeckoRuntimeSettings.Builder() .preference("media.peerconnection.video.av1_enabled", true) .preference("media.navigator.video.av1.enabled", true) .preference("media.av1.enabled", true) .build() val geckoRuntime = GeckoRuntime.create(context, runtimeSettings)
验证
修改配置后重新运行应用,调用原WebRTC代码查看SDP内容,若出现m=video ... H264或m=video ... AV1的条目,说明编码已启用;再次测试目标页面,确认H264支持状态更新。
内容的提问来源于stack exchange,提问作者alexward1230
相关产品推荐
相关产品推荐

