2.4.11版本复现了ios手机上接打电话后音效消失必现路径
1:音效消失原因
bool AudioEngineImpl::resume(int audioID)
{
NSLog(@“集成测试的音频resume ID:%@”, [[NSString alloc] initWithFormat:@"%d", audioID]);
if (!_checkAudioIdValid(audioID)) {
NSLog(@“集成测试的音频 resume _checkAudioIdValid return false”);
return false;
}
NSLog(@“集成测试的音频 resume after alSourcePause”);
bool ret = true;
alSourcePlay(_audioPlayers[audioID]->_alSource);
auto error = alGetError();
if (error != AL_NO_ERROR) {
NSLog(@“集成测试的音频 resume error”);
ret = false;
ALOGE("%s: audio id = %d, error = %x", PRETTY_FUNCTION,audioID,error);
}
return ret;
}
这段代码中 alSourcePlay(_audioPlayers[audioID]->_alSource); crash
2023-09-21 13:33:00.779443+0800 SzygP-mobile[2968:410431] 集成测试的音频resume ID:0
2023-09-21 13:33:00.779539+0800 SzygP-mobile[2968:410431] 集成测试的音频 resume after alSourcePause
2023-09-21 13:33:00.779599+0800 SzygP-mobile[2968:410431] 集成测试的音频 resume _checkAudioIdValid 音频存在
2023-09-21 13:33:00.779685+0800 SzygP-mobile[2968:410431] 集成测试的音频 resume error
E/AudioEngine-inl.mm (560): bool cocos2d::AudioEngineImpl::resume(int): audio id = 0, error = a004
2:必现方法,手机A打开游戏,不论是否静音状态,手机B给A打电话,A手机接到电话后不要立即接起,点开电话详情,然后回到桌面,通过左上角小电话图标再次打开接电话界面,然后接起电话,随即挂断。此时再将后台的游戏调出前台,crash发生。
3:这种回到前台crash之前,游戏调至后台时, bool AudioEngineImpl::pause( int audioID)方法内
alSourcePause(_audioPlayers[audioID]->_alSource);也发生了一次crash“
E/AudioEngine-inl.mm (533): bool cocos2d::AudioEngineImpl::pause(int): audio id = 0, error = a003
但经过测试,其他方式调整前后台的时候也有概率发生,但并不影响resume方法执行,只有resume的crash发生后,音频消失,并且不杀死进程前任何饮品无法再次播放。

