AssetsManagerEx更新mp3无法播放

用AssetsManagerEx进行热更新,代码,图片包括动画资源都正常,唯独一个背景音乐,在Windows,iOS正常播放,在Android下则提示:
java.io.FileNotFoundException: res/sound/bg_music.mp3
资源大小为2.15mb,作为打包资源在所有平台都可正常使用。
引擎版本为:cocos2d-x-3.11.1, lua

@minggo

@dumganhar

@jare

个人觉得如果能播放,那么是否热更新的时候搜索路径没有把下载的代码文件夹加入搜索路径,这个才是错误的原因
你可以输出你的搜索路径 看看是否包含有这个MP3文件的文件夹。

一同更新的有代码,图片资源,音频,其它更新都正常,唯独这一个有问题,而且我确信加入到搜索路径中了,现在的猜测是资源大了AssetsManagerEx会有问题?

从错误来看是找不到资源,确定对应的音频文件是否在正确的文件夹下,对应的搜索路径是否加正确了。

我确定在正确的文件夹下,搜索路径也添加了
1.同个目录下的两个20几k的音频文件都正常更新播放了;
2.在win平台下正常下载播放了,热更新和设置资源搜索路径是在c++层面做的
3.为了确认一下,这是刚截取的日志
05-23 10:50:43.795: D/Cocos2dxDownloader(21168): onSuccess(i:200 headers:[Lorg.apache.http.Header;@328c04e1 file:/data/data/com.xxx.xxx/files/target/res/sound/bg_music.mp3.tmp
target是我们更新的总目录
添加资源搜索路径的代码如下:
`auto fileUtil = FileUtils::getInstance();
auto wpath = fileUtil->getWritablePath();
if ((wpath.at(wpath.size() - 1) != ‘/’) && (wpath.at(wpath.size() - 1) != ‘\’)){
wpath += “/”;
}
auto searchPaths = fileUtil->getSearchPaths();
searchPaths.insert(searchPaths.begin(), wpath + “res”);
searchPaths.insert(searchPaths.begin(), wpath + “src”);
searchPaths.insert(searchPaths.begin(), wpath + “target/res”);
searchPaths.insert(searchPaths.begin(), wpath + “target/src”);
searchPaths.insert(searchPaths.begin(), wpath + “target”);

fileUtil->setSearchPaths(searchPaths);`

抱歉不知道怎么格式化……

请问还有其它可能性吗?

找到这个声音的绝对路径 然后去试试能不能播放 同时可以用在adb shell里看是不是有这个路径的文件

fixed android 热更新音频无法播放

diff --git a/frameworks/cocos2d-x/cocos/audio/android/AudioPlayerProvider.cpp b/frameworks/cocos2d-x/cocos/audio/android/AudioPlayerProvider.cpp
index eeab392…0c933a0 100644
— a/frameworks/cocos2d-x/cocos/audio/android/AudioPlayerProvider.cpp
+++ b/frameworks/cocos2d-x/cocos/audio/android/AudioPlayerProvider.cpp
@@ -471,7 +471,7 @@ UrlAudioPlayer *AudioPlayerProvider::createUrlAudioPlayer(
return nullptr;
}

- SLuint32 locatorType = info.assetFd > 0 ? SL_DATALOCATOR_ANDROIDFD : SL_DATALOCATOR_URI;
+ SLuint32 locatorType = info.assetFd->getFd() > 0 ? SL_DATALOCATOR_ANDROIDFD : SL_DATALOCATOR_URI;
auto urlPlayer = new (std::nothrow) UrlAudioPlayer(_engineItf, _outputMixObject, _callerThreadUtils);
bool ret = urlPlayer->prepare(info.url, locatorType, info.assetFd, info.start, info.length);
if (!ret)

您好,请问能把链接发给我吗?我GitHub用得不熟,没找到这个issues……

@minggo,能再帮忙看一下吗?

@cool_navy 给给一下对应的PR的链接吗?
@xiaowandou3 -表示删除代码,+表示增加代码

在root的安卓上可以看路径下面是否有mp3这个文件,取出来用播放器试试

楼主 你解决了吗?:joy:

并没有,还好音频热更新的时候不多,就等发新包的时候再替换了

谢谢~~~:joy: