Я пишу приложение iOS, используя AudioQueue для записи. Я создаю очередь ввода, настроенную для получения линейного PCM, заявила эту очередь, и все работает так, как ожидалось.Невозможно перезапустить прерыванную очередь ввода аудио в фоновом режиме на iOS
Чтобы управлять прерываниями, я реализовал методы делегата 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]);
}
}
}
// ...
}
Если приложение прерывается, пока он находится на переднем плане, все работает правильно. Проблема возникает, если прерывание происходит в фоновом режиме. Активация результата аудио сеанса в ошибке кошки:
Указанной категория аудио сессии не может быть использован для попытки аудио работы. Например, вы попытались воспроизвести или записать аудио с категорией аудиосеансов, установленной в kAudioSessionCategory_AudioProcessing.
Запуск очереди без активации результатов сеанса в коде ошибки: -12985
В этот момент категория устанавливается в AVAudioSessionCategoryPlayAndRecord и режим AVAudioSessionModeDefault.
Я не могу найти документацию для этого сообщения об ошибке, а также можно перезапустить входную аудио-очередь в фоновом режиме.
Я так и думал. :-( –