У меня есть контроллер представления с двумя отдельными проигрывателями, аудиопроигрыватель с AVAudioPlayer и видеопроигрыватель с AVPlayerViewController.
Когда представление загружается, оба проигрывателя также инициализируются со своими источниками, но остаются на паузе, пока пользователь не взаимодействует с одним из них. .
Я пытаюсь сделать так, чтобы это приложение могло воспроизводить звук из AVAudioPlayer в фоновом режиме, поэтому я установил параметр в возможностях приложения, и оно работает, но у меня есть некоторые серьезные проблемы.
Первая проблема вызвана установкой
AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default)
который требуется для фонового звука, но также позволяет воспроизводить видео в фоновом режиме, чего я не хочу. Есть ли способ предотвратить это?
Затем я установил элементы управления для экрана блокировки и центра управления с помощью MPRemoteCommandCenter, указав, что аудиопроигрыватель должен запускаться или приостанавливаться, когда пользователь взаимодействует с элементами управления. Если я использую только звук, даже не запуская проигрыватель, и переключаюсь между Центром управления, экраном блокировки и проигрывателем в приложении, все работает нормально.
Но если я запускаю воспроизведение видео с помощью AVPlayerViewController, ставлю его на паузу, запускаю аудиоплеер и перехожу к экрану блокировки, команды подключаются к видео, хотя видео даже не воспроизводится.
Нигде в коде этого нет. бегите за элементами управления, я упоминаю видеоплеер (я также пытался полностью удалить код, но безуспешно).
Это ожидаемое поведение? Есть ли способ отключить это?
TL;DR
У меня есть аудио- и видеоплеер, и я хочу, чтобы только аудиоплеер мог воспроизводиться в фоновом режиме, но по какой-то причине элементы управления из MPRemoteCommandCenter отдают приоритет видеоплееру, и я хотите изменить/отключить это поведение.