WebView播放HTML5視訊,黑屏的問題。
先來說下現象吧。
三部測試手機
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渲染,不同手機,不同應用表現不一樣,甚至導致應用變卡。