如何在AVPlayer中检测缓冲?

3
我有一个流媒体应用程序,想知道如何检测应用程序是否正在缓冲。
在AVPlayer中,有一个布尔值`currentItem.isPlaybackLikelyToKeepUp`,它告诉您当前下载速度下播放缓冲区是否有足够的数据,还有一个`currentItem.isPlaybackBufferEmpty`,它告诉您播放缓冲区是否为空。
当视频正在播放时,由于网络过慢而导致视频暂停。如果我然后按播放按钮,播放器的`rate`为1,但是未播放。
如何检测视频因为缓冲而暂停?即使视频正在播放,`currentItem.isPlaybackBufferEmpty`仍然为真...
编辑:我已经将这两者结合起来,现在我显示缓冲的加载程序只会在`currentItem.isPlaybackBufferEmpty &&!currentItem.isPlaybackLikelyToKeepUp`时显示,该加载程序仅在视频开始播放后几秒钟才会出现。
1个回答

5

对我而言,这个方案是可行的。或许可以帮到你。在addPeriodicTimeObserver函数中调用self?.bufferState()

    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")
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接