1.5.1 cc.AudioEngine 问题

通话状态切回到游戏:

2017-09-12 10:20:54.404440+0800 hello_world-mobile[1613:655631] Call was started.
D/AudioEngine-inl.mm (147): UIApplicationWillResignActiveNotification
2017-09-12 10:20:55.667506+0800 hello_world-mobile[1613:655278] interruption info:{
AVAudioSessionInterruptionTypeKey = 1;
}
D/AudioEngine-inl.mm (112): AVAudioSessionInterruptionTypeBegan, application != UIApplicationStateActive, alcMakeContextCurrent(nullptr)
E/AudioEngine-inl.mm (480): bool cocos2d::experimental::AudioEngineImpl::pause(int): audio id = 0, error = a003
2017-09-12 10:21:24.509967+0800 hello_world-mobile[1613:655946] dnssd_clientstub read_all(16) DEFUNCT
E/AudioEngine-inl.mm (494): bool cocos2d::experimental::AudioEngineImpl::resume(int): audio id = 0, error = a003
D/AudioEngine-inl.mm (157): UIApplicationDidBecomeActiveNotification
D/AudioEngine-inl.mm (173): Audio session is still interrupted, pause director!
2017-09-12 10:22:03.356762+0800 hello_world-mobile[1613:656245] Call was ended.
2017-09-12 10:22:04.710131+0800 hello_world-mobile[1613:655278] interruption info:{
AVAudioSessionInterruptionOptionKey = 1;
AVAudioSessionInterruptionTypeKey = 0;
}
D/AudioEngine-inl.mm (128): AVAudioSessionInterruptionTypeEnded, application == UIApplicationStateActive, alcMakeContextCurrent(s_ALContext)
D/AudioEngine-inl.mm (134): AVAudioSessionInterruptionTypeEnded, director was paused, try to resume it.

引擎为何要中断游戏,这样导致游戏直接卡死。 @dumganhar @pandamicro

不pause住director,在各种切换,前后台切换,siri换出,电话进来,等等打断游戏的情况下,会导致崩溃。

卡死问题你可以尝试添加初始化audio session:

https://github.com/cocos-creator/cocos2d-x-lite/pull/809

主要是init的时候初始化一下Session Category
BOOL success = [[AVAudioSession sharedInstance]

  •                setCategory: AVAudioSessionCategoryAmbient
    
  •                error: nil];
    
  • if (!success)
  •    ALOGE("Fail to set audio session.");