iOS8 AVAudioSession setActive错误

我在XCode 6中testing我的应用程序,并在iOS8中查找AVAudioSession的问题。

当我打电话

[[AVAudioSession sharedInstance] setActive:NO er​​ror:nil];

我收到以下错误信息:

AVAudioSession.mm:623: – [AVAudioSession setActive:withOptions:error:]:取消激活正在运行I / O的audio会话。 在停用audio会话之前,应该停止或暂停所有I / O。

在AVAudioSession.h,它说

请注意,如果会话在运行或暂停I / O(如audio队列,播放器,录像机,转换器,远程I / O等)时设置为非活动状态,则此方法将在iOS 8或之后的应用程序中引发exception。 。

但是我不确定如何检查是否正在运行I / O,以及如何在需要重置audio会话时处理所有的I / O。

我解决了这个问题,把这个代码插入到AVAudioPlayerDelegate的方法中。

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ [audioPlayer stop]; [audioPlayer prepareToPlay]; } 

其中audioPlayer是我的课程标题中声明的variables。

prepareToPlay指令应该可以解决你的问题!

被警告。 如果你正在播放一个电影(即使没有声音,audio轨道被删除),它仍然会创build一个I / O线程,总是会导致上述错误被抛出。

我正在使用AVAudioEngine和AVAudioPlayerNode播放声音。 我遇到同样的问题。 我的环境是iOS 10。

我使用AVAudioSession.sharedInstance()来处理AVAudioSession。 当我在模拟器中运行我的应用程序时,一切都很好,但是当我切换到我的设备。 它失败了。

我想我正在使用相同的会话来处理录制和播放。 所以可能会造成一些奇怪的问题。 就我而言,我录制声音并延迟1秒来播放。 所以当我使用stopRecordingAudio() ,我添加这段代码:

 if audioEngine.running { audioEngine = AVAudioEngine() // var audioEngine = AVAudioEngine() try! AVAudioSession.sharedInstance().setActive(false) } 

重新定义audioEngine之后,audioEngine被迫停止并释放会话。 崩溃再也不会发生。

希望这个消息可以帮助你。

我在avAudioSession setActive NO之前,

[self.audioPlayer pause]; [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];