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