Javascript video.buffered.length到底说明了什么?
我注意到,当html5视频加载(缓冲)时,它被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对象,其中包含视频或音
缓冲。长度值为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)
仍将引用第一个加载的片段,而不是新的“视频中间直到结束”缓冲状态。