Unity安卓視頻兼容性探討

在Unity中使用了一段視頻,然後使用了VideoPlayer組件進行播放,以下是碰到的一些問題。

兼容性問題:

Video在很多的設備中視頻無法播放,如華爲暢享8(安卓8.0)等等,剛開始以爲是因爲Android系統版本太低不兼容,後來發現Android9的也出現,這就不對了...

於是看了logcat輸出的log,發現都有這麼一條AndroidVideoMedia的log。

04-01 19:30:27.781 E/NdkMediaCodec(18497): sf error code: -12
04-01 19:30:27.781 W/Unity   (18497): AndroidVideoMedia: Error -10000 while configuring codec.
04-01 19:30:27.781 W/Unity   (18497):  
04-01 19:30:27.781 W/Unity   (18497): (Filename:  Line: 2099)
04-01 19:30:27.781 W/Unity   (18497): 

查看了Unity的文檔,關於視頻文件的兼容性介紹,裏面提到了,如果兼容性錯誤,就會通過logcat輸出一條前綴是AndroidVideoMedia的log。

經過翻閱谷歌官方文檔,Unity官方文檔,發現其實視頻播放是依賴於Android手機的硬件支持的,是通過硬件解碼播放的視頻(codec),如果硬件解碼錯誤,視頻就無法播放。並且就算transcode勾選後,也無法播放,因爲transcode也需要通過硬件解碼。並且嘗試了直接在視頻無法播放的手機直接用自帶播放器播放視頻,也同樣提示視頻無法播放(有聲音但是沒有畫面)

嘗試了插件(AVProVideo):

後來心想,可能是Unity支持不會吧,於是使用了插件AVProVideo進行測試,因爲看了AVProVideo的實現原理,發現是直接使用Android源生的接口進行播放的,理論上應該是沒問題纔對,不過測試發現,同樣報錯[AVProVideo] Error: Loading failed. File not found, codec not supported, video resolution too high or insufficient system resources。

最終的解決方案:

最終沒辦法,只能監聽視頻播放錯誤的回調,跳過視頻播放直接進入遊戲。

videoPlayer.errorReceived += PlayVideoError;

播放卡頓

視頻在Android模擬器播放會超級卡,原因應該是因爲安卓模擬器沒有硬件解碼支持,所以無解。

播放花屏

在iOS的時候播放發現會花屏,格式是mp4,後來把格式改成了webm格式,然後勾選transcode,就好了。

總結就是,視頻坑很多,在遊戲中還是儘可能不要使用視頻的方式,因爲兼容性實在是不堪。

如果你們有以上問題的解決方案,歡迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章