这是在javascript中缓冲音频的最佳方法吗?

时间:2013-10-22 21:26:57

标签: javascript jquery html5 audio

我通过firefox的html5功能播放波形格式的流媒体音频。由于我们的一些用户抱怨音频不稳定,我们决定采用一种策略来测量音频的速率是否足以维持播放。我们首先尝试了canplaythrough事件,但显然浏览器对它过于乐观并且它不太有效。这是我使用jquery提出的一些代码。我是js / jquery的初学者,所以我想知道是否有人有更好的想法。

$(document).ready(function() {
var previous_buffer = 0;
var start_time = (new Date()).getTime();

// function to check how fast buffer is
function checkBufferSpeed() {
    // if we havent started buffering yet, return
    if (this.buffered.length < 1)
    {
        return;
    }
    // get the current buffer status
    var current_buffer = this.buffered.end(0);
    console.log("current_buffer:" + current_buffer);
    // if we get the same current buffer twice, browser is done buffering
    if (current_buffer > 0 && current_buffer == previous_buffer)
    {
        this.play();
        $("#audio").off("progress");
        return;
    }
    // get the time spent
    var time_spent = ((new Date()).getTime() - start_time)/1000;
    console.log("time_spent:" + time_spent);
    // if we buffered faster than time spent, play
    if (current_buffer > time_spent)
    {
        this.play();
        $("#audio").off("progress");
        return;
    }
    previous_buffer = current_buffer
}

$("#audio").on("progress", checkBufferSpeed);
});

另外,我不检查音频元素持续时间变量的原因是因为firefox似乎总是将其报告为无限,除非该流已经被缓存。

另外,似乎firefox总是触发2个进度事件,即使流在缓存中完全可用,这就是为什么我要检查我是否有两次相同的缓冲区,如果是,只是播放声音。< / p>

浏览器是否有可能永远不会触发进度事件? 我可以对此代码进行哪些改进以使其更好?

0 个答案:

没有答案