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