Я играю видео в реальном времени с AVPlayer
и AVPlayerItem
. Я наблюдаю AVPlayerItem
status
, isPlaybackLikelyToKeepUp
и AVPlayerItemPlaybackStalled
. Я также наблюдаю AVPlayer
rate
.AVPlayerItem не воспроизводит видео, даже его статус «readyToPlay» и `isPlaybackLiciousToKeepUp` является истинным
Пока я тестирую, я обнаружил, что действительно странно.
Хотя 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
)
Я проверил AVPlayerItem
«s loadedTimeRanges
и item.loadedTimeRanges.first
не ноль (loadedTimeRanges имеет только один элемент) и его start
и duration
не 0.
Что я должен проверить?
Я добавляю немного больше.
Этот симптом происходит только при потоковой передаче (m3u8) не с vod (mp4).
Так что я думаю, что это проблема буферизованных данных. Пока проигрыватель играет, буфер имеет данные для воспроизведения, и данные все еще действительны. После того, как приложение переходит в фоновый режим и обратно на передний план, буфер игрока все еще имеет данные, поэтому isPlaybackLikelyToKeepUp == true
, AVPlayerItem.status == readyToPlay
. Однако, когда я пытаюсь играть, AVPlayer
сбрасывает буфер, потому что он старый.
Похоже, что единственный способ до сих пор - создать новый AVPlayerItem
и установить, когда приложение вернется на передний план.
В чем проблема, с которой я сталкиваюсь, и хочу знать, как ее избежать.
Это репо, над которым я работаю.
https://github.com/trick14/SLPlayer
Верхний находится под напряжением и снизу одна VOD. После того, как загрузка сделана, поиграйте и перейдите в фоновом режиме и переднем плане пару раз. И если вы попытаетесь сыграть, все будет выглядеть нормально, но игрок застопорился.
Какая природа не нравится видео (любые ошибки или предупреждения в консоли)? Какой формат файла является видео? Является ли это локальным (то же устройство) или удаленным? –
@AndreM нет ошибки/предупреждения в консоли. Я тестировал с m8u и mp4 на удаленном сервере. – Ryan
можете ли вы предоставить короткий фрагмент кода? Это симулятор или фактическое устройство, и если да, то какое устройство? –