使用AVPro Video在Unity中播放開場視頻(CG)筆記


游戲中的開場CG(播放視頻),采用的插件為AVPro Video1.x(和W的版本一致),Unity版本為2018.4.0f1

Asset Store:AVPro Video - Core Android Edition

官方文檔:https://www.renderheads.com/content/docs/AVProVideo/articles/intro.html

AVPro分為多個版本:Core(核心版),Ultra(專業版),企業版。

我了刪除部分沒有用到的shader,見文檔:https://www.renderheads.com/content/docs/AVProVideo/articles/usage-shaders.html

1.x(2020年之前的版本)和2.x(2020.6.15之后)版本對比:https://www.renderheads.com/content/docs/AVProVideo/articles/whatsnew.html

建議視頻格式為mp4,在各個平台(安卓/ios/windows/mac)都支持。

在官方文檔有提到:在Editor下播放成功並不代碼安卓和IOS也成功,需要分別在每個平台測試,從插件源代碼來看每個平台都用原生實現的,所以要在對應平台上分別測試。

官方文檔解讀

這里摘錄一下官方文檔上每個平台的一些要求和注意事項,然后記錄一下我接入過程中的筆記。

Android

Android streaming requires the Internet Access setting (in Player Settings) to be set to “Require”:

This plugin requires a minimum Android API level of 15 when using the MediaPlayer API

For rendering OpenGL ES 2.0 and OpenGL ES 3.0 are supported, and multi-threaded rendering is supported on both

打包過程:Unity2018.4不需要做什么處理,從Unity導出工程即可

StreamingAssets 下不能讀取過大的文件,建議把很大的視頻放在可讀取寫目錄,以W舉例6個視頻大小分布在6~18MB之間

IOS

文檔:https://www.renderheads.com/content/docs/AVProVideo/articles/platform-ios.html

You need to make sure the AVProVideo.framework is set to Embed & Sign in the Frameworks

插件自帶的PostProcessBuild腳本有處理在導出xcode時的自動添加引用,如果沒有的話,則需要手動添加AVProVideo.framework的引用。

其它資料

建議閱讀官方文檔后,再閱讀第三方文章,(注意文檔要與項目中插件的版本一致),我閱讀的一篇文章:Unity AVPro Video插件使用封裝

Unity引擎自帶的播放視頻組件

Unity自帶一個Video Player,文檔:https://docs.unity.cn/cn/2019.4/Manual/class-VideoPlayer.html

但是很多用過的朋友,都發現這個組件有坑,比如在uwa上的這個貼子:華為p30視頻播放異常

遇到問題

視頻播放完后卡住

我是在游戲啟動入口處,gameObject綁定的第一個腳本Awake函數中調用AVPro 播放視頻的,在視頻播放結束后,不會退出視頻回到Unity,畫面是停在視頻的最后一幀。

從adb日志來看,安卓層的SDK代碼先執行,然后再執行Unity中第一個腳本的Awake邏輯。

安卓MainActivity的入口日志

Line 8793: 06-23 10:12:49.200 I/MainActivity( 2278): MainActivity.onCreate
Line 8813: 06-23 10:12:49.216 I/MainActivity( 2278): sdkInstance
Line 8879: 06-23 10:12:50.204 I/ActivityManager(  654): Displayed com.xxx.xxx/xxx.MainActivity: +1s847ms

安卓層發事件給Unity引擎

Line 8857: 06-23 10:12:49.814 I/System.out( 2278): setResultCallback1

Unity上層C#中第一行代碼日志

Line 8931: 06-23 10:12:53.254 I/Unity ( 2278): [Info] 10:12:53'212 游戲第一次啟動,播放cg

解決辦法:

自己在update中計算視頻是否播放完成(提前100ms調用視頻播放結束),以防插件出現問題不會回調播放完成事件

踩坑記錄:手動調用StopVideo之后,插件內部才會觸發Finish事件,我目前不依賴插件內部的播放完成,而是計算播放時間視頻播放完就調用StopVideo。

安卓11播放失敗

安卓11上調用播放視頻遇到這個錯誤,但mumu模擬器上正常,且視頻和so都是存在的。

Error:java.lang.UnsatisfiedLinkError: dlopen failed: library "libAVProLocal.so" not found

查看這個貼子:https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/81

就是Plugins/Android/arm64-v8a/*.so,在插件導入后沒有設置平台,在導出的AndroidStuio工程中就不包含這幾個so,所以在64位的安卓上調用so失敗。

解決辦法:

在Unity中把出錯的這幾個so設置正確的平台,平台選擇Android,CPU選擇ARM64,然后重新出包就解決了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM