游戏中的开场CG(播放视频),采用的插件为AVPro Video1.x(和W的版本一致),Unity版本为2018.4.0f1

Asset Store:AVPro Video - Core Android Edition

官方文档:https://www.renderheads.com/content/docs/AVProVideo/articles/intro.html

AVPro分为多个版本:Core(核心版),Ultra(专业版),企业版。

我了删除部分没有用到的shader,见文档:https://www.renderheads.com/content/docs/AVProVideo/articles/usage-shaders.html

1.x(2020年之前的版本)和2.x(2020.6.15之后)版本对比:https://www.renderheads.com/content/docs/AVProVideo/articles/whatsnew.html

建议视频格式为mp4,在各个平台(安卓/ios/windows/mac)都支持。

在官方文档有提到:在Editor下播放成功并不代码安卓和IOS也成功,需要分别在每个平台测试,从插件源代码来看每个平台都用原生实现的,所以要在对应平台上分别测试。

官方文档解读

这里摘录一下官方文档上每个平台的一些要求和注意事项,然后记录一下我接入过程中的笔记。

Android

Android streaming requires the Internet Access setting (in Player Settings) to be set to “Require”:

This plugin requires a minimum Android API level of 15 when using the MediaPlayer API

For rendering OpenGL ES 2.0 and OpenGL ES 3.0 are supported, and multi-threaded rendering is supported on both

打包过程:Unity2018.4不需要做什么处理,从Unity导出工程即可

StreamingAssets 下不能读取过大的文件,建议把很大的视频放在可读取写目录,以W举例6个视频大小分布在6~18MB之间

IOS

文档:https://www.renderheads.com/content/docs/AVProVideo/articles/platform-ios.html

You need to make sure the AVProVideo.framework is set to Embed & Sign in the Frameworks

插件自带的PostProcessBuild脚本有处理在导出xcode时的自动添加引用,如果没有的话,则需要手动添加AVProVideo.framework的引用。

其它资料

建议阅读官方文档后,再阅读第三方文章,(注意文档要与项目中插件的版本一致),我阅读的一篇文章:Unity AVPro Video插件使用封装

Unity引擎自带的播放视频组件

Unity自带一个Video Player,文档:https://docs.unity.cn/cn/2019.4/Manual/class-VideoPlayer.html

但是很多用过的朋友,都发现这个组件有坑,比如在uwa上的这个贴子:华为p30视频播放异常

遇到问题

视频播放完后卡住

我是在游戏启动入口处,gameObject绑定的第一个脚本Awake函数中调用AVPro 播放视频的,在视频播放结束后,不会退出视频回到Unity,画面是停在视频的最后一帧。

从adb日志来看,安卓层的SDK代码先执行,然后再执行Unity中第一个脚本的Awake逻辑。

安卓MainActivity的入口日志

Line 8793: 06-23 10:12:49.200 I/MainActivity( 2278): MainActivity.onCreate
Line 8813: 06-23 10:12:49.216 I/MainActivity( 2278): sdkInstance
Line 8879: 06-23 10:12:50.204 I/ActivityManager( 654): Displayed com.xxx.xxx/xxx.MainActivity: +1s847ms

安卓层发事件给Unity引擎

Line 8857: 06-23 10:12:49.814 I/System.out( 2278): setResultCallback1

Unity上层C#中第一行代码日志

Line 8931: 06-23 10:12:53.254 I/Unity ( 2278): [Info] 10:12:53'212 游戏第一次启动,播放cg

解决办法:

自己在update中计算视频是否播放完成(提前100ms调用视频播放结束),以防插件出现问题不会回调播放完成事件

踩坑记录:手动调用StopVideo之后,插件内部才会触发Finish事件,我目前不依赖插件内部的播放完成,而是计算播放时间视频播放完就调用StopVideo。

安卓11播放失败

安卓11上调用播放视频遇到这个错误,但mumu模拟器上正常,且视频和so都是存在的。

Error:java.lang.UnsatisfiedLinkError: dlopen failed: library "libAVProLocal.so" not found

查看这个贴子:https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/81

就是Plugins/Android/arm64-v8a/*.so,在插件导入后没有设置平台,在导出的AndroidStuio工程中就不包含这几个so,所以在64位的安卓上调用so失败。

解决办法:

在Unity中把出错的这几个so设置正确的平台,平台选择Android,CPU选择ARM64,然后重新出包就解决了。

使用AVPro Video在Unity中播放开场视频(CG)笔记的更多相关文章

  1. unity中播放视频

    unity中播放视频步骤如下: 1.将要播放的视频拖入projec.(注意:unity一般支持的视频格式有mov, .mpg, .mpeg, .mp4,.avi, .asf格式  ) 2.在场景中添加 ...

  2. Unity中播放带有alpha通道格式为Mp4的视频

    问题: Unity中实现播放透明的MP4视频时出现黑点 解决办法:    使用Unity自带的shader去除黑点 1:shader代码如下所示 Shader "Unlit/NewUnlit ...

  3. [转] Android 4.4中播放HTML5视频<video>的Bug

    近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下: <video width= ...

  4. 【转】Android 4.4中播放HTML5视频<video>的Bug

    近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下: <video width= ...

  5. 如何在Unity中播放影片

    Unity支援影片貼圖,也就是說可以匯入影片並附加到遊戲物件上,基本上您電腦上的Quick Time播放器能播的,大致上都能播,已知的支援的影片格式有下列幾種:.mov, .mpg, .mpeg, . ...

  6. 在游戏中播放cg视频遇到的问题

    遇到问题 我们线上手游要给港澳台用户增加cg视频,在我之前文章中已经讲到了我们是怎么在unity中播放cg的--><使用AVPro Video在Unity中播放开场视频(CG)笔记> ...

  7. unity 播放外部视频

    摘要: Unity支持的播放视频格式有.mov..mpg..mpeg..mp4..avi和.asf.只需将对应的视频文件拖拽入Project视图即可,它会自动生成对应的MovieTexture对象. ...

  8. 【转】Unity3D研究院之两种方式播放游戏视频

    http://www.xuanyusong.com/archives/1019   Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像 ...

  9. 微信 vue中使用video.js播放m3u8视频,解决安卓自动全屏的问题。

    最近一个项目中需要在微信中播放m3u8格式的视频,刚开始用了 vue-video-player 这个插件,在IOS手机体验良好,本以为完事了, 结果安卓手机一点播放就自动全屏,心态略崩.查了资料说是安 ...

随机推荐

  1. 4、VMware虚拟机相关配置

    4.1.VMware虚拟机开启模块snapshot失败: 1.非正常VMware关闭虚拟机(例如开关机过程中关掉VMware等操作),再次启动虚拟机可能 会出现提示:"锁定文件失败 虚拟机开 ...

  2. FastDFS文件系统迁移和数据恢复

    迁移步骤 打包旧服务器文件的所有文件 定位到旧服务器的tracker和Storage目录,将整个文件夹打包 tar -zcf fdfs-storage-data.tar.gz /fastdfs/sto ...

  3. POJ 1681 高斯消元 枚举自由变元

    题目和poj1222差不多,但是解法有一定区别,1222只要求出任意一解,而本题需要求出最少翻转次数.所以需要枚举自由变元,变元数量为n,则枚举的次数为1<<n次 #include < ...

  4. 1.5Java、万维网以及其他

    要点提示:Java是一种功能强大和多用途的编程语言,可用于开发运行在移动设备.台式计算机以及服务器端的软件.

  5. Vue使用PrintJs自定义打印表格模板

    这俩天客户提了个需求,需要打印俩个自定义的表格模板,一开始想到的是打印Json表格,但是发现表格样式不符合要求,后来想着打印html,自己生成html模板然后打印,基本可以满足客户的需求,废话不多说, ...

  6. ROS2学习之旅(14)——编写简单的发布者和订阅者(C++)

    节点是通过ROS Graph进行通信的可执行进程.在本文中,节点将通过话题以字符串消息的形式相互传递信息.这里使用的例子是一个简单的"talker"和"listener& ...

  7. Java | 集合(Collection)和迭代器(Iterator)

    集合(Collection) 集合就是Java中提供的一种 空器,可以用来存储多个数据. 集合和数组都是一个容器,它们有什么区别呢? 数组的长度是固定的,集合的长度是可变的. 数组中存储的是同一类型的 ...

  8. python远程备份mysql并压缩

    import osimport timeimport tarfileimport zipfile'''mysqldumpUsage: mysqldump [OPTIONS] database [tab ...

  9. python encode decode

    Python encode()encode() 方法以 encoding 指定的编码格式编码字符串.errors参数可以指定不同的错误处理方案.写法:str.encode(encoding='UTF- ...

  10. MapReduce学习总结之架构

    一.MapReduce1.x架构 1)jobTracker:JT 作业的管理者 将作业分解成一堆任务:Task(MapTask和ReduceTask) 将任务分派给TaskTracker(TT)运行 ...