Javascript video.buffered.length到底说明了什么?

Javascript video.buffered.length到底说明了什么?,javascript,jquery,html,html5-video,Javascript,Jquery,Html,Html5 Video,我注意到,当html5视频加载(缓冲)时,它被缓冲。长度值为2,加载完成后,它变为1 这是一种可靠的方法,可以知道视频是否已存储在缓存中(buffered.length==1)?如果没有,我是否遗漏了什么?有人能给我解释一下这个值到底告诉了我什么吗?根据文档buffered是 这就是为什么length属性似乎是错误的 缓冲百分比可以通过使用 video.buffered.end(0) / video.duration 据我所知,buffered返回一个TimeRanges对象,其中包含视频或音

我注意到,当html5视频加载(缓冲)时,它被
缓冲。长度
值为2,加载完成后,它变为1

这是一种可靠的方法,可以知道视频是否已存储在缓存中(
buffered.length==1
)?如果没有,我是否遗漏了什么?有人能给我解释一下这个值到底告诉了我什么吗?

根据文档
buffered

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

缓冲百分比可以通过使用

video.buffered.end(0) / video.duration

据我所知,
buffered
返回一个
TimeRanges
对象,其中包含视频或音频的缓冲量数据

buffered
有三个属性:
length
start
end

length
返回缓冲介质的“部分”数量

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

这就是Opera所说的:

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

(向下滚动或搜索缓冲)

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

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

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

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

document.getElementById("videoId").buffered.length;
如果缓存了某些内容,是否应该立即加载?因此
video.buffered.end(0)
一旦缓存的视频开始,将自动成为视频的结束

有人随时纠正我或确认这一点

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

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

尝试输入Chrome和Firefox的URL:


about:cache

注意:这仅在存在单个缓冲时间范围时有效。如果用户立即查找(例如)视频的中间部分,并且有两个时间范围,
end(0)
仍将引用第一个加载的片段,而不是新的“视频中间直到结束”缓冲状态。