在游戏中播放cg视频遇到的问题
遇到问题
我们线上手游要给港澳台用户增加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还是一样的出错提示。
插件官网大致有提到高分辨率视频的限制情况,但写的不算详细,而且限制是跟随操作系统的
https://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: main@L3.1 | format profile: high@L4 |
分辨率 | 1080×1920 | 1920×1080 |
低配机对视频尺寸或容量的限制?(容错)
通过上面的故障,我们认识到一个问题,在安卓低配机上是否能播放高分辨率的cg?如果不能,那对视频的尺寸限制是多大,或者说视频容量编码格式等等有那些限制?
当然了,如果视频无法播放,比如播放失败,我肯定会保证它不影响正常的游戏流程,通过后台上传错误信息。
通过插件的官方文档查阅到在安卓上使用google的开源视频播放库,所以在安卓系统上对视频的限制,就可以直接看google的文档了
https://developer.android.com/guide/topics/media/media-formats#video-encoding
google提到720×1280高分辨率并不是在所有设备都是可用的。
解决我们的问题
通过真机验证后,我们是这样解决的:限制发行给的视频尺寸为608×1080,在高分辨率设备上视频按比例拉伸。
这个分辨率的视频在安卓、IOS,win7+win10视频播放正常。
我们测试过720×1280的视频在安卓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的信息中可以查看视频文件的编码格式和视频尺寸等信息