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

问题描述

我正在为我的 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

我无意中尝试销毁音频标签并创建一个新标签,但这并没有关闭任何连接(这是一个错误吗?)。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...