遇到問題

我們線上手遊要給港澳臺用戶增加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: [email protected] format profile: [email protected]
分辨率 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的信息中可以查看視頻文件的編碼格式和視頻尺寸等信息

在遊戲中播放cg視頻遇到的問題的更多相關文章

  1. [轉] Android 4.4中播放HTML5視頻<video>的Bug

    近期Nexus 4手機自動昇級到Android4.4,本來挺好的一件事兒,結果發現自己的應用中出現一個Bug,應用中使用了Webview播放HTML5視頻,代碼如下: <video width= ...

  2. 【轉】Android 4.4中播放HTML5視頻&lt;video&gt;的Bug

    近期Nexus 4手機自動昇級到Android4.4,本來挺好的一件事兒,結果發現自己的應用中出現一個Bug,應用中使用了Webview播放HTML5視頻,代碼如下: <video width= ...

  3. Unity3D中播放視頻的方法

    播放視頻其實和貼圖非常相像,因為播放視頻用到的 MovieTexture 屬於貼圖 Texture 的子類.Unity3D 支持的視頻格式有很多,但是還是建議使用 ogv 格式的視頻,使用其他格式依然 ...

  4. 在Winform中播放視頻等【DotNet,C#】

    在項目中遇到過這樣的問題,就是如何在Winform中播放視頻.當時考察了幾種方式,第一種是直接使用Windows Media Player組件,這種最簡單:第二種是利用DirectX直接在窗體或者控件 ...

  5. Unity3d:使用uWebKit插件嵌入網頁,網頁中的flv視頻無法播放

    問題描述:unity3d程序,使用uWebKit插件嵌入網頁,用來播放FLV視頻,有的電腦可以正常播放,有的電腦在網頁中播放不了ps:網頁中的播放器用的是player.swf解决方案:是由於網頁中的播 ...

  6. IIS中asp網站播放flv視頻技術

    播放flv視頻文件需要使用flvplayer.swf程序(32K). HTML嵌入代碼: <div id="FlashFile"> <object type=&q ...

  7. 用flvplayer.swf在網頁中播放視頻(網頁中flash視頻播放的實現)

    原:http://blog.csdn.net/ricciozhang/article/details/46868201 由於公司項目的需求,需要在展示一些信息的時候能够播放視頻,拿到這個要求,我就從最 ...

  8. 微信 vue中使用video.js播放m3u8視頻,解决安卓自動全屏的問題。

    最近一個項目中需要在微信中播放m3u8格式的視頻,剛開始用了 vue-video-player 這個插件,在IOS手機體驗良好,本以為完事了, 結果安卓手機一點播放就自動全屏,心態略崩.查了資料說是安 ...

  9. phongap開發中安卓平臺上如何調用第三方播放器來播放HLS視頻

    前文曾經講了關於在安卓平臺上利用phonegap開發播放HLS的解决方案,其實最好的方案就是自己針對HLS視頻開發自己的播放器,但是開發播放器是一個浩大的工程,必須對原生安卓開發非常熟悉,並且對視頻播 ...

  10. unity中播放視頻

    unity中播放視頻步驟如下: 1.將要播放的視頻拖入projec.(注意:unity一般支持的視頻格式有mov, .mpg, .mpeg, .mp4,.avi, .asf格式  ) 2.在場景中添加 ...

隨機推薦

  1. 淺析:點擊父控件時,子控件中的textview自動進入選中狀態

    原因:父控件屬性android:clickable="true",而textview之類的自控件默認不可點擊,沒有獨立的點擊監聽,這樣選中父控件時,textview之類的子控件也進 ...

  2. iframe自動高度

    <script> //設置iframe自動高度 function setIframe(id){ var fn = function(){ try{ var iframe = typeof ...

  3. 分析一個類似於jquery的小框架 (2)

    核心構造函數 (function ( window, undefined ) { // 定義Itcast構造函數 function Itcast ( selector ) { return new I ...

  4. linux useradd添加用戶

    useradd命令用來建立用戶帳號和創建用戶的起始目錄,使用權限是超級用戶. useradd -m -s /bin/bash -g 群組名 用戶名 其中 -m:自動建立用戶的登入目錄. -s:指定用戶 ...

  5. Genymotion下載失敗解决方法

    Genymotion下載虛擬機版本時會很慢,而且經常下載失敗 解决方法如下: 1.先去選擇下載你需要的版本,之後會下載(很慢),或者失敗. 2.到C:\Users\yourname\AppData\L ...

  6. linux &amp; mac環境python多版本切換與選擇

    linux和mac很多地方是相似的,只不過在切換python版本時權限有差异. ====圖已補上,O(∩_∩)O~ 1.linux 首先linux內核自帶版本是python2.6,但是一般linux ...

  7. [C++] const與指針的關系

    首先快速複習一些基礎. 考慮下面的聲明兼定義式: int p = 10; p的基礎數據類型是int. 考慮下面的聲明兼定義式: const int a = 10; a的基礎數據類型是int,a是一個常 ...

  8. layui:數據錶格如何合並單元格

    layui.use('table', function () { var table = layui.table; table.render({ elem: '#applyTab' , url: '$ ...

  9. 面試必會函數源代碼 strcpy/memcpy/atoi/kmp/quicksort

    http://blog.csdn.net/liuqiyao_01/article/details/26967813 二.stl模板函數 1.strcpy char * strcpy( char *st ...

  10. zabbix系列之四——快速使用

    https://www.zabbix.com/documentation/3.4/manual/quickstart/login Quickstart 1login and configuring u ...