Реализация и устранение неполадок фонового звука в iOS

There are a lot of questions relating to background music playback in iOS on StackOverflow. None fully explore all edge cases, the aim of this question is to be the final word in background audio question on iOS

Определения и предположения

Весь код, вопросы и примеры относятся к .

«фон» — состояние, в которое переводится приложение, когда пользователь нажимает кнопку «Домой» или кнопку питания (, чтобы устройства отображали экран блокировки ). Приложение также можно перевести в фоновый режим с помощью переключателя многозадачности или жестов многозадачности на iPad.

"audio" — аудио, воспроизводимое с использованием AudioQueue (, включая AVAudioPlayer )

. Предпосылки

Насколько я понимаю, есть 2 требования, чтобы приложение могло воспроизводить звук в фоновом режиме.

  1. Установите UIBackgroundModesна audioв Info.plist
  2. [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

. Требования

В моем случае -воспроизводится относительно длинный звук на фоне (музыки ). Потенциально существуют сотни дорожек, и приложение будет воспроизводить их последовательно. Можно считать, что звук будет воспроизводиться бесконечно.

Приложение будет обрабатывать прерывания, приостанавливая воспроизведение.

Вопросы

У меня был переменный успех с:

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:...];

Разрешить воспроизведение звука в фоновом режиме. Но я не понимаю, требуется ли это и чем это отличается от:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

Пограничные случаи

  1. Прерывания. Если вы зарегистрируетесь, чтобы получать уведомления о прерываниях звука (телефонных звонках и т. д. ), став делегатом AVAudioPlayer. Например, если вы затем приостанавливаете или останавливаете звук, когда начинается прерывание, и возобновляете, когда оно заканчивается, ваше приложение приостанавливается, если прерывание превышает 10 минут (максимальное время, разрешенное для выполнения фоновых задач )?

  2. Симулятор остановит звук, если вызывается Lock или Home при использовании:

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    

Однако это работает на устройстве. Это известная проблема?

15
задан Felix 29 August 2012 в 11:38
поделиться