Предотвратить AVPlayerController от захвата MPRemoteCommandCenter

У меня есть контроллер представления с двумя отдельными плеерами, аудиоплеер с AVAudioPlayer и видеоплеер с AVPlayerViewController.
Когда представление загружено, оба игрока инициализируются также с их источниками, но остаются на паузе, пока пользователь не взаимодействует с одним из них.

Я пытаюсь сделать это приложение способным воспроизводить звук из AVAudioPlayer в фоновом режиме, поэтому я установил опцию в возможностях приложения, и оно работает, но у меня есть некоторые серьезные проблемы.

Первая проблема вызвана настройкой

AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default)

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

Затем я установил элементы управления для экрана блокировки и Центра управления с помощью MPRemoteCommandCenter, указав, что аудиоплеер должен запускаться или приостанавливаться, когда пользователь взаимодействует с элементами управления. Если я использую только звук без запуска плеера и переключаюсь между Центром управления, Lockscreen и плеером в приложении, все работает нормально.

Но если я начну воспроизводить видео с помощью AVPlayerViewController, приостановить его, запустить аудиоплеер и перейти на экран блокировки, команды будут привязаны к видео, даже если оно даже не воспроизводится.
Нигде в коде, который запускается для элементов управления, я не упоминаю видеоплеер (я также попытался удалить код, но безуспешно).

Это ожидаемое поведение? Есть ли способ отключить это?

TL; DR
У меня есть аудио- и видеоплеер, и я хочу, чтобы только аудиоплеер мог воспроизводить в фоновом режиме, но по какой-то причине элементы управления из MPRemoteCommandCenter отдают приоритет видеоплееру, и я хочу изменить / отключить это поведение.

1 ответ

Решение

Хорошо, так что для любого, кто пытается это решить, после некоторой возни я обнаружил, что AVPlayerController имеет свойство updatesNowPlayingInfoCenter по умолчанию установлено на true.
Установка в false предотвращает большинство проблем, которые у меня были.

У меня постоянно возникала проблема, заключающаяся в том, что при воспроизведении аудиофайла, а затем переключении на видео при закрытии приложения все равно отображаются элементы управления проигрывателя, а данные смешиваются как с аудио, так и с видео.
Я работал вокруг этого путем переключения AVAudioSession.sharedInstance().category от ambient в playback при воспроизведении аудио и переключении обратно на ambient при воспроизведении видео.

Другие вопросы по тегам