先来说下现象吧。
三部测试手机
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只花大姐
修复该问题:代码内强制打开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渲染,不同手机,不同应用表现不一样,甚至导致应用变卡。