unity IL2CPP模式下中使用UMP插件打包后无法播放视频监控报错问题解决方案

最近在做数字孪生,为了方便拓展以后热更新功能进入了华佗热更新,华佗热更是使用IL2cpp模式,打包后会发现UMP插件在这个模式下报错一堆,下面完整记录了我的解决方法。

  1. 第一个报错最简单无法打包把这个脚本下关于Linux的方法全部删除注释,然后把引用全部注释掉,我这里只是截图了示例,需要自己找一下别的引用。

  2. 在上述解决后打包使用报错
    这个报错解决起来比较复杂第一步找到下图所示脚本,并加入适合IL2cpp的代码
    首先创建静态方法,解决日志回调报错
csharp 复制代码
       [DllImport(UMPSettings.ASSET_NAME)]
      private static extern void UMPNativeSetUnityLogMessageCallback(UnityLogCallback callback);
      // 日志回调
      [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
      public delegate void UnityLogCallback(string msg);
     
      public void NativeSetUnityLogMessageCallback(UnityLogCallback callback)
      {

          UMPNativeSetUnityLogMessageCallback(callback);
      }
      [AOT.MonoPInvokeCallback(typeof(UnityLogCallback))]
      private static void OnUnityLogStatic(string msg)
      {
          UnityEngine.Debug.LogError($"UMP: {msg}");
      }

在日志回调报错下面,在初始化中也有相同的问题,解决方法如下

csharp 复制代码
 [DllImport(UMPSettings.ASSET_NAME)]
 private static extern void UMPNativeSetBufferSizeCallback(int index, BufferSizeCallback callback);

在下方实现引用

csharp 复制代码
 public void NativeSetBufferSizeCallback(BufferSizeCallback callback)
 {

     UMPNativeSetBufferSizeCallback(_nativeIndex, callback);
 }

接下来调用这个方法,舍弃原本的方法,找到下方如图所示脚本

新增加入代码如下图所示

csharp 复制代码
  [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
  public delegate void BufferSizeCallback(int width, int height);
  private static Dictionary<int, MediaPlayerStandalone> _instances = new Dictionary<int, MediaPlayerStandalone>();
  public int InstanceCount;

  // 静态回调方法
  [MonoPInvokeCallback(typeof(BufferSizeCallback))]
  private static void InitBufferSizeStatic(int width, int height)
  {
      foreach (var item in _instances)
      {
          item.Value.InitBufferSize(width, height); // 调回实例方法
      }

  }   

接着使用新增代码,第一步先把新增的播放设置添加

并在播放初始化 MediaPlayerInit 方法中调用
这里原本代码已经注释掉采用自己的静态方法。

相关推荐
EasyGBS7 小时前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频
2601_955662467 小时前
情感解说视频如何提升感染力?配音细节很关键
人工智能·音视频·语音识别·视频
大圣编蚕8 小时前
初探 NDK 的世界:从零开始理解 Android 原生开发
android
云贝贝贝8 小时前
MySQL 慢查询定位与索引优化实战
android
摸鱼 特供版8 小时前
一款边录边标注的轻量截图录屏工具
windows·学习·电脑·音视频·软件需求
阿松爱学习8 小时前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#
骑着蜗牛撵大象3279 小时前
服务下线不再炸:分层关闭、TCP 存活探测与负载均衡排水的落地套路
android·tcp/ip·负载均衡·tcp·高可用·健康检查·优雅关闭
淡海水10 小时前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
技灵AI10 小时前
AI 带货视频会被限流吗?AIGC 标识、功效演示、同质化量产与画质四项判定对照
人工智能·aigc·音视频·ai电商·seedance
Black蜡笔小新11 小时前
老旧小区改造难题:新旧摄像头如何统一接入?EasyCVR一招融合
网络·音视频·easycvr