热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

unity学习笔记Avpro和安卓结合

unity学习笔记Avpro问题啰嗦一下回到主题问题核心解决思路有关avpro插件使用的一些注意事项Avpro如题,Avpro是使用unity的大神们写的播放视频的插件,使用这个


unity学习笔记

  • Avpro
    • 问题
      • 啰嗦一下
      • 回到主题
    • 问题核心
    • 解决思路
  • 有关avpro插件使用的一些注意事项


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去配置那些权限
那么如果是这样的话就只需要照着它的书写方式依样画葫芦的添加你需要的权限就好啦!

至此本篇完结, 哦也
解决问题的感觉真爽,哇哈哈哈哈

2021.10.23更新


有关avpro插件使用的一些注意事项

我使用的是avpro1.11版本,不知道后面更新的版本有没有解决
第一个需要注意的就是有关playersetting里的graphics api的设置
在这里插入图片描述
1.11版本的是必须要在opengle的环境下才能正常播放视频的
查了很多的文章和视频,发现好像是插件对视频的解码方法只支持opengles3,自己试了也发现是这样(当然其实插件在使用的时候也会提醒你需要去掉vulkan)
所以如果你的项目里需要播放流媒体,而且不需要使用到vulkan的话,那么就不需要注意这个问题
vulkan在看unity官方视频里说是这个api能很大程度的优化性能,好像大厂用的比较多,unity官方在视频里也有说vulkan是2016年出的,较新的图形处理api,兼容性没那么强
第二就是vulkan的时候需要使用者和开发者共同协调的去配合才能达到优化性能的结果,但对于更多的游戏开发来说,效率和时间意味着一切,所以更多的会直接采用已经很熟悉的opengle
扯远了

那么什么时候会用到vulkan呢,我们的项目里使用了vfx制作特效,而这个特效好巧不巧需要的api就是vulkan(或者说安卓端需要的api需要是vulkan,因为在pc端没有这个问题)
那么怎么能同时满足使用这两个api呢,答案是不知道
avpro官方目前好像还没有做有关vulkan支持的更新,而vfx如果不在vulkan的条件下出来的效果会差很多
以我目前的能力能想到的解决方案就是使用别的插件实现视频播放的效果,保留vulkan
在思考的时候,想起之前使用的uniwebview插件,他可以直接播放网页上的视频,那么其实问题就比较好解决了
通过uniwebview这个插件模拟播放视频的效果就可以了
不过顺着网下想,为什么uniwebview他就支持,而avpro不支持呢
查看相关文章和两个插件的源码的时候,发现他们的底层都是调用了安卓原生的webview去实现的,这样就很奇怪了
但是能力和时间原因没有往下证实自己的一些猜想,
感觉可能是他们使用的场景不一样,uniwebview是在unity里打开了网页,然后在网页里播放的视频,说明网页的框架他是支持通过vulkan,或者说是通过安卓底层的编码格式去解析编码视频的*感觉后者的可能性更大一点,也就是说编码和解码视频的手段uniwebview自己不实现,而是交给安卓本身的webview去实现
而avpro应该是先通过webview去获得视频数据,然后自己去调用opengle的api去把数据显示到unity上的,他比uniwebview更简单粗暴一点,他只负责读取视频,而uniwebview则负责显示网页
当然主要还是两者的领域不同,avpro还能做直播等流媒体的实时处理,可能比uniwebview功能更多,更稳定一些
啰嗦这么多其实就是avpro这个插件目前在安卓环境下还不能兼容vulkan的api格式
如果想在vulkan环境下播放视频的话,要么用uniwebview插件去显示视频,要么自己在安卓里写一个webview的jar或者sdk放在unity里调用,或者自己实现在unity里通过vulkan解析编码解码视频数据…


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
author-avatar
砖头资源
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有