Unity安卓视频兼容性探讨

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

兼容性问题:

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

Unity安卓视频兼容性探讨_第1张图片

于是看了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安卓视频兼容性探讨_第2张图片

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

Unity安卓视频兼容性探讨_第3张图片

尝试了插件(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,就好了。

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

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

你可能感兴趣的:(游戏开发踩坑记录,unity3d,Android)