AVAudioSession 错误:停用正在运行 I/O 的音频会话

Posted

技术标签:

【中文标题】AVAudioSession 错误:停用正在运行 I/O 的音频会话【英文标题】:AVAudioSession error: Deactivating an audio session that has running I/O 【发布时间】:2017-02-24 07:27:19 【问题描述】:
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.

【问题讨论】:

【参考方案1】:

您的错误日志非常简洁明了:

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 文档以查看 enum AudioSessionSetActiveOption 的值。

另请参阅:关于setActive:withOptions 方法的 Apple 文档

至于你的第二个错误

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

见this excellent answer。

【讨论】:

[yourAudioPlayer stop] 应该是 [yourAudioPlayer pause]。 @TheiCoder 嗯,为什么?根据 OP 的需要,它可以是其中任何一种。 即使在确保播放器已暂停后,我仍然会收到错误消息。在尝试停用会话之前,我什至将其设为 nil,但没有任何改变。 @Jargen89 在暂停时放置一个断点,然后在会话停用时检查元素。看看它是否真的暂停了,或者是否有其他代码行让它恢复。 @NSNoob,它现在可以工作了,但只有在第二天早上启动我的机器和 iphone 后才能正常工作。谢谢。【参考方案2】:

在录制会话为假之前让音频播放器停止..如果你想让音频播放器为零..删除该行..它对我有用..

【讨论】:

【参考方案3】:

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

更多来自dani-mp。他说:

我想说暂停播放器不是同步操作,所以我们 不应该在知道播放器之前停用会话 已暂停 (see the response in this thread)。

解决这个问题的方法可能是我们听取更改 timeControlStatus 并在播放器完成后停用音频会话 真的被暂停了。

thread中的答案说

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

【讨论】:

以上是关于AVAudioSession 错误:停用正在运行 I/O 的音频会话的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioSession 无法在 iOS 7 上播放

AVAudioSession - 捕获 setMode 和 setCategory 错误

AVAudioSession 的 iOS 错误

AVAudioSession setCategory 错误

应用程序因 AVAudioSession privateBeginInterruption 而崩溃

如何解决 iOS 中的 AVCaptureSession v AVAudioSession 冲突?