无法在iOS上以后台模式重新启动中断的音频输入队列
我正在使用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 。
我无法找到此错误消息的任何文档,也无法在后台重新启动输入音频队列。
目前,如果您处于后台,则无法重新激活。
是的,这是可能的,但要在后台重新激活会话,音频会话必须设置AudioSessionProperty kAudioSessionProperty_OverrideCategoryMixWithOthers
OSStatus propertySetError = 0;
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryMixWithOthers,
sizeof (allowMixing),
&allowMixing
);
或者应用程序必须接收远程控制命令事件:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
您是否已将您的应用程序支持放在info.plist中? 我不确定是否可以在后台进行录制,但您可能需要添加“所需的背景模式”,然后在“应用播放音频”的数组中添加值
更新我刚刚检查并在后台录制是可能的。
链接地址: http://www.djcxy.com/p/79025.html上一篇: Can not restart an interrupted audio input queue in background mode on iOS