暂停 HTML5 音频元素会导致下载整个文件



我遇到的情况是,页面上有许多音频元素,其中一些很长(最多~2小时)。从本质上讲,它们是这样创建和控制的:

var a = new Audio();
a.preload = 'metadata';
a.src = 'long-track.mp3';
a.play();

当它播放时,浏览器(在本例中为 Chrome)会正确发出范围请求,服务器会返回"206 部分内容",一次看起来像大约 2 分钟的数据。加载 ~2mb 数据后,它将停止请求数据。目前为止,一切都好。然后,执行以下命令:

a.pause();

这会导致浏览器下载文件的整个其余部分。(!!?!~@!!!?)显然,如果用户决定收听几首曲目的前几秒钟,这可能是一个问题:他们将开始下载千兆字节的不需要的数据。

我看到过其他一些问题,询问如何强制缓冲整个文件,但我实际上想要的恰恰相反。

没有

官方函数可以做到这一点,尽管应该有,但似乎普遍的共识是以下代码是执行所需操作的最佳方法

a.src = '';
a.load();

jPlayer 实现此方法以停止音频缓冲。唯一的问题是,此方法可能存在跨浏览器问题。如果失败了,您可以尝试从页面中删除音频元素,您是否尝试过?

最新更新