Unity安卓视频兼容性探讨
在Unity中使用了一段视频,然后使用了VideoPlayer组件进行播放,以下是碰到的一些问题。
兼容性问题:
Video在很多的设备中视频无法播放,如华为畅享8(安卓8.0)等等,刚开始以为是因为Android系统版本太低不兼容,后来发现Android9的也出现,这就不对了...
于是看了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官方文档,发现其实视频播放是依赖于Android手机的硬件支持的,是通过硬件解码播放的视频(codec),如果硬件解码错误,视频就无法播放。并且就算transcode勾选后,也无法播放,因为transcode也需要通过硬件解码。并且尝试了直接在视频无法播放的手机直接用自带播放器播放视频,也同样提示视频无法播放(有声音但是没有画面)
尝试了插件(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,就好了。
总结就是,视频坑很多,在游戏中还是尽可能不要使用视频的方式,因为兼容性实在是不堪。
如果你们有以上问题的解决方案,欢迎指正。