video.buffered.length究竟讲述了什么?

时间:2012-03-17 22:57:29

标签: javascript jquery html5 html5-video

我注意到当html5视频正在加载(缓冲)时,它的buffered.length值为2,当它完成加载时,它会变为1.

这是一种了解视频是否已存储在缓存中的可靠方法(buffered.length == 1)吗?如果没有,我错过了什么吗?有人能解释一下这个价值告诉我的确切内容吗?

3 个答案:

答案 0 :(得分:3)

根据Apple HTMLMediaElement文档bufferedTimeRanges

这就是为什么长度属性似乎是错误的

可以使用

计算缓冲的百分比
video.buffered.end(0) / video.duration

答案 1 :(得分:1)

根据我的理解,buffered会返回一个TimeRanges对象,其中包含有关已缓冲多少视频或音频的数据。

buffered有三个属性:lengthstartend

length返回缓冲媒体的“部分”数量。

显然,在正常情况下,buffered.length会返回1.

这就是Opera所说的:

  

在正常情况下,只有一个范围 - 浏览器启动   从时间0开始下载,然而下载的范围扩展到   现在很多。但是,如果用户向前寻求,那么   浏览器可以停止当前下载并开始新的请求   以后的部分视频。在这种情况下,会有两个范围   缓冲数据。

*Source(向下滚动或搜索缓冲

我的猜测是,这不是判断视频是否被缓存的可靠方法。

答案 2 :(得分:0)

完整的代码行,其中#是一个整数:

document.getElementById("videoId").buffered.start(#);

document.getElementById("videoId").buffered.end(#);

document.getElementById("videoId").buffered.length;

如果某些内容被缓存,那么它不应该立即加载吗?因此,一旦缓存的视频启动,video.buffered.end(0)会自动成为视频的结尾吗?

有人可以随意纠正我或确认一下。

注意:end()需要一个参数。此参数返回已定义的缓冲vid的值。例如。如果60秒的视频开始,start(0)为0,end(0)逐渐变大。如果您将视频的位置更改为30秒,start(1)将变为30秒,end(1)会从30秒逐渐变大。

不幸的是,我发现iOS 10.2.1上的移动Safari似乎总是为.length返回值1。因此,我怀疑浏览器的支持不一致。这在Firefox 51.0.1中变得更糟(这应该对这些方法有更好的支持),它将.length递增1,然后在再次递减之后不久。我怀疑这可能'是因为Firefox将vid的两个缓冲部分组合在一起。 由于上述原因,我会尝试找到另一种方法来确定如何检测视频是否被缓存。

尝试输入Chrome&网址火狐:

about:cache