在游戏中播放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 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的信息中可以查看视频文件的编码格式和视频尺寸等信息