如何检测 AVPlayer 中的缓冲?

vrw*_*wim 3 video ios avplayer

我有一个流视频应用程序,我想知道如何检测该应用程序是否正在缓冲。

在 AVPlayer 中,有一个currentItem.isPlaybackLikelyToKeepUp布尔值可以告诉您播放缓冲区何时可能跟上当前的下载速度,并currentItem.isPlaybackBufferEmpty告诉您播放缓冲区何时为空。

问题发生在视频播放时,由于网速太慢,视频暂停。如果我按下播放按钮,rate播放器的值为 1,但它没有播放。

如何检测视频因缓冲而暂停?currentItem.isPlaybackBufferEmpty即使视频正在播放也是如此......

编辑:我已经将这两个结合起来,现在我显示的用于显示缓冲的加载程序仅在以下情况下显示currentItem.isPlaybackBufferEmpty && !currentItem.isPlaybackLikelyToKeepUp,加载程序现在仅在视频开始播放后显示几秒钟。

Dou*_*leK 5

这对我来说效果很好,也许有帮助,请致电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")
    }
}
Run Code Online (Sandbox Code Playgroud)