iOS录音错误:Deactivating an audio session that has running I/O

情景再现:

在开发过程中,发现执行以下代码的时候,xcode控制台输出了一个错误。

[[AVAudioSession sharedInstance] setActive:NO
                                 withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
                                     error:nil];

报的错误如下:

[avas] AVAudioSession.mm:1074:-[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.

上面的代码是在录音完成的时候去恢复其他应用的正在播放的音频。其实就是,在录音的时候,要停止其他APP的一切声音,录完之后再恢复。就是在恢复的时候出了问题。

问题分析:

如果你自己的app在录音前后没有播放声音的话,就不会出现以上问题。

问题就出在自己的app在播放音效的时候,开始录音,录完之后恢复,出问题了。

我的app是在cocos2d游戏中进行录音。

从报的错误来看,就是在执行上面代码的时候,AVAudioSession没有停止,虽然在前面已经执行了[recoder stop],但是游戏中的AVAudioSession并没有停止。

我的解决办法:

在我的应用中,录音的时候并不需要去停止和恢复其他app的声音,在打开应用的时候就关闭了其他声音。只需要录完音恢复游戏的声音就可以。

所以执行以下代码就可以达到目的:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil];

这句是设置AVAudioSession为默认属性。

附:录音开始的时候需要设置为:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err]; 

其他观点:

http://stackoverflow.com/questions/31866639/avaudiosession-audio-dimming-error-deactivating-an-audio-session-that-has-runni

https://github.com/muhku/FreeStreamer/issues/147

你可能感兴趣的:(iOS开发)