2016-10-20 3 views
2

У меня есть потоковое видео приложение, и я хотел бы знать, как я могу определить, является ли приложение буферизацией или нет.Как определить буферизацию в AVPlayer?

В AVPlayer есть currentItem.isPlaybackLikelyToKeepUp boolean, который сообщает вам, когда буфер воспроизведения, скорее всего, будет поддерживать текущую скорость загрузки, и currentItem.isPlaybackBufferEmpty, который сообщает вам, когда буфер воспроизведения пуст.

Проблема возникает, когда видео воспроизводится, видео приостанавливается, потому что интернет слишком медленный. Если я затем нажимаю кнопку воспроизведения, то rate плеера - 1, но он не воспроизводится.

Как я могу обнаружить, что видео приостановлено, потому что оно буферизуется? currentItem.isPlaybackBufferEmpty верно даже тогда, когда видео играет ...

EDIT: Я объединил эти 2 и теперь загрузчик я показываю, чтобы отобразить буферизация отображается только если currentItem.isPlaybackBufferEmpty && !currentItem.isPlaybackLikelyToKeepUp, загрузчик теперь только показывает несколько секунд после старта видео играть.

ответ

0

Это прекрасно работает для меня, может быть, это может помочь, звоните self?.bufferState() внутри addPeriodicTimeObserver

private func bufferState() { 
    if let currentItem = self.avPlayer.currentItem { 
     if currentItem.status == AVPlayerItemStatus.readyToPlay { 
      if currentItem.isPlaybackLikelyToKeepUp { 
       print("Playing ") 
      } else if currentItem.isPlaybackBufferEmpty { 
       print("Buffer empty - show loader") 
      } else if currentItem.isPlaybackBufferFull { 
       print("Buffer full - hide loader") 
      } else { 
       print("Buffering ") 
      } 
     } else if currentItem.status == AVPlayerItemStatus.failed { 
      print("Failed ") 
     } else if currentItem.status == AVPlayerItemStatus.unknown { 
      print("Unknown ") 
     } 
    } else { 
     print("avPlayer.currentItem is nil") 
    } 
}