Javascript 优化搜索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;

下面是我的函数,用于确定html5视频元素缓冲区中是否存在给定的时间码(了解了这一点)

我想一定有更快的办法。也许在开始时间内进行二进制搜索

我考虑使用区间树,但如果提供了系统级数据结构,则维护该数据结构的成本似乎过高

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
?您正在使用库吗?