“playbackBufferFull”和“playbackBufferEmpty”属性有什么区别?

NSP*_*tik 1 ios avplayer avplayeritem

我见过 2 个属性AVPlayerItem

@property (nonatomic, readonly, getter=isPlaybackBufferFull) BOOL playbackBufferFull;

@property (nonatomic, readonly, getter=isPlaybackBufferEmpty) BOOL playbackBufferEmpty;
Run Code Online (Sandbox Code Playgroud)

现在,这是Apple文档所说的:

回放缓冲区满:

此属性报告用于播放的数据缓冲区已达到容量。尽管播放缓冲区已达到容量,但可能不存在足够的统计数据来支持 的 playbackLikelyToKeepUp预测YES

回放缓冲区空:

它表示播放已消耗所有缓冲媒体,播放将停止或结束。


从这些陈述中,我的理解是:

回放缓冲区满:

整个数据已加载播放。例如,我正在从 URL 播放 5 分钟长的视频。当直到最后的所有内容都已加载时,这些将是正确的。

回放缓冲区空:

实际播放已经消耗了到目前为止加载的所有缓冲区。例如,直到 2.3 分钟的数据已经被加载并且播放也已经到了那个时间并且没有更多的内容可以呈现。(我认为是时候开始我们的旋转木马了,一个指标)

我误解了什么吗?如果是,请纠正我..

欢迎任何深入的知识或建议!

Dun*_*n C 5

我不是这方面的专家,但这是我的理解:

视频以压缩格式存储。在需要显示帧之前,它们不会被解压缩。当视频正在显示时,这会实时发生在播放缓冲区中。

回放缓冲区是准备显示的解压缩帧缓冲区。如果它已满,并不意味着完整的视频已准备好播放。播放缓冲区只有几秒钟长。这意味着播放缓冲区保存的几秒钟播放已满。

如果它是空的,则意味着没有准备好播放的视频,因此播放要么已完成,要么将在加载更多内容时冻结并显示“缓冲”消息。