У меня есть приложение, которое передает видео из сети и воспроизводит его с помощью объекта MPMoviePlayerController
для воспроизведения на устройстве или через AirPlay.
Приложение поддерживает работу в фоновом режиме и имеет опцию 'audio' в списке необходимых ключей UIBackgroundModes
в своем plist-файле.
При воспроизведении через AirPlay приложение может быть успешно переведено в фоновый режим, и видео продолжает воспроизводиться правильно. Пока все хорошо.
Согласно документации Apple:
Включение аудио ключа говорит системным фреймворкам, что они должны продолжать воспроизведение и делать необходимые обратные вызовы приложению через соответствующие интервалы времени. Если приложение не включает эту клавишу, любой звук воспроизводимое приложением, остановится, когда приложение перейдет в фоновый режим.
Однако эти обратные вызовы не выполняются.
Приложение использует два типа обратных вызовов: те, которые связаны с уведомлениями MPMoviePlayerController
и AVPlayer
, отправляемыми во время воспроизведения, а также обратные вызовы на основе таймера, которые отслеживают положение воспроизведения и статистику производительности в целях мониторинга.
Глядя на примечания Apple, я, конечно, ожидал получить первый тип обратного вызова, чтобы приложение могло ответить на MPMoviePlayerPlaybackStateDidChangeNotification
, MPMoviePlayerPlaybackDidFinishNotification
и MPMoviePlayerLoadStateDidChangeNotification
, но этого не происходит.
Кто-нибудь знает, возможно ли получить эти уведомления во время фонового воспроизведения AirPlay, и если да, то как этого удалось добиться?
**Примечание: приложение работает корректно при работе на переднем плане и получает уведомления нормально. Только когда оно переведено в фоновый режим и воспроизводится через AirPlay, уведомления не принимаются.
Аналогично, видео воспроизводится через AirPlay в фоновом режиме правильно. Не принимаются только уведомления**