Javascript 优化搜索html5视频中的时间码值';什么是缓冲区?
下面是我的函数,用于确定html5视频元素缓冲区中是否存在给定的时间码(了解了这一点) 我想一定有更快的办法。也许在开始时间内进行二进制搜索 我考虑使用区间树,但如果提供了系统级数据结构,则维护该数据结构的成本似乎过高Javascript 优化搜索html5视频中的时间码值';什么是缓冲区?,javascript,html,search,html5-video,binary-search,Javascript,Html,Search,Html5 Video,Binary Search,下面是我的函数,用于确定html5视频元素缓冲区中是否存在给定的时间码(了解了这一点) 我想一定有更快的办法。也许在开始时间内进行二进制搜索 我考虑使用区间树,但如果提供了系统级数据结构,则维护该数据结构的成本似乎过高 isTimecodeInBuffer = function( _tc ) { var r = $(html5VideoEl).buffered; var i; var iMax = r.length; var within = false;
isTimecodeInBuffer = function( _tc ) {
var r = $(html5VideoEl).buffered;
var i;
var iMax = r.length;
var within = false;
//todo: better seek here
for (i=0; i<iMax; ++i) {
if (_tc >= r.start(i) && _tc < r.end(i)) {
within = true;
break;
}
}
return within;
};
isTimecodeInBuffer=函数(_tc){
var r=$(html5VideoEl).buffered;
var i;
var iMax=r.长度;
var内=假;
//托多:最好在这里找
对于(i=0;i=r.start(i)和&&u tc
您可以使用标准的二进制搜索来实现这一点,该搜索稍作修改以测试是否匹配时间范围,而不是精确匹配。存储任何类型的数据结构都是不值得的,因为数据会随着附加数据的缓冲而频繁更改
function bufferedGreater(haystack, index, value) {
return haystack.end(index) <= value;
}
function bufferedLess(haystack, index, value) {
return haystack.start(index) > value;
}
function binarySearch(haystack, needle, greaterThan, lessThan) {
var minIndex = 0,
maxIndex = haystack.length - 1,
currentIndex;
while (minIndex <= maxIndex) {
currentIndex = Math.floor((minIndex + maxIndex) / 2);
if (greaterThan(haystack, currentIndex, needle)) {
minIndex = currentIndex + 1;
} else if (lessThan(haystack, currentIndex, needle)) {
maxIndex = currentIndex - 1;
} else {
return currentIndex;
}
}
return -1;
}
var buffered = binarySearch(video.buffered, 10, bufferedGreater, bufferedLess) >= 0;
函数BufferedCreater(草堆、索引、值){
返回haystack.end(index)值;
}
函数二进制搜索(haystack、Pineder、greaterThan、lessThan){
var minIndex=0,
maxIndex=haystack.length-1,
电流指数;
而(minIndex=0;
这里有一个正在运行的演示
注意:您希望直接在视频元素上访问缓冲的对象,而不是在jQuery对象上,比如var r=html5VideoEl.buffered;
什么是$(html5VideoEl).buffered
?您正在使用库吗?