Avpro
如题,Avpro是使用unity的大神们写的播放视频的插件,使用这个插件可以快捷的对视频进行播放暂停进度条的操作,可以说十分的便利 他的功能在官方的package导入之后有详细的说明,这里就不多说太多 这里就讲一个打包到安卓的注意事项 这个可能可以帮助到很多的兄弟们
问题
啰嗦一下
项目要求在移动端的界面里能够播放视频 以前的流程就是直接通过uniwebview的插件在unity里进行显示 但是老板说这样体验太差了,所以同事在网上搜到了avpro这个插件,将他放在3d的场景中,视觉效果确实提高了很多 但是! 同事做出的demo是在pc上运行的,所以即便能播放本地视频和在线视频都不意味着在安卓里是能一样正常运行的 不过当时我也确实没啥时间去研究这个,而且当时还不确定这个要放在初测的内容里,所以就没多留意 现在确定这个要放在初测里,就得先知道这个插件打包到安卓上是不是能正常跑通
回到主题
打包到安卓的时候发现,诶,好家伙为毛会报错 明明在pc上能正常跑的呀 于是乎在百度搜索了几个小时,期间对问题的逻辑是 1可能是版本问题:于是看了一下百度上的人说的,他们也有这个问题,打包到安卓的时候无法正确显示,但他们是本地的视频,和我在线的好像没太大关联,也没有人说版本(猜测可能是正版太贵了,大家都是在摸索的阶段所以都不去尝试新版本),毕竟这个插件unity官方售价是800美元,rmb就是五千了,并且有的人帖子里版本不高也能播放,所以基本可以排除是版本问题 2配置的参数不对:可能打包到安卓的话需要在插件上修改一下参数,百度了都是一些奇奇怪怪的方法,比如把自动播放和自动打开设为false(讲道理,小弟没嘣住)但还是毅然决然的试了一下这些参数(真香),还是没用(可恶,就不应该相信) 3安卓源码:这个思路的概括有点笼统,大概意思就是在看了这个插件的一些调用逻辑和代码之后,我感觉他的底层其实还是用的安卓去实现的,看到里面的androidobject等等的类就说明还是在安卓里封装好了api,在c#上调用的 那么,顺着这个思路我去as里看手机上跑这个项目的日志,发现出现了和上面报的异常相类似的异常 (提多一嘴)打包成安卓的项目其实在unity里看日志是不太清楚的, 他之后打印简单的异常信息,详细的信息个人建议在as之类的查看比较好,他吐露的信息更多 那么怎么修改呢
问题核心
回到前面,于是我决定定位到"Android 8 and above require HTTPS by default, change to HTTPS or enable ClearText in the AndroidManifest.xml"这个异常上 这个异常还满熟悉的(之前用其他插件和自己的jar包的时候也有出现过),不过一开始我没反应过来,为了证实确实是这个http的问题,于是我在网上找了一个https的在线视频网址,导出打包,发现,诶!可以正常播放了! 这直接说明了就是http和https的锅(本质上安卓版本的问题) 安卓在8后面的更新已经默认要求请求的时候是https了(为了安全),他配置了一个属性去拦截了请求,如果是http开头的话会直接拦截,所以我们需要把这个默认的属性给他修改一下 那么有关http和https的拦截的属性是什么呢
android:usesCleartextTraffic="true"
就是这个啦
解决思路
将usesCleartextTraffic的属性设置为true 修改unity打包成安卓时的androidmainfest.xml文件 这里有三种情况 第一种是项目里已经开启了相关的权限,就比如我们现在的项目里在前面为了访问图灵的接口和配合另一个接口的http请求,已经在自己写好的jar包里开启了这个权限,所以就可以直接忽略这个问题(这个可以看我之前开启麦克风权限的帖子) 第二种是项目刚刚建出来,啥都没有的时候,需要在项目的assets目录里创建Plugins,在这文件里创建Andriod文件 具体可以参照这个大佬的帖子操作
https://blog.csdn.net/newchenxf/article/details/119423042
然后先把项目设为安卓环境打一次包 打包成功后找到项目的这个路径 Temp\gradleOut\src\main\AndroidManifest.xml 然后把这个xml文件放到前面创建好的Android文件夹里 然后在里面添加前面说的那个属性 添加在哪里呢? 加到红框里的位置即可 然后就可以打包,只要你的路径是正确的就可以正确访问啦
第三种情况:项目里已经有AndroidManifest.xml,这个就更简单了,省了第二种方法的打包拖入的操作,直接打开就可以了 不过这里其实也分了两种情况的 第一种就是为啥你会有这个文件呢,其实就是你用了某一个插件他用到了安卓的内容,如果那个插件需要获得一些权限的话就一定会需要在项目里添加这个文件,所以你的项目里就会有这个文件啦 第二种就是虽然插件他确实需要调用一些权限,也确实是写了开启权限的配置文件 但是吧,他是用反射来实现的(比如uniwebview4),有的插件可能是为了安全还是怎么的通过自己模拟了xml的格式去写了一个c#版本的AndroidManifest.xml去配置那些权限 那么如果是这样的话就只需要照着它的书写方式依样画葫芦的添加你需要的权限就好啦!
至此本篇完结, 哦也 解决问题的感觉真爽,哇哈哈哈哈
|