Javascript 读取冰冷的元数据

Javascript 读取冰冷的元数据,javascript,reactjs,icecast,Javascript,Reactjs,Icecast,您好,我想知道如何使用javascript或reactjs从流媒体站读取数据 我在谷歌上搜索过,很遗憾我运气不好,我想知道是否有人知道一个可以阅读的脚本(icecast冰冷的元数据?我对stream不太了解,但我在谷歌上找到了一些东西,哈哈 还有这个 它是用于php的,但也许你可以把它翻译成JS。我对stream不太了解,但我在谷歌上找到了一些东西,哈哈 还有这个 它适用于php,但也许您可以将其转换为JS。请注意,web浏览器不支持ICY元数据,因此您必须手动实现许多事情,并仅为元

您好,我想知道如何使用javascript或reactjs从流媒体站读取数据


我在谷歌上搜索过,很遗憾我运气不好,我想知道是否有人知道一个可以阅读的脚本(icecast冰冷的元数据?

我对stream不太了解,但我在谷歌上找到了一些东西,哈哈

还有这个


它是用于php的,但也许你可以把它翻译成JS。

我对stream不太了解,但我在谷歌上找到了一些东西,哈哈

还有这个


它适用于php,但也许您可以将其转换为JS。

请注意,web浏览器不支持ICY元数据,因此您必须手动实现许多事情,并仅为元数据使用整个流。我不建议这样做

正如您所指出的,获取元数据的推荐方法是查询JSON端点:
/status JSON.xsl

听起来您是在为某个服务器定制构建,所以这应该是一个不错的方法。请注意,您必须运行最新的Icecast版本(至少2.4.1,但出于安全原因,最好是最新版本)


如果您想访问无法控制的随机Icecast服务器,那么它会变得很复杂:



如果您想播放一个流,然后显示它的冰冷元数据,请查看miknik的答案。(它适用于传统的ICE流,不适用于WebM或Ogg封装的Opus、Vorbis等)

请注意,web浏览器不支持ICE元数据,因此您必须手动实现很多事情,并仅为元数据使用整个流。我不建议这样做

正如您所指出的,获取元数据的推荐方法是查询JSON端点:
/status JSON.xsl

听起来您是在为某个服务器定制构建,所以这应该是一个不错的方法。请注意,您必须运行最新的Icecast版本(至少2.4.1,但出于安全原因,最好是最新版本)


如果您想访问无法控制的随机Icecast服务器,那么它会变得很复杂:



如果您想播放一个流,然后显示它的冰冷元数据,请查看miknik的答案。(它适用于传统的冰流,不适用于WebM或Ogg封装的Opus、Vorbis等)

我写了一个脚本,正好可以做到这一点

它实现了一个服务工作者,并使用和API截获从页面到流媒体服务器的网络请求,向请求添加必要的头以从流媒体服务器启动流内元数据,然后在通过页面上的音频元素播放mp3时从响应中提取元数据

由于对服务人员和FetchAPI的限制,只有当您的站点通过SSL提供服务,并且您的流媒体服务器和网站位于同一个域上时,我的脚本才会工作


您可以在上找到代码,并看到它的一个非常基本的演示(打开console窗口以查看从服务人员传递的数据)

我编写了一个脚本,正是这样做的

它实现了一个服务工作者,并使用和API截获从页面到流媒体服务器的网络请求,向请求添加必要的头以从流媒体服务器启动流内元数据,然后在通过页面上的音频元素播放mp3时从响应中提取元数据

由于对服务人员和FetchAPI的限制,只有当您的站点通过SSL提供服务,并且您的流媒体服务器和网站位于同一个域上时,我的脚本才会工作


您可以在上找到代码,并看到它的一个非常基本的演示(打开console窗口以查看从服务人员传递的数据)

为什么您只需要为元数据使用整个流?服务器将元数据拼接到mp3流中,您只需再次将它们分离出来,并从单个流中获得音频和元数据。如果您只需要元数据,那么您仍然需要提取整个流,只需呈现元数据。如果您在流开始播放之前不显示元数据,并且愿意对Ogg或WebM/MKV容器进行所有处理和可能的解析,那么这就不是开销。到目前为止,实用的方法是做带外元数据,这样你也可以在不播放流的情况下显示它。啊,我明白你的意思了。我从未真正设想过这样一种场景,即您可能需要元数据而不播放流。带外元数据的唯一问题是,如果客户端开始缓冲,或者您的icecast服务器在连接时将流推送到客户端的时间超过几秒钟,那么保持它与音频流的同步将成为一个挑战,如果您正在播放流,则最好能够访问带内元数据。不过,浏览器中的情况一直很糟糕大多数情况下,那些在web播放器之外“正在播放”的小部件不需要精确,因此几秒钟的偏移量无关紧要。为什么您必须为了元数据而使用整个流?服务器将元数据拼接到mp3流中,您只需再次将它们分离出来,并从单个流中获得音频和元数据。如果您只需要元数据,那么您仍然需要提取整个流,只需呈现元数据。如果您在流开始播放之前不显示元数据,并且愿意对Ogg或WebM/MKV容器进行所有处理和可能的解析,那么这就不是开销。到目前为止,实用的方法是做带外元数据,这样你也可以在不播放流的情况下显示它。啊,我明白你的意思了。我从未真正设想过这样一种场景,即您可能需要元数据而不播放流。带外元数据的唯一问题是,如果客户端开始缓冲或您的icecast服务器推送,则使其与音频流保持同步将成为一项挑战