在遊戲中播放cg影片遇到的問題
- 2021 年 8 月 15 日
- 筆記
- Unity, Unity項目開發日誌
遇到問題
我們線上手游要給港澳台用戶增加cg影片,在我之前文章中已經講到了我們是怎麼在unity中播放cg的——》《使用AVPro Video在Unity中播放開場影片(CG)筆記》,這篇就寫一下cg在我們實際項目中遇到的問題。
在某位同事的電腦上(win7)影片無法播放,在win10電腦上播放正常,報如下錯誤:
“[AVProVideo] If video fails to play then it may be due to the resolution being higher than 1920×1080 which is the limitation of the Microsoft DirectShow H.264 decoder.\nTo resolve this you can either use Windows 8 or above (and disable ‘Force DirectShow’ option), resize your video, use a different codec (such as Hap or DivX), or install a 3rd party H.264 decoder such as LAV Filters.”)
上述錯誤出自:WindowsMediaPlayer.OnTextureSizeChanged,插件在程式碼中硬編碼寫死了DirectShow解析度上限
嘗試借用友組的幾個cg影片在她的機器上都可以播放,然後嘗試把cg從72MB壓縮到22MB還是一樣的出錯提示。
插件官網大致有提到高解析度影片的限制情況,但寫的不算詳細,而且限制是跟隨作業系統的
//www.renderheads.com/content/docs/AVProVideo/articles/feature-highres.html
兩個組的cg影片差異(diff)
PS.我們遊戲是堅屏,開發解析度為:720×1280。
問題總結:win7 上不支援高度超過1080解析度的影片,win10是支援的。
出問題的cg | 正常的cg | |
---|---|---|
General這一欄的數據 | ||
CodecId | isom(isom/iso2/avc1/mp41) | isom(isom) |
Video這一欄的數據 | ||
Video | format profile: [email protected] | format profile: high@L4 |
解析度 | 1080×1920 | 1920×1080 |
低配機對影片尺寸或容量的限制?(容錯)
通過上面的故障,我們認識到一個問題,在Android低配機上是否能播放高解析度的cg?如果不能,那對影片的尺寸限制是多大,或者說影片容量編碼格式等等有那些限制?
當然了,如果影片無法播放,比如播放失敗,我肯定會保證它不影響正常的遊戲流程,通過後台上傳錯誤資訊。
通過插件的官方文檔查閱到在Android上使用google的開源影片播放庫,所以在Android系統上對影片的限制,就可以直接看google的文檔了
//developer.android.com/guide/topics/media/media-formats#video-encoding
google提到720×1280高解析度並不是在所有設備都是可用的。
解決我們的問題
通過真機驗證後,我們是這樣解決的:限制發行給的影片尺寸為608×1080,在高解析度設備上影片按比例拉伸。
這個解析度的影片在Android、IOS,win7+win10影片播放正常。
我們測試過720×1280的影片在Android6,10,11真機和模擬器上均可正常播放,但考慮到win7 pc及更低端的東南亞用戶,為保險起見我們採用對影片尺寸做限制,比如我們有用戶的Android機器是3+32的vivo y12s,你沒看錯,2021年了還有3+32的玩家,而且在東南亞還有不少低端機用戶。
PS.此解決辦法是針對於avpro video1.x,2.x未驗證是否有此限制。也可以給win7用戶安裝第三方解碼器來解決。
UE4問題
UE4中h265編碼的影片在Android上播放很暗,單獨使用Android播放這個影片是正常的,你知道怎麼解決嗎?這是我一個朋友遇到的問題
解決UE4的問題
排查出來是因為渲染設置為gamma就出問題了,改成linear就ok了。
這個問題我在上個項目中也遇到了,我們使用Unity的ongui繪製遊戲啟動後第一個介面的bg image,圖片發白髮灰,就是很暗淡,查出來的問題也是gamma的問題。
基礎知識科普
編碼方式:H.264 ,MPEG4,QuickTime,aac
封裝格式:mp4,avi,mov,mpeg
//github.com/ZHOURUIH/MyFramework 中包含了AVProVideo
編碼容器
AVProVideo在Winddows上的編碼 NotchLC
同樣是H.264+AAC,.mov .mp4 等等不同容器間有什麼區別嗎?
H.264+AAC是編解碼格式,.mov .mp4 是裝載前者數據的容器。
影片數據不是像圖片那樣圖片內容是一個整體。影片內容分frame,幾個frame一段,一段相當於一個節點,類似xml那樣保存在mov中。
mov最早由蘋果支援,我剛測了下chrome暫不支援播放mov,mov後綴改成mp4後,chrome就能直接播放了,而HTML5是推支援H.264的,所以你的mp4一定要H.264編碼。
所以我的結論是,你要是想用HTML5,那就得用mp4。
查看影片文件編碼
在potplayer的資訊中可以查看影片文件的編碼格式和影片尺寸等資訊