遇到问题

我们线上手游要给港澳台用户增加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的信息中可以查看视频文件的编码格式和视频尺寸等信息

版权声明:本文为zhaoqingqing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhaoqingqing/p/15143061.html