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

17
我正在开发一个本地服务器,可以通过HTML5音频对象流式传输用户的音频文件,使他们可以通过Web浏览器访问这些文件。由于这些文件位于用户的计算机上,因此当它们被加载时,我希望它们被完全缓冲,但对于某些大型文件,歌曲只被缓冲一部分,然后停止,并在一段时间后恢复缓冲。
我的问题是:如何强制音频对象一次性缓冲整首歌曲?我能否通过JavaScript实现,还需要在音频对象上设置属性,或者还有其他方法吗?
3个回答

8
我找到的解决方案是这样的:
function load() {
    a.play();
    setTimeout("a.pause()", 10);
}

播放文件后,再暂停十毫秒,浏览器将缓冲整首歌曲。


7
使用setTimeout(a.pause, 10) 更好的测试准则。 - Tamas Czinege
1
当你不传递任何变量给函数时,那确实可以工作。但是为什么要在两种方法之间来回切换呢? - Ahi Tuna
12
实际上,那样行不通,因为你会失去函数的上下文。更好的方法是:setTimeout(a.pause.bind(a), 10) - nickf

4
你可以使用load()方法。这基本上强制执行preload="auto"。但它可能不会缓冲整个内容。
我遇到了一个问题,移动设备上的音频没有预加载(即使使用了preload=auto),但这种方法有效。

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

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

(个人不太喜欢播放/暂停hack。)


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接