AvauioSession错误:停用运行I/O的音频会话


2017-02-24 14:56:44.280 PropertyManager[10172:5336578] 14:56:44.280 ERROR:    [0x1a0a24000] AVAudioSession.mm:692: -[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.
2017-02-24 14:56:44.281 PropertyManager[10172:5336578] error === Error Domain=NSOSStatusErrorDomain Code=560030580 "(null)"
PropertyManager was compiled with optimization - stepping may behave oddly; variables may not be available.

您的错误日志非常简洁地表达:

Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session

它告诉您问题以及解决方案。

现在您正在做这样的事情:

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

但是,您应该首先停止音频播放器实例,然后将激活状态设置为是或编号

[yourAudioPlayer stop];
[[AVAudioSession sharedInstance] setActive:NO
                   withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
                                                 error:nil];

请参阅Apple文档以查看枚举AudioSessionsEtactiveOption的值。

另请参见:setActive上的苹果文档:withoptions方法

至于第二个错误

PropertyManager was compiled with optimization - stepping may behave oddly; variables may not be available.

请参阅此出色的答案。

@nsnoob是100%正确的。播放器(或其他东西)仍然处于活动状态。

来自Dani-MP的更多信息。他说:

我会说暂停玩家不是同步操作,所以我们在知道玩家之前,不应停用会话已经暂停了(请参阅此线程中的响应)。

解决此问题的解决方案可能是我们聆听更改一旦玩家拥有真的被暂停了。

线程中的答案说

此错误表明您的应用程序中的某些内容仍在使用音频I/O当时avauiosession setActive:不称呼。没有更多信息,但不可能说出哪个对象有时这是在A上调用异步停止方法的结果某种玩家,不等待通知播放器在停用音频会话之前已经停止。

让音频播放器在进行录制会话false之前停止..如果您想让音频播放器为nil ..删除该行..对我有用..

最新更新