我正在编写一个使用 AudioQueue 进行录制的 iOS 应用程序。我创建了一个配置为获取线性 PCM 的输入队列,声明了这个队列并且一切都按预期工作。
为了管理中断,我实现了 AVAudioSession 的委托方法来捕捉中断的开始和结束。endInterruption 方法如下所示:
- (void)endInterruptionWithFlags:(NSUInteger)flags;
{
if (flags == AVAudioSessionInterruptionFlags_ShouldResume && audioQueue != 0) {
NSLog(@"Current audio session - category: '%@' mode: '%@'",
[[AVAudioSession sharedInstance] category],
[[AVAudioSession sharedInstance] mode]);
NSError *error = nil;
OSStatus errorStatus;
if ((errorStatus = AudioSessionSetActive(true)) != noErr) {
error = [self errorForAudioSessionServiceWithOSStatus:errorStatus];
NSLog(@"Could not reactivate the audio session: %@",
[error localizedDescription]);
} else {
if ((errorStatus = AudioQueueStart(audioQueue, NULL)) != noErr) {
error = [self errorForAudioQueueServiceWithOSStatus:errorStatus];
NSLog(@"Could not restart the audio queue: %@",
[error localizedDescription]);
}
}
}
// ...
}
如果应用程序在前台被中断,则一切正常。如果中断发生在后台,就会出现问题。激活音频会话会导致错误!cat:
指定的音频会话类别不能用于尝试的音频操作。例如,您尝试播放或录制音频会话类别设置为 kAudioSessionCategory_AudioProcessing。
在不激活会话的情况下启动队列会导致错误代码:-12985
此时,类别设置为AVAudioSessionCategoryPlayAndRecord,模式为AVAudioSessionModeDefault。
我找不到有关此错误消息的任何文档,也无法在后台重新启动输入音频队列。