Не удается перезапустить прерванную очередь аудиоввода в фоновом режиме на iOS

Я пишу приложение для iOS, используя AudioQueue для записи. Я создаю входную очередь, настроенную на получение линейного 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 .

Мне не удалось найти ни документации для этого сообщения об ошибке, ни возможности перезапустить очередь входящего аудио в фоновом режиме.

8
задан Tobias Kräntzer 14 February 2012 в 12:04
поделиться