Предотвратить AVPlayerController от захвата MPRemoteCommandCenter - PullRequest
0 голосов
/ 06 декабря 2018

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

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 11 декабря 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...