在做了充分的准备后,我信心满满的向着 H265 8K 视频解码这个目标发起进攻,然而,正打算动手的时候,我突然发现,别说支持 H265 ,自编的 Chromium WebView 连 H264 解码都不支持。使用 WebView Shell 访问测试页面,结果如下:
错误日志如下:
03-05 23:20:21.731 9061 9124 E chromium: [ERROR:batching_media_log.cc(26)] MediaEvent: MEDIA_ERROR_LOG_ENTRY {"error":"FFmpegDemuxer: no supported streams"}
令我不解的是,Android 10 的预编译 Webview 却没这样的问题。
测试的视频是 MP4 格式,从日志上看,大致可以判断是对流的解析出现问题。浏览 media 部分的代码,可以看到有 mp4_stream_parser.h / mp4_stream_parser.cc 文件,基本可以判断 MP4StreamParser 类的作用就是解析 MP4 格式的。StreamParser 使用工厂模式创建,工厂类为 StreamParserFactory,查看源码,可以发现有很多代码被 BUILDFLAG(USE_PROPRIETARY_CODECS) 宏包起来了。
联想到 Chromium 文档中有提到专有解码器的,原话为:
此外,您可能希望包括对专有音频和视频编解码器的支持,就像 Google 的 WebView 所做的那样。 这些编解码器可能受到专利或许可协议的保护,在分发包含它们的 WebView 构建之前,您应该寻求法律建议。
因为平台是支持硬解 H264 / H265 的,没有联想到和这个有关系。赶紧加到编译选项中:
ffmpeg_branding = "Chrome"
proprietary_codecs = true