遇到问题

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

在游戏中播放cg视频遇到的问题的更多相关文章

  1. 使用AVPro Video在Unity中播放开场视频(CG)笔记

    游戏中的开场CG(播放视频),采用的插件为AVPro Video1.x(和W的版本一致),Unity版本为2018.4.0f1 Asset Store:AVPro Video - Core Andro ...

  2. [转] Android 4.4中播放HTML5视频<video>的Bug

    近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下: <video width= ...

  3. 【转】Android 4.4中播放HTML5视频<video>的Bug

    近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下: <video width= ...

  4. Unity3D中播放视频的方法

    播放视频其实和贴图非常相像,因为播放视频用到的 MovieTexture 属于贴图 Texture 的子类.Unity3D 支持的视频格式有很多,但是还是建议使用 ogv 格式的视频,使用其他格式依然 ...

  5. 在Winform中播放视频等【DotNet,C#】

    在项目中遇到过这样的问题,就是如何在Winform中播放视频.当时考察了几种方式,第一种是直接使用Windows Media Player组件,这种最简单:第二种是利用DirectX直接在窗体或者控件 ...

  6. Unity3d:使用uWebKit插件嵌入网页,网页中的flv视频无法播放

    问题描述:unity3d程序,使用uWebKit插件嵌入网页,用来播放FLV视频,有的电脑可以正常播放,有的电脑在网页中播放不了ps:网页中的播放器用的是player.swf解决方案:是由于网页中的播 ...

  7. IIS中asp网站播放flv视频技术

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

  8. 用flvplayer.swf在网页中播放视频(网页中flash视频播放的实现)

    原:http://blog.csdn.net/ricciozhang/article/details/46868201 由于公司项目的需求,需要在展示一些信息的时候能够播放视频,拿到这个要求,我就从最 ...

  9. 微信 vue中使用video.js播放m3u8视频,解决安卓自动全屏的问题。

    最近一个项目中需要在微信中播放m3u8格式的视频,刚开始用了 vue-video-player 这个插件,在IOS手机体验良好,本以为完事了, 结果安卓手机一点播放就自动全屏,心态略崩.查了资料说是安 ...

随机推荐

  1. 使用CI/CD工具Github Action发布jar到Maven中央仓库

    之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一 ...

  2. 利用C语言将混乱数字排序(即冒泡排序法)(含思路)

    大一C语言 你没学过吗 这篇可以称的上入门级别的c语言了 当然还有水仙花数,冒泡排序等经典的C语言程序 后面也会逐一更新 尽情期待喔~~~ 冒泡排序法的基本思路为:每次将相邻的两个数比较,将小的调在前 ...

  3. js实现页面下拉,区块(文字,图片等)左右淡入淡出效果

    html: <div class="box"> <span class="historybox"> </span> < ...

  4. 在一个py脚本中调用另外一个py脚本中的类或函数

    1.两个文件在同一目录,直接import即可 2.两个文件在不同目录 在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路 ...

  5. 多es 集群数据迁移方案

    前言 加入新公司的第二个星期的星期二 遇到另一个项目需要技术性支持:验证es多集群的数据备份方案,需要我参与验证,在这个项目中需要关注到两个集群的互通性.es集群是部署在不同的k8s环境中,K8s环境 ...

  6. python 模拟点击微信

    from PyQt5 import QtCore,QtWidgets import win32gui, win32api, win32con # 调用win32api的模拟点击功能实现ctrl+v粘贴 ...

  7. 学生信息管理系统--基于jsp技术和MySQL的简单增删改查

    web实现增删改查的方式有很多啊,对于初学者来说当然是要先了解各部分的传值的方式.本篇博客从jsp技术的最基础方面进行说明. 一.什么是jsp技术 首先,我们要了解什么是jsp技术. jsp技术是基于 ...

  8. Abp太重了?轻量化Abp框架

    本文首发于个人博客(https://blog.zhangchi.fun/) 在进行框架的选型时,经常会听到"***框架太重了"之类的声音,比如"Abp太重了,不适合我们. ...

  9. Docker的学习体验

    由于兴致使然,便想学习一点Docker技术.于是,写了这篇学习Docker的体会.笔拙,见谅. 第一件事--把网线插上 相信很多人都被官网的<Sample application>的 do ...

  10. C#中使用jieba.NET、WordCloudSharp制作词云图

    目录 词云简介 准备工作 基本算法 算法实现 运行测试 参考资料 词云简介 "词云"由美国西北大学新闻学副教授.新媒体专业主任里奇·戈登(Rich Gordon)于2006年最先使 ...