我注意到当html5视频正在加载(缓冲)时,它的buffered.length
值为2,当它完成加载时,它会变为1.
这是一种了解视频是否已存储在缓存中的可靠方法(buffered.length == 1
)吗?如果没有,我错过了什么吗?有人能解释一下这个价值告诉我的确切内容吗?
答案 0 :(得分:3)
根据Apple HTMLMediaElement文档buffered
是TimeRanges
这就是为什么长度属性似乎是错误的
可以使用
计算缓冲的百分比video.buffered.end(0) / video.duration
答案 1 :(得分:1)
根据我的理解,buffered
会返回一个TimeRanges
对象,其中包含有关已缓冲多少视频或音频的数据。
buffered
有三个属性:length
,start
和end
。
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