Я играю в прямом эфире с AVPlayer
и AVPlayerItem
. Я наблюдаю за status
, isPlaybackLikelyToKeepUp
и AVPlayerItemPlaybackStalled
AVPlayerItem
. Я также наблюдаю за rate
AVPlayer
.
Пока я тестировал, я обнаружил, что произошла действительно странная вещь.
Пока AVPlayer
воспроизводит видео нормально (AVPlayerItem.status == readyToPlay
и AVPlayerItem.isPlaybackLikelyToKeepUp == true
), если я нажимаю кнопку «Домой», AVPlayer.rate
становится 0.0
. Это означает, что игрок перестал играть.
Когда приложение возвращается на передний план, и я нажимаю кнопку воспроизведения, оно все еще AVPlayerItem.status == readyToPlay
и AVPlayerItem.isPlaybackLikelyToKeepUp == true
, но приостановлено и через некоторое время начинает воспроизводиться.
Я хочу знать, что игрок приостановлен или играет. В этом случае, даже если плеер не воспроизводит видео, статус показывает, что оно воспроизводится. (AVPlayerItem.status == readyToPlay
, AVPlayerItem.isPlaybackLikelyToKeepUp == true
, AVPlayer.rate == 1.0
)
Я проверил, что loadedTimeRanges
и item.loadedTimeRanges.first
AVPlayerItem
не равны нулю (loadedTimeRanges имеет только один элемент), а его start
и duration
не равны 0.
Что я должен проверить?
Я добавляю еще немного.
Этот симптом возникает только при потоковой передаче (m3u8), а не при воспроизведении видео (mp4).
Так что я предполагаю, что это проблема буферизованных данных. Пока проигрыватель играет, в буфере есть данные для воспроизведения, и данные все еще действительны. После того, как приложение переходит в фоновый режим и возвращается на передний план, в буфере игрока все еще есть данные, поэтому isPlaybackLikelyToKeepUp == true
, AVPlayerItem.status == readyToPlay
. Однако, когда я пытаюсь играть, AVPlayer
сбрасывает буфер, потому что он старый.
Похоже, что пока единственный способ — создать новый AVPlayerItem
и установить, когда приложение вернется на передний план.
С какой именно проблемой я сталкиваюсь и хочу знать, как ее избежать.
Это репо, над которым я работаю.
https://github.com/trick14/SLPlayer
Верхний — живой, а нижний — VOD. После того, как загрузка завершена, играйте и переключайтесь на фоновый и передний план пару раз. И если вы пытаетесь играть, все статусы выглядят нормально, но проигрыватель зависает.