是不是要换成ogg格式
所有格式都试过了, 都奔溃,奇怪的是只是部分机型会,只要调用了AudioEngine:play2d
把cocos/audio/android/AudioPlayerProvider.cpp中的
static AudioFileIndicator __audioFileIndicator[] = {
{“default”, 128000}, // If we could not handle the audio format, return default value, the position should be first.
{".wav", 1024000},
{".ogg", 128000},
{".mp3", 160000}
};
把160000改为1,
测试不会崩掉,但是这样一来,在android6.0及以上系统下,就会出现卡顿现象,希望引擎赶紧修复这一bug
我在华为5s上也遇到这个情况,长时间的音乐,如果是mp3格式的,则不会崩溃;如果是短时间的mp3格式声音,则一定会崩溃.ogg格式的暂时没有发现这个问题. 同样的代码,则在红米手机上,不会出现这种情况
引擎层面这个bug可以修复吗?
目前还没有很好的方法,崩溃点是在android底层解码。
换成ogg能不能避免这个问题呢?游戏已经上线,这个问题的影响还是蛮大
可以试试换成ogg的,楼主反馈ogg并没有问题。
如果是这样,游戏这边需要用两套资源,这个bug跟播放的时间长短有关,背景音乐是没有问题的,通过这个条件能不能定位到问题?
如果是解码出错,背景音乐应该也出错才对,接口都是同一个。
是的,比较诡异。
上层使用OpenSLES接口进行解码的代码都是同一套,而且是参考android官方sample代码的。
请大家把崩溃机型对应的android版本列一下。
请参与讨论:http://discuss.cocos2d-x.org/t/android-audio-decoding-issues-discussion-please-come-in/34610
解决方案在:https://github.com/cocos2d/cocos2d-x/pull/17233
请帮忙测试。
请教一下。。。。我用的是vivo x6plus,还是崩溃了。。。用v3.13.1,然后合并了你这个分支的130个文件“fix/android-audio-software-decode Updated 16 days ago by dumganhar”
下面是logcat的log
感觉崩溃是这个log:
02-09 14:35:40.604: I/OMXClient(18037): Using client-side OMX mux.
02-09 14:35:40.606: D/OMXCodec(18037): !@@!>> create tid (18386) OMXCodec mOMXLivesLocally=0, mIsVideoDecoder(0), mIsVideoEncoder(0), mime(audio/mpeg)
02-09 14:35:40.606: A/OMXCodec(18037): frameworks/av/media/libstagefright/OMXCodec.cpp:1395 CHECK_EQ( (int)err,(int)OK) failed: -61 vs. 0
下面是崩溃前完整的log
02-09 14:35:40.565: D/FeatureProxyBase(18037): FeatureProxyBase class constructor
02-09 14:35:40.566: D/MultiWindow(18037): MultiWindowProxy constructor.
02-09 14:35:40.570: D/FeatureProxyBase(18037): getService(), serviceName = multiwindow_service_v1
02-09 14:35:40.581: V/cocos2d-x debug info(18037): play2d, _audioPlayers.size=1
02-09 14:35:40.581: V/AudioPlayerProvider(18037): (assets/res/gameres/sound/effect/com/dianjipai.mp3) file size: 3805
02-09 14:35:40.582: V/AudioPlayerProvider(18037): FileInfo (0xde99c3f8), Waiting preload (assets/res/gameres/sound/effect/com/dianjipai.mp3) to finish …
02-09 14:35:40.582: V/AudioPlayerProvider(18037): AudioPlayerProvider::preloadEffect: (assets/res/gameres/sound/effect/com/dianjipai.mp3)
02-09 14:35:40.583: V/AudioDecoder(18037): Play callback registered
02-09 14:35:40.584: D/FileSourceProxy(18037): Fd: 64 register!
02-09 14:35:40.585: D/AsfParser(18037): JB +MediaExtractor::Create
02-09 14:35:40.586: D/DrmManagerClient(Native)(18037): DrmManagerClient(): mUniqueId=[7164]
02-09 14:35:40.587: D/DrmManagerClient(Native)(18037): ~DrmManagerClient(): mUniqueId=[7164]
02-09 14:35:40.598: D/MPEG2PSExtractor(18037): +SniffMPEGPS in
02-09 14:35:40.598: D/MPEG2PSExtractor(18037): sniff length: 0x400
02-09 14:35:40.599: D/MPEG2PSExtractor(18037): ********************* parsePackHeader can’t find pack header start code *********************
02-09 14:35:40.602: D/WVMExtractorImpl(18037): IsWidevineMedia() return 0
02-09 14:35:40.602: I/AsfParser(18037): ASFExtractor: mFileSize=3805
02-09 14:35:40.602: I/AsfParser(18037): +ASFExtractor 0x0xd5272710, tid=18386
02-09 14:35:40.602: E/AsfParser(18037): unknown object: 3334449-0-0-0023545353450000, 3840 bytes
02-09 14:35:40.602: I/AsfParser(18037): obj->type=0,size=8530182732100144896,datalen=0
02-09 14:35:40.602: E/AsfParser(18037): error parsing header: -6
02-09 14:35:40.602: I/AsfParser(18037): [ASF_ERROR]Not an ASF file!!!
02-09 14:35:40.603: I/AsfParser(18037): -ASFExtractor 0x0xd5272710, tid=18386
02-09 14:35:40.603: I/AsfParser(18037): ~ASFExtractor 0x0xd5272710, tid=18386
02-09 14:35:40.603: I/SniffMedia(18037): id3 len = 35
02-09 14:35:40.603: I/ContentPipe(18037): cache heat 0.90(10/1), cache efficiency 0.025(96/3805)
02-09 14:35:40.603: I/VivoExtractorHelper(18037): vivo sniff result: audio/mpeg
02-09 14:35:40.603: I/VivoExtractorHelper(18037): SniffMedia takes 0 msecs
02-09 14:35:40.603: D/AsfParser(18037): Autodetected media content as ‘audio/mpeg’ with confidence 1.00
02-09 14:35:40.603: D/AsfParser(18037): JB -MediaExtractor::Create
02-09 14:35:40.603: D/TableOfContentThread(18037): TableOfContentThread Construct !0xdac4cdc8
02-09 14:35:40.604: I/OMXClient(18037): Using client-side OMX mux.
02-09 14:35:40.606: D/OMXCodec(18037): !@@!>> create tid (18386) OMXCodec mOMXLivesLocally=0, mIsVideoDecoder(0), mIsVideoEncoder(0), mime(audio/mpeg)
02-09 14:35:40.606: A/OMXCodec(18037): frameworks/av/media/libstagefright/OMXCodec.cpp:1395 CHECK_EQ( (int)err,(int)OK) failed: -61 vs. 0
02-09 14:35:40.607: A/libc(18037): Fatal signal 6 (SIGABRT), code -6 in tid 18386 (ALooper)
感觉这几个帖子都有提到。。。
http://forum.cocos.com/t/vivo-x6plus-d-android5-1-audioengine-32bit-22-1khz-mp3/42428
http://forum.cocos.com/t/cocos3-13-1-note-4-ccexp-audioengine-play2d/42090/4
从日志看,明显没有合并成功,用的还是旧的逻辑啊。
软解码是不会有这些日志的,这些日志都是系统通知。
所以我猜你没有合并成功那个软解码的补丁。
小白请教一下如何合并呢?
我原来是3.13.1的代码,gdmj是项目名
然后把3.14.1中的frameworks/cocos2d-x/cocos/audio覆盖我本地的gdmj/frameworks/cocos2d-x/cocos/audio/
后来发现还会崩溃,接着找到这个帖子
我是把你的分支下载下来
然后再上述修改的基础上覆盖或者添加这些目录对应文件:
gdmj/frameworks/cocos2d-x/cocos/audio/android
gdmj/frameworks/cocos2d-x/external/pvmp3dec
gdmj/frameworks/cocos2d-x/external/tremolo
然后cocos compile -p android进行编译
编译时通过的,所以不知道我还要修改什么地方呢?
由于项目比较紧,目前已经切换回SimpleAudioEngine了,这个得有空再测试,因为这台机也是从别的人手上借的,实在不好意思,不过这台机器触控应该很容易买到来做测试机的
前几天游戏也发生了这样的问题,紧急替换成了simpleAudioEngine,当使用你提供的分支方案处理audio,仍然是崩溃,请问下现在的方案是可行的吗?
