我正在为广播电台创建三星电视应用程序,他们在 Icecast 流中提供“正在播放”信息。是否有可能(以及如何)提取这些信息?
5 回答
Shoutcast 支持“ Icy-MetaData ”——请求标头中的附加字段。设置后,它向广播服务器发出请求,以在编码的音频流本身中以周期性间隔(每个“ icy-mettaint ”字节一次)嵌入有关流的元数据。“ icy-mettaint ” 的值由直播服务器配置决定,并作为初始回复的一部分发送给客户端。
查看关于Shoutcast Internet Radio Protocol的这篇文章,了解有关icy:metadata和 C 中的示例代码的详细信息。
http://forums.radiotoolbox.com/viewtopic.php?t=74上也提供了更多技术性讨论
是的,这是可能的。元数据以指定的间隔交织到流数据中。基本上,您读取 8192 字节(或响应标头指定的任何内容Icy-MetaInt
),然后读取元数据块。
该元数据块的第一个字节告诉您数据的长度。长度为 0 表示没有更新的元数据。
读取元块后,您将返回读取流数据。
我在这里的答案中有所有这些更详细的信息: https ://stackoverflow.com/a/4914538/362536 虽然我知道您不是在编写 PHP,但无论哪种语言,主体都是相同的。
我刚刚为 icecast 和 centova 创建了一个广播播放器,它使用 lastFM api 来提取歌曲元数据。https://github.com/johndavedecano/Icecast-Centova-LastFM-API
如果您正在为广播电台执行此操作,那么他们可以通过 Icecast 的 XSLT 功能提供此数据。一些随机的旧 XSLT 示例,用于提供我在某个时候所做的流元数据。
另一种选择是运行 Icecast 2.4.1 或将两个文件 (xml2json.xsl status-json.xsl) 添加到旧版本。
请注意,只有 Icecast 2.4.1 或更新版本支持添加 CORS/ACAO 标头,这可能是从 Web 应用程序/网站访问数据所必需的。
如果您不直接与广播电台合作并且不能要求他们这样做,那么请忽略此答案。其他人可能会发现它很有用。
从本地玩家那里没有获得这个元的选项。
您可能可以使用jQuery.stream插件直接获取元数据 - 但您需要在您的 icecast 服务器上设置 Access-Control-Allow-Origin - 但我不知道它是否会工作。
这里最好的解决方案是使用这个脚本: http ://code.google.com/p/icecast-now-playing-script/
因此,您将这个脚本安装在您的 Web 服务器上,然后从 SmartTV 应用程序中,您将在播放流时将其 AJAX 一次。