如何强制HTML5音频元素缓冲整首歌曲?

时间:2011-01-21 21:33:55

标签: javascript html5 audio html5-audio

我正在开发一个本地服务器,它将流式传输用户的音频文件,以便他们可以使用HTML5音频对象通过Web浏览器访问它们。由于这些文件位于用户的计算机上,我希望文件在加载时可以完全缓冲,但是对于某些大文件,歌曲会缓慢部分缓存,然后停止,并在以后恢复缓冲。

我的问题是:如何强制音频对象一次缓冲整首歌曲?我是否可以通过javascript执行此操作,是否必须在音频对象上设置属性,还是我还能做什么?

3 个答案:

答案 0 :(得分:6)

我找到的解决方案是:

function load() {
    a.play();
    setTimeout("a.pause()", 10);
}

播放文件并在10ms后暂停,然后浏览器将缓冲整首歌曲。

答案 1 :(得分:3)

您可以使用load()方法。这基本上会强制preload="auto"。但它可能不会缓冲整个事情。

我遇到的问题是音频没有预先加载到移动设备上(即使使用preload=auto),但这种方法有效。

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dfnReturnLink-2

另一种选择是通过XMLHttpRequest将数据作为二进制blob加载,并将<audio>元素的src属性设置为blob URI。

(我个人并不喜欢播放/暂停黑客。)

答案 2 :(得分:1)

您可以设置preload =“auto”属性。它不能保证做任何事情,但它应该告诉用户代理缓冲尽可能多的缓冲而不用担心远程端。 http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-preload