2016-10-31 4 views
4

Я играю видео в реальном времени с AVPlayer и AVPlayerItem. Я наблюдаю AVPlayerItemstatus, isPlaybackLikelyToKeepUp и AVPlayerItemPlaybackStalled. Я также наблюдаю AVPlayerrate.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. После того, как загрузка сделана, поиграйте и перейдите в фоновом режиме и переднем плане пару раз. И если вы попытаетесь сыграть, все будет выглядеть нормально, но игрок застопорился.

+0

Какая природа не нравится видео (любые ошибки или предупреждения в консоли)? Какой формат файла является видео? Является ли это локальным (то же устройство) или удаленным? –

+0

@AndreM нет ошибки/предупреждения в консоли. Я тестировал с m8u и mp4 на удаленном сервере. – Ryan

+0

можете ли вы предоставить короткий фрагмент кода? Это симулятор или фактическое устройство, и если да, то какое устройство? –

ответ

0

У меня подобный опыт давным-давно. В это время я сохранил статус воспроизведения и место воспроизведения, когда пользователь нажал кнопку «домой». При возврате на передний план я использовал сохраненную информацию для восстановления или воспроизведения местоположения.

Надеюсь, вы были полезны.

+0

Вы можете поделиться своим кодом? – Jadeye