iOS8 AVAudioSession setActive错误
我在XCode 6中testing我的应用程序,并在iOS8中查找AVAudioSession的问题。
当我打电话
[[AVAudioSession sharedInstance] setActive:NO error: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];