Нет воспроизведения из AVPlayer после выхода приложения из приостановленного состояния

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

Он воспроизводит аудиопоток HLS. Логика моей кнопки паузы очень проста

isPlaying ? player?.play() : player?.pause()

Я проверил состояние проигрывателя и currentItem, все они говорят, что он воспроизводится. Но звук не воспроизводится или не воспроизводится

player.rate = 1
player.currentItem.asset.isPlayable = true
player.status == readyToPlay
player.currentItem.status == readyToPlay

Я также устанавливаю сеанс с помощью:

do {
    try session.setCategory(AVAudioSession.Category.playback, options: [])
    try session.setActive(true, options: [])
} catch {
    print("Failed to set session active")
}

AVPlayer не возобновится после этого

Любые советы о том, как устранить эту проблему, будут очень признательны. Нужно ли отслеживать переход приложения в состояние приостановки и перезагружать AVPlayerItem?


person User4    schedule 31.10.2020    source источник


Ответы (1)


Нужно ли отслеживать переход приложения в состояние приостановки и перезагружать AVPlayerItem?

Вам нужно следить не за приостановкой работы приложения; это прерывание аудиосеанса. AVAudioSession предоставляет уведомление именно для этой цели.

person matt    schedule 31.10.2020
comment
comment
Спасибо @мат. Я попробовал обработчик прерывания, и я вижу, что он срабатывает после возврата из приостановки. У меня это работает, но кажется немного хакерским. Я хватаю текущее прошедшее время, повторно инициализирую плеер и ищу прошедшее время. - person User4; 03.11.2020
comment
Я не понимаю, почему это хаки. Вы стримили, и все испортилось, так что, очевидно, вам нужно что-то сделать, чтобы возобновить работу. - person matt; 03.11.2020