如何获取 <audio> 标签以关闭其与流的连接?

How do I get an <audio> tag to close its connection to stream?

我正在为我的 Icecast2 收音机制作网络播放器,我注意到每当我暂停播放时,浏览器不会关闭它与 Icecast 流的连接,除非服务器强行关闭它(在 Icecast 的情况下,如果客户端在其数据队列中落后太多,就会发生这种情况)。这种行为确实是次优的,因为它迫使客户端落后于无线电流并迫使服务器做它不应该做的工作,更不用说听众计数不准确了。

我确实稍微探索了我的选择。我尝试在标签上调用 .load() ,这会重新打开连接。它确实杀死了旧的,但这并没有达到没有活动连接的状态。我无意中试图破坏音频标签并制作一个新标签,但这并没有关闭任何连接(这是一个错误吗?)。

我还没有尝试在多个来源之间切换。如果那样做,我会写我自己的答案,除非有人打败我。否则,我愿意接受您的建议。

您可以通过删除 src 属性来执行此操作。

const audio = document.querySelector('audio');
audio.removeAttribute('src');
audio.load();

另请参阅:https://html.spec.whatwg.org/multipage/media.html#best-practices-for-authors-using-media-elements

I inadvertently tried destroying the audio tag and making a new one, but that doesn't close any connections (is that a bug?).

您应该展示一个代码示例,说明您如何销毁该音频元素。我怀疑您的代码中存在错误。过去有很多浏览器错误围绕着这种事情,但那是很多年前的事了。我怀疑这些问题早已得到解决。