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 - 捕获 setMode 和 setCategory 错误