zoukankan      html  css  js  c++  java
  • 使用AVPro Video在Unity中播放开场视频(CG)笔记

    游戏需要添加开场CG,调研在Unity中播放视频,采用的插件为AVPro Video,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

    导出工程,2018.4不需要做其它处理,按Unity导出即可

    StreamingAssets 下不能读取过大的文件,建议把大视频放在可读取写目录

    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时的自动添加引用,如果没有的话,则需要手动处理

    其它资料

    建议阅读官方文档后,再阅读第三方文章

    参考资料:Unity AVPro Video插件使用封装

    Unity引擎自带播放视频组件

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

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

    遇到问题

    视频播放完后卡住

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

    从日志来看,安卓层的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中的第一行代码

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

    解决办法:

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

    注意:手动调用StopVideo之后,才会触发Finish事件,我目前是没有等视频自己播放完,而是自己根据时间判断视频有没有播放完来调用完成事件。

    安卓11播放失败

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

    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失败。

    解决办法就是把这几个so设置上正确的平台,重新出包就解决了。

  • 相关阅读:
    如何在iTerm2中配置oh my zsh?
    sublime中格式化jsx文件
    ES6 new syntax of Literal
    ES6 new syntax of Rest and Spread Operators
    How to preview html file in our browser at sublime text?
    ES6 new syntax of Default Function Parameters
    ES6 new syntax of Arrow Function
    七牛云2018春招笔试题
    Spring-使用注解开发(十二)
    Spring-声明式事物(十一)
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/14964826.html
Copyright © 2011-2022 走看看