FMOD+Unreal+鸿蒙系统 Cannot access Resource Manager

你好,我们现在在为项目接入鸿蒙系统,版本是 FMOD 2.3 和 UE4.27。

根据文档,在onCreate onDestroy中分别调用了 fmod.init(this) 和 fmod.close(),同时也在WindowActive、InActive下添加了对应的代码。

但是运行时无法播放声音。

Log中有 Cannot access Resource Manager 的 Warning,但加的打印显示在这条Warning之前,OnCreate 和 WindowActive 已经执行过了,所以 fmod.init() 也应该执行过才对。

可能是调用顺序或者哪里的配置有问题吗?什么会影响init?

在fmod.init()之前如果触发了声音的播放逻辑会导致init失败吗?

谢谢。

你好,感谢你提供的版本信息和代码截图!

我们目前还没有正式支持鸿蒙平台的 UE集成,请问是 UE 本身已经有鸿蒙的相关支持文档或流程了么?

这个通常和 FMOD native层初始化没有正确完成有关,如果你使用的是 logging 版本的 FMOD 的话,建议检查一下 Log 前期是否有出现 Registering FMOD module properties,如果没有这条日志的话,一般就说明 FMOD 的 native层没有成功初始化,这种情况下确实很有可能无法访问 Resource Manager。

init/close 放在 onCreate/onDestroy 是正确的,之后应该就不需要在 onWindowStageCreate 中再调用了。文档中提到的 WindowStage 主要是为了避免初始化过早,但一般情况下 UE 应该已经处理好了对应的生命周期。

是的,有这个可能。如果在 fmod.init() 之前就已经开始调用FMOD,比方说加载 bank,创建 Instance 或播放声音都有可能引发问题。

希望这些信息能帮到你们。

感谢回复,我们目前对ue做了一定程度的鸿蒙支持。现在我们去掉了onWindowStageCreate中init/close调用,还是这个问题,log中未见Registering FMOD module properties,根据你的说法,FMOD 的 native层没有成功初始化,请问这是什么原因?

感谢你的回复。

我的问题中提到的文档是 https://www.fmod.com/docs/2.03/api/platforms-openharmony.html 这篇。

logging版本的 FMOD是指打包时的配置,还是so库?我们从sales那边拿到的文件并没有标明是否是logging版本。

我的同事(lzh0715)在帖子下方提了新的问题,希望能得到解答。

你好,感谢补充的信息。

一般来说,这种情况通常是因为 FMOD 的底层本地库(.so)没有被正确加载或没有完整跑完初始化流程,所以即使调用了 fmod.init(),底层模块也没有真正启动起来。

你们也可以参考一下我们的 Android 平台文档,这里可以看到 FMOD 在这类平台上除了 init 外,还依赖平台侧的一些底层桥接初始化流程,如果这部分没有完整执行,就可能会出现类似现在这种 native 层没有初始化成功的情况。

结合你们目前是 UE 和鸿蒙的自定义适配,我们这边暂时没有完整的官方集成链路可以对照,所以确实比较难直接定位到是哪一步出了问题。

目前还是建议优先从以下方向排查:

  • FMOD 的库是否正确打包并被加载
  • 平台侧是否有类似初始化桥接流程没有执行到
  • UE 侧集成是否已经完整走到 FMOD 底层初始化逻辑

logging 版本指的是 so 库本身。

通常可以通过文件名是否带 L 来判断,例如:

  • libfmodL.so / libfmodstudioL.so就是带日志输出的 logging 版本
  • libfmod.so / libfmodstudio.so 就是 release用的 非 logging 版本

如果你们从 sales 那边拿到的库文件名称中没有 L,一般就是非 logging 版本。

如果需要更详细的日志用于排查问题,建议使用 logging 版本的库进行测试。

1 Like

初始化的问题已得到解决,解决方式是在FMOD - Platform Details | Open Harmony (resume audio on return from background)这篇文档中去除如下截图的步骤,具体机制尚不清楚

然后遇到的问题是

请问这有可能是什么原因导致?

感谢更新信息!

文档中的这部分主要是让 FMOD 的库可以被系统正确调用。

但由于你们是基于 UE 做的鸿蒙适配,这一块可能需要结合 UE 的接入方式来处理,而不是完全照文档中的步骤来配置。

也建议可以参考一下 UE 平台上的相关文档,确认这类 JS 接口定义和 native 模块是如何在被接入和使用的。

Lookup failed for EventModel
Get EventDescription failed

这个日志一般表示 FMOD 没有找到对应的事件,这类错误最常见的原因是 bank 没有成功加载。

我这边和同事讨论了一下,如果你们那边方便的话,可以通过邮件联系 support,并提供一下当前的 UE + 鸿蒙工程,我们可以帮你们一起看具体是哪一步没有打通。

感谢提供思路,问题解决了,是项目content/FMOD中有两个文件夹在打包时没进来,在ue打包处额外设置下就可以了

1 Like

感谢你们分享的解决方案!