Android端react-native-video的Exoplayer无法播放H.264视频问题求助
报错根因
返回错误码NO_EXCEEDS_CAPABILITIES明确指向设备硬件解码能力不匹配,结合报错中附带的视频参数,具体不支持项为:
- 视频分辨率达2160×3840(4K级),超出测试设备硬解码最大分辨率阈值
- 视频编码为H.264 High Profile 5.2(编码标识
avc1.640034),多数中低端安卓设备最高仅支持High Profile 4.2及以下规格
解决方案
- 调整视频编码参数
转码时将参数控制在安卓设备通用兼容区间:分辨率≤1920×1080,H.264规格选择High Profile 4.2或Baseline Profile,码率≤10Mbps,帧率保持24~30fps,调整后即可在绝大多数设备上正常硬解码播放。 - 强制启用软件解码
在Video组件属性中新增ignoreDecoderSpecificErrors={true}与useTextureView={true},同时修改原生层Exoplayer初始化逻辑:
打开react-native-video安卓模块下的ReactExoplayerView.java文件,找到Exoplayer实例初始化代码段,替换RenderersFactory配置为:
该方案无需修改视频源,但会增加设备功耗,部分性能较差的设备可能出现播放卡顿。RenderersFactory renderersFactory = new DefaultRenderersFactory(context) .setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON) .setMediaCodecSelector(MediaCodecSelector.DEFAULT .withH264ProfileAndLevelCheckDisabled(true)); - 升级依赖版本
当前使用的react-native-video@5.2.0-alpha1为非正式测试版本,内置Exoplayer版本老旧,解码适配逻辑存在缺陷,建议升级至最新稳定测试版^6.0.0-alpha.1,该版本内置Exoplayer 2.18+,已自动优化解码降级逻辑,硬解码失败时会自动切换为软解码,无需额外配置。
内容的提问来源于stack exchange,提问作者Lê Hoàng Chinh
相关产品推荐
相关产品推荐

