8

我正在编写一个使用 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

我找不到有关此错误消息的任何文档,也无法在后台重新启动输入音频队列。

4

3 回答 3

8

是的,这是可能的,但要在后台重新激活会话,音频会话必须设置 AudioSessionProperty kAudioSessionProperty_OverrideCategoryMixWithOthers

OSStatus propertySetError = 0;
    UInt32 allowMixing = true;



    propertySetError = AudioSessionSetProperty (
                                                kAudioSessionProperty_OverrideCategoryMixWithOthers,
                                                sizeof (allowMixing),
                                                &allowMixing
                                                );

或者应用程序必须接收远程控制命令事件

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
于 2012-03-22T12:15:18.713 回答
0

您是否在 info.plist 中让您的应用程序支持后台?我不确定是否可以在后台录制,但您可能需要添加“必需的背景模式”,然后在“应用程序播放音频”数组中添加一个值

更新我刚刚检查并可以在后台录制。

于 2012-02-14T20:29:43.393 回答
0

目前,如果您在后台,则无法重新激活。

于 2012-02-15T00:48:18.753 回答