WebView播放HTML5視訊,黑屏的問題。

修-發表於2014-06-16

先來說下現象吧。

三部測試手機    

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渲染,不同手機,不同應用表現不一樣,甚至導致應用變卡。




     






相關文章