4

在我在所有以前版本的操作系统上的 iOS 应用程序中,我们偶尔会录制音频,然后休眠一段时间,然后再次录制,然后永远循环(休眠是为了保持电池电量)。即使应用程序在后台,这在 iOS 7 之前都可以正常工作。现在,当应用程序处于后台时,对 AudioQueueStart 的调用无法开始录制,并出现错误:-16981。我似乎在文档或网络上找不到这个错误代码,如果我把它变成一个 NSError,它会说“操作无法完成。(OSStatus 错误 -16981。)”,这是没什么帮助。

我有一个理论认为苹果在这里关闭了一个洞。想法是;你为什么要从后台进程开始录制,除非你是间谍?好吧,在用户同意的情况下(签名并付费!),​​这正是我们正在做的事情。

所以; 任何人都可以确认或否认这是预期的,或者我可以做些什么。这对我们的应用程序来说是一个杀手。我已将其作为错误提交给 Apple,并将尝试在此处报告进度。

更新:2013 年 10 月 3 日

尽管先前的答案似乎对此有用了一段时间;它现在已停止使用 -12985,这是因为另一个应用程序已打开音频。这当然是我需要使用混合标志的原因。

更新:

iOS 7.0.3(及更高版本)似乎已经完全解决了这个问题。

4

1 回答 1

4

在玩了不同的音频会话属性后,我发现启用 kAudioSessionProperty_OverrideCategoryMixWithOthers (TRUE) 时会发生 -16981 错误。一旦我将其设置为“0”,AudioQueueStart() 就会成功执行。因此,在开始音频会话之前,请尝试:

UInt32 allowMixing = 0;
status = AudioSessionSetProperty (
                      kAudioSessionProperty_OverrideCategoryMixWithOthers,
                      sizeof (allowMixing),
                      &allowMixing);

显然,这是 iOS 7 中的行为变化。如前所述,文档没有列出 -16981 错误代码。

于 2013-09-24T04:45:17.277 回答