我遇到的情况是,页面上有许多音频元素,其中一些很长(最多~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 实现此方法以停止音频缓冲。唯一的问题是,此方法可能存在跨浏览器问题。如果失败了,您可以尝试从页面中删除音频元素,您是否尝试过?