WebView播放HTML5视频,黑屏的问题。

时间:2021-05-05 09:24:58

先来说下现象吧。

三部测试手机    

1号 Note2  N7100   Android系统版本4.3          

2号 三星9100    Android系统版本4.0.3     

3号 HTC Desire  Android系统版本 2.3.5  注意2.3.5系统没有强制GPU渲染选项


测试1  首先工程内Manifest.xml文件其中 users-sdk配置如下

<uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="4" />


1号 :   播放视频黑屏,有声音。  修复该问题: 手机设置->开发->强制打开GPU渲染

2号:    播放视频黑屏,有声音。   修复该问题: 手机设置->开发->强制打开GPU渲染

3号 :   没有办法播放提示 ”无法加载播放器,请删除浏览器缓存后重试“ ,我都没有播放过,哪来的缓存一说呢,看来提示信息很容易误导人。如图请忽略左上角我养的2只花大姐

WebView播放HTML5视频,黑屏的问题。


修复该问题:代码内强制打开GPU渲染

getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);



测试2 修改工程内Manifest.xml文件其中 users-sdk配置如下

<uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="14" />

指定目前sdkVersion为4.0及以上



1号 :   播放视频正常. 猜测系统帮助应用开启了  GPU渲染

2号:     播放视频黑屏,有声音。   修复该问题: 手机设置->开发->强制打开GPU渲染

3号: 无法播放视频 , 代码内开启GPU渲染

综上为了保险能够播放视频起见

1. Manifest.xml文件里的users-sdk 一定要配置正确      android:targetSdkVersion="14" 及以上


2. 代码内 强制打开GPU渲染

     我们要分情况处理,因为Android 4.0之后才有了强制GPU渲染,让opengl来处理图形图像。这也是为什么targetSdkVersion设置14的原因吧,我猜想

关于开启GPU渲染,分为几个级别。

Application级
  在你的manifest文件中,把以下属性添加到<application>标签来对你的整个应用启用硬加速:
<applicationandroid:hardwareAccelerated="true" ...>
Activity级
  如果你的应用在全局启用硬加速时行为不正确,你可以对个别activities单独启用硬加速.欲在actvity级别启用或禁止硬加速,你可以对<activity>元素使用android:hardwareAccelerated属性.下面的例子在整个应用中启用了硬加速但对一个activity禁止了硬加速:
<applicationandroid:hardwareAccelerated="true">
<activity... />
<activityandroid:hardwareAccelerated="false" />
</application>
Window级
  如果你需要更高颗粒度的控制,你可以使用以下代码为一个window启用硬加速:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

我建议颗粒度控制在Windows级别,因为对于GPU渲染,不同手机,不同应用表现不一样,甚至导致应用变卡。