cocos2dx 3.13.1 华为畅享5 播放较短音效时,会导致崩溃闪退,怎么解决

可以试试换成ogg的,楼主反馈ogg并没有问题。

如果是这样,游戏这边需要用两套资源,这个bug跟播放的时间长短有关,背景音乐是没有问题的,通过这个条件能不能定位到问题?

如果是解码出错,背景音乐应该也出错才对,接口都是同一个。

是的,比较诡异。
上层使用OpenSLES接口进行解码的代码都是同一套,而且是参考android官方sample代码的。

请大家把崩溃机型对应的android版本列一下。

先建一个issue:https://github.com/cocos2d/cocos2d-x/issues/17047

请参与讨论: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进行编译

编译时通过的,所以不知道我还要修改什么地方呢?

@sylar_lin, 你的错误日志是?

由于项目比较紧,目前已经切换回SimpleAudioEngine了,这个得有空再测试,因为这台机也是从别的人手上借的,实在不好意思,不过这台机器触控应该很容易买到来做测试机的

前几天游戏也发生了这样的问题,紧急替换成了simpleAudioEngine,当使用你提供的分支方案处理audio,仍然是崩溃,请问下现在的方案是可行的吗?

麻烦提供下日志信息。
SimpleAudioEngine会有比较大的性能瓶颈。

AudioEngine(OpenSLES decoder),AudioEngine(Software decoder), SimpleAudioEngine的性能测试数据可以在这个帖中看到 http://discuss.cocos2d-x.org/t/android-audio-decoding-issues-discussion/34610

SimpleAudioengine性能低很多。

360 手机 F4
03-01 18:52:39.691: E/APEExtractor(14609): getAPEInfo not ape 502a
03-01 18:52:39.694: E/AsfParser(14609): unknown object: 3334449-0-0-001e545945520000, 1280 bytes
03-01 18:52:39.694: E/AsfParser(14609): error parsing header: -6
03-01 18:52:39.695: D/TableOfContentThread(14609): TableOfContentThread Construct !0xe90256c8
03-01 18:52:39.700: A/OMXCodec(14609): frameworks/av/media/libstagefright/OMXCodec.cpp:1468 CHECK_EQ( (int)err,(int)OK) failed: -61 vs. 0
03-01 18:52:39.700: A/libc(14609): Fatal signal 6 (SIGABRT), code -6 in tid 14663 (ALooper)


已上线产品,发现海量这个报错。

一个用户4美金。@James Chen 我有看到你说的这个https://github.com/cocos2d/cocos2d-x/pull/17233 但是不确定我1.4版本有没合并成功了。。

这个问题在github的v3分支和下个版本中已经修复了。

你是不是没有重新编译c++代码啊?

系统解码的时候,崩了,上层也无法修复。
目前改为软解码的方式,性能也提高好多。