遇到問題
我們線上手遊要給港澳臺使用者增加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 1920x1080 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還是一樣的出錯提示。
外掛官網大致有提到高解析度視訊的限制情況,但寫的不算詳細,而且限制是跟隨作業系統的
https://www.renderheads.com/content/docs/AVProVideo/articles/feature-highres.html
兩個組的cg視訊差異(diff)
PS.我們遊戲是堅屏,開發解析度為:720x1280。
問題總結:win7 上不支援高度超過1080解析度的視訊,win10是支援的。
出問題的cg | 正常的cg | |
---|---|---|
General這一欄的資料 | ||
CodecId | isom(isom/iso2/avc1/mp41) | isom(isom) |
Video這一欄的資料 | ||
Video | format profile: main@L3.1 | format profile: high@L4 |
解析度 | 1080x1920 | 1920x1080 |
低配機對視訊尺寸或容量的限制?(容錯)
通過上面的故障,我們認識到一個問題,在安卓低配機上是否能播放高解析度的cg?如果不能,那對視訊的尺寸限制是多大,或者說視訊容量編碼格式等等有那些限制?
當然了,如果視訊無法播放,比如播放失敗,我肯定會保證它不影響正常的遊戲流程,通過後臺上傳錯誤資訊。
通過外掛的官方文件查閱到在安卓上使用google的開源視訊播放庫,所以在安卓系統上對視訊的限制,就可以直接看google的文件了
https://developer.android.com/guide/topics/media/media-formats#video-encoding
google提到720x1280高解析度並不是在所有裝置都是可用的。
解決我們的問題
通過真機驗證後,我們是這樣解決的:限制發行給的視訊尺寸為608x1080,在高解析度裝置上視訊按比例拉伸。
這個解析度的視訊在安卓、IOS,win7+win10視訊播放正常。
我們測試過720x1280的視訊在安卓6,10,11真機和模擬器上均可正常播放,但考慮到win7 pc及更低端的東南亞使用者,為保險起見我們採用對視訊尺寸做限制,比如我們有使用者的安卓機器是3+32的vivo y12s,你沒看錯,2021年了還有3+32的玩家,而且在東南亞還有不少低端機使用者。
PS.此解決辦法是針對於avpro video1.x,2.x未驗證是否有此限制。也可以給win7使用者安裝第三方解碼器來解決。
UE4問題
UE4中h265編碼的視訊在安卓上播放很暗,單獨使用安卓播放這個視訊是正常的,你知道怎麼解決嗎?這是我一個朋友遇到的問題
解決UE4的問題
排查出來是因為渲染設定為gamma就出問題了,改成linear就ok了。
這個問題我在上個專案中也遇到了,我們使用Unity的ongui繪製遊戲啟動後第一個介面的bg image,圖片發白發灰,就是很暗淡,查出來的問題也是gamma的問題。
基礎知識科普
編碼方式:H.264 ,MPEG4,QuickTime,aac
封裝格式:mp4,avi,mov,mpeg
https://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的資訊中可以檢視視訊檔案的編碼格式和視訊尺寸等資訊