我正在开发一个本地服务器,它将流式传输用户的音频文件,以便他们可以使用HTML5音频对象通过Web浏览器访问它们。由于这些文件位于用户的计算机上,我希望文件在加载时可以完全缓冲,但是对于某些大文件,歌曲会缓慢部分缓存,然后停止,并在以后恢复缓冲。
我的问题是:如何强制音频对象一次缓冲整首歌曲?我是否可以通过javascript执行此操作,是否必须在音频对象上设置属性,还是我还能做什么?
答案 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