Unity提供了VideoPlayer组件用来播放视频,VideoPlayer加载视频的方式有两种,Videoclip和URL方式。我计划把视频资源放在StreamingAssets目录下使用,一开始想用VideoClip方式直接加载。结果发现将视频拖放到StreamingAssets目录下时,并没有自动转换为VideoClip格式,而拖放到其它目录下则可转换为VideoClip,这又是Unity的潜规则。此路走不通只能使用URL方式加载了。
1、开始直接如下拼接URL地址,Editor下运行可以正常加载,然后Android运行时无法正常加播放。
VideoPlayer vp = gameObject.GetComponent<VideoPlayer>();
vp.url = Application.streamingAssetsPath + "/" + “test.mp4”;
2、Android手机查看Log发现如下错误:
(1)AndroidVideoMedia: Error opening extractor: -10000
网上查询发现该原因可能是由于Google在API28之后禁止使用明文网路导致,我们需要修改AndroidManifest,设置usesCleartextTraffic为true:
<application
android:icon="@mipmap/app_icon"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:theme="@style/UnityThemeSelector">
(2)按(1)改完再打包测试仍然不能正常播放,但这次错误码变了,
AndroidVideoMedia: Error opening extractor: -10002
网上查询发现说是Unity本身有Bug,针对Android-10系统VideoPlayer不能播放persistentpath下的文件,Unity官方已于2019.7.9解决。查看当前使用的手机确实是Android10系统,于是我找到一个不是Android10系统的手机,结果安装后可以正常播放。呃呃。。。但我使用的Unity版本为2019.4.8,按说该版本应该已经修复此Bug。后来问同事有没有遇到过这种问题,同事看了URL的拼写,提示会不会URL拼写格式有问题,然后我就把URL拼写方式改为如下:
vp.url = Path.Combine(Application.streamingAssetsPath, “test.mp4”);
然后打包,放到Android10系统上也可以成功播放了。
网友评论