欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity安卓视频兼容性探讨

程序员文章站 2022-04-14 08:22:19
...

在Unity中使用了一段视频,然后使用了VideoPlayer组件进行播放,以下是碰到的一些问题。

兼容性问题:

Video在很多的设备中视频无法播放,如华为畅享8(安卓8.0)等等,刚开始以为是因为Android系统版本太低不兼容,后来发现Android9的也出现,这就不对了...

Unity安卓视频兼容性探讨

于是看了logcat输出的log,发现都有这么一条AndroidVideoMedia的log。

04-01 19:30:27.781 E/NdkMediaCodec(18497): sf error code: -12
04-01 19:30:27.781 W/Unity   (18497): AndroidVideoMedia: Error -10000 while configuring codec.
04-01 19:30:27.781 W/Unity   (18497):  
04-01 19:30:27.781 W/Unity   (18497): (Filename:  Line: 2099)
04-01 19:30:27.781 W/Unity   (18497): 

查看了Unity的文档,关于视频文件的兼容性介绍,里面提到了,如果兼容性错误,就会通过logcat输出一条前缀是AndroidVideoMedia的log。

Unity安卓视频兼容性探讨

经过翻阅谷歌官方文档,Unity官方文档,发现其实视频播放是依赖于Android手机的硬件支持的,是通过硬件解码播放的视频(codec),如果硬件解码错误,视频就无法播放。并且就算transcode勾选后,也无法播放,因为transcode也需要通过硬件解码。并且尝试了直接在视频无法播放的手机直接用自带播放器播放视频,也同样提示视频无法播放(有声音但是没有画面)

Unity安卓视频兼容性探讨

尝试了插件(AVProVideo):

后来心想,可能是Unity支持不会吧,于是使用了插件AVProVideo进行测试,因为看了AVProVideo的实现原理,发现是直接使用Android源生的接口进行播放的,理论上应该是没问题才对,不过测试发现,同样报错[AVProVideo] Error: Loading failed. File not found, codec not supported, video resolution too high or insufficient system resources。

最终的解决方案:

最终没办法,只能监听视频播放错误的回调,跳过视频播放直接进入游戏。

videoPlayer.errorReceived += PlayVideoError;

播放卡顿

视频在Android模拟器播放会超级卡,原因应该是因为安卓模拟器没有硬件解码支持,所以无解。

播放花屏

在iOS的时候播放发现会花屏,格式是mp4,后来把格式改成了webm格式,然后勾选transcode,就好了。

总结就是,视频坑很多,在游戏中还是尽可能不要使用视频的方式,因为兼容性实在是不堪。

如果你们有以上问题的解决方案,欢迎指正。