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