Unity打包PC包时,在WIN7环境下播放视频崩溃问题的解决记录

问题描述

此问题的具体描述如下。
由于项目需求,需要在项目中添加10多个视频,其中还有一个非常规尺寸的视频。
公司的开发环境为win10系统。
使用Unity版本为Unity5.6.4f1。
使用IDE为vs2017。
显卡为N卡1070。
正常开发过程中以及打包后测试都没有问题,所以我也就放心的把包直接给客户了,但是客户反映无法使用。
到现场后进行测试,发现客户使用的所有系统均为win7系统,同时也使用了现场的3台win7设备进行了测试,均为白屏。
但是公司的win10开发环境下可以运行,同时在另一台公司的750等级显卡的win10系统设备上测试也可以运行,只不过很卡。
由于我家的电脑也是win7的,所以带回家进行测试,发现确实无法运行。
但是在家中的Unity2017.4上面却可以正常运行。只是一旦打包就无法运行。
此外值得注意的一点是,并不是所有视频都无法使用,我个人之前下载过的视频都可以正常的在win7和win10的工程使用。
但是客户提供的所有视频均无法使用。

解决过程

通过查看打包后的output_log.txt日志发现,无法播放视频的原因是当前视频的解码错误导致的。
由于视频是客户提供的,所以跟客户进行确认,客户说所有的视频都是以一种通用的高清编码方式h264进行制作的。
同时客户提出之前他们做的这些视频从来没有出现过此类问题。
通过查阅网络资料,此时得出的解决方案有一下3点:

  1. 将系统升级为win7 sp1以上。
  2. 将视频编码方式转换为vp8。
  3. 由于我个人的测试视频可用,而客户的视频无法使用,所以我怀疑客户那边视频的某些设置有问题。

虽然有3个方案,但是由于客户那边需求必须是win7系统。
而且他们的有一个视频融合系统是跟系统相关的,所以第一个方案风险很大,直接剔除。

方案二经过和他们的沟通,他们说完全没听说过vp8的编码方式,说这个是一个不常用的编码方式需要我们提供插件。
所以暂时搁置此方案。

方案三经过反复沟通,我把自己测试用的视频发给了客户,但是他们那边说跟他们提供的视频格式没有不同。无果。

此时进行了视频格式转换的尝试,经过进一步的查阅资料,看到有人说即使是mp4也存在编码格式的差异。
可以使用“格式工厂”这款软件,将视频重新转换一遍,编码方式选择为MPEG4(DivX),这样就可以在win7中播放。
经过试验,结果可行,但是也只有此种格式的mp4转码可用。
但是将所有视频转码打包后,发现此时在win7打开后直接程序崩溃。并且此时在output_log.txt文件中也没有错误信息。
同时我为了进行排查,将这个大视频单独进行了打包,结果发现是可以在win7播放的,可以打包进项目后就崩溃。
感觉很无奈。

此时经过进一步查阅资料,通过科学上网去google查了下外文帖子,发现也有人遇到了类似问题,并且也在官网上查到了。
同时在查阅过程中发现可以直接在unity中对视频进行vp8转码!
经过阅读老外的资料,发现这个问题可能是Unity的一个bug。
而且目前在我已知的资料中显示Unity5.6以后的所有版本均存在此问题。
同时这个问题只会在win7系统发生,还会导致视频导入unity中后无法进行vp8转码。
只要转码就会报错:WindowsVideoMedia error 0x8007007b while reading file://
和一个找不到视频头文件的错误。

此时我首先是想到尝试将MP4转化为Unity原生支持的.OGV格式,为此而买了一个视频格式转换软件。
同时想到将之前转换过的那个DivX编码的MP4尝试进行vp8转码,结果意外的成功了。
经过vp8转码后,这个DivX编码方式的mp4可以正常的在win7环境的项目中运行了。


    **最终的解决方案是将无法使用的mp4视频进行DivX转换,之后放到Unity中进行VP8转码。**

ps:之后测试了使用一个叫AVPro Video的插件,使用此插件进行播放而不是使用Unity自带的Video Player播放,此时可以使用原视频进行播放。说明可能Unity本身在视频这部分还存在一定的问题。

Guess you like

Origin blog.csdn.net/EverNess010/article/details/80684724