我正在开发一个本地服务器,它将流式传输用户的音频文件,以便他们可以使用 HTML5 音频对象通过 Web 浏览器访问它们。由于这些文件在用户的计算机上,我希望文件在加载时会被完全缓冲,但对于某些大文件,歌曲会部分缓冲,然后停止,并在一段时间后恢复缓冲。
我的问题是:如何强制音频对象一次缓冲整首歌曲?我可以从 javascript 中做到这一点,我是否必须在音频对象上设置一个属性,或者我还能做些什么?
我正在开发一个本地服务器,它将流式传输用户的音频文件,以便他们可以使用 HTML5 音频对象通过 Web 浏览器访问它们。由于这些文件在用户的计算机上,我希望文件在加载时会被完全缓冲,但对于某些大文件,歌曲会部分缓冲,然后停止,并在一段时间后恢复缓冲。
我的问题是:如何强制音频对象一次缓冲整首歌曲?我可以从 javascript 中做到这一点,我是否必须在音频对象上设置一个属性,或者我还能做些什么?
我找到的解决方案是这样的:
function load() {
a.play();
setTimeout("a.pause()", 10);
}
播放文件并在 10 毫秒后暂停,然后浏览器将缓冲整首歌曲。
您可以使用该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。
(我个人不太喜欢播放/暂停技巧。)
您可以设置 preload="auto" 属性。它不能保证做任何事情,但它应该告诉用户代理尽可能多地缓冲而不用关心远程端。http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-preload