项目要求支持 8K 高清视频(H265编码)播放,拿到板子后却发现使用 App 可以播放 8K 高清视频,但使用浏览器却不行,即使安装上最新的 Chrome for Android 也不行。根据以往的浏览器内核开发经验,在 Android 平台上,Chromium WebView 最终是调用系统框架层的 MediaPlayer 进行播放。理论上只要系统框架层能够支持 8K 高清播放,那么浏览器应该也支持。实际情况却并非如此,而且 Android 10 预编译 WebView 没任何日志输出,所以需要下载源码编译 Chromium WebView,找出问题所在。

版本选择坑

Chromium 源码更新非常平凡,而且架构也经常变化,不像我们做项目,一套代码恨不得修修补补用上十几年。上一个项目是基于 Chromium V53 进行定制的,这次并不想采用最新的 Chromium 版本,大概浏览了一下最新源码,和 V53 差别太大,以往的定制工作要移植过来相当麻烦。首先想到的是直接使用 V53 的源码,但无法应用到 Android 10 上,主要是 Android 10 的 WebView API 接口发生了一些变化。最终令我放弃的是 Android 10 框架层移除了 HardwareCanvas 类,要知道,在 Android 5.1 中,WebView 中有一个重要的绘制方法:

public void callDrawGlFunction(Canvas canvas, long nativeDrawGLFunctor) {

    if (!(canvas instanceof HardwareCanvas)) {

        // Canvas#isHardwareAccelerated() is only true for subclasses of HardwareCanvas.

        throw new IllegalArgumentException(canvas.getClass().getName()

                + " is not hardware accelerated");

    }

    ((HardwareCanvas) canvas).callDrawGLFunction2(nativeDrawGLFunctor);

}

不能使用 V53,接下来考虑 Android 10 中预编译的 Chromium Webview 版本,使用 WebView Shell,查看版本号为 74.0.3729.183:

然而,这里有一个巨大的坑。等我费了九牛二虎之力把代码下载下来,把 Chromium WebView 编译出来并安装到系统,结果浏览器启动就崩溃,查看系统日志,有如下错误信息:

03-05 00:41:09.457  3299  4011 W WebViewUpdater: creating relro file timed out

03-05 00:41:09.458 12565 12565 E WebViewFactory: Chromium WebView package does not exist

03-05 00:41:09.458 12565 12565 E WebViewFactory: android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebViewFactory.getWebViewContextAndSetProvider(WebViewFactory.java:339)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:402)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:252)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebView.getFactory(WebView.java:2551)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebView.setWebContentsDebuggingEnabled(WebView.java:1974)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at org.chromium.webview_shell.WebViewBrowserActivity.onCreate(WebViewBrowserActivity.java:230)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.app.Activity.performCreate(Activity.java:7802)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.app.Activity.performCreate(Activity.java:7791)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)

03-05 00:41:09.458 12565 12565 E WebViewFactory:        

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: