如何在三星智能电视上提取嵌入在 Icecast 音频(广播)流中的流式“正在播放”数据
Posted
技术标签:
【中文标题】如何在三星智能电视上提取嵌入在 Icecast 音频(广播)流中的流式“正在播放”数据【英文标题】:How do I extract streamed "now playing" data embedded in an Icecast audio (radio) stream on Samsung Smart-TV 【发布时间】:2012-09-06 14:22:53 【问题描述】:我正在为广播电台创建三星电视应用程序,他们在 Icecast 流中提供“正在播放”信息。是否有可能(以及如何)提取这些信息?
【问题讨论】:
【参考方案1】:Shoutcast 支持“Icy-MetaData” - 请求标头中的附加字段。设置后,它会向直播服务器发出请求,以在编码的音频流本身中以周期性间隔(每个“icy-mettaint”字节一次)嵌入有关流的元数据。 “icy-mettaint”的值由直播服务器配置决定,并作为初始回复的一部分发送给客户端。
查看 Shoutcast Internet Radio Protocol 上的这篇博文,了解有关 icy:metadata 的详细信息和 C 中的示例代码。
更多技术讨论也可通过http://forums.radiotoolbox.com/viewtopic.php?t=74
【讨论】:
【参考方案2】:是的,这是可能的。元数据以指定的间隔交织到流数据中。基本上,您读取 8192 字节(或 Icy-MetaInt
响应标头指定的任何内容),然后读取元数据块。
元数据块的第一个字节告诉您数据的长度。长度为 0 表示没有更新的元数据。
一旦你读取了元块,然后你回到读取流数据。
我在此处对我的回答进行了更详细的说明:https://***.com/a/4914538/362536 虽然我知道您不是在编写 php,但无论哪种语言,主体都是相同的。
【讨论】:
这里语言不是问题,平台才是问题。在SmartTV平台上是做不到的。 @Dobiatowski,你不能截取流数据?即使你不能,你仍然可以在服务器端获取元数据。【参考方案3】:从本地播放器无法获得此元数据。
您可能可以使用jQuery.stream 插件直接获取元数据 - 但您需要在您的 icecast 服务器上设置 Access-Control-Allow-Origin - 但我不知道它是否可以工作。
这里最好的解决方案是使用这个脚本: http://code.google.com/p/icecast-now-playing-script/
因此,您将这个脚本安装在您的网络服务器上,然后在 SmartTV 应用程序中,您将在播放流时对其进行一次 AJAX。
【讨论】:
【参考方案4】:我刚刚为icecast 和centova 创建了一个广播播放器,它使用lastFM api 来提取歌曲元数据。 https://github.com/johndavedecano/Icecast-Centova-LastFM-API
【讨论】:
【参考方案5】:如果您为广播电台执行此操作,那么他们可以通过 Icecast 的 XSLT 功能提供此数据。一些 random old XSLT examples 用于提供我在某个时候所做的流元数据。
另一个选项是运行 Icecast 2.4.1 或将两个文件 (xml2json.xsl status-json.xsl) 添加到旧版本。
请注意,只有 Icecast 2.4.1 或更高版本支持添加 CORS/ACAO 标头,这可能是从 Web 应用程序/网站访问数据所必需的。
如果您不直接与广播电台合作并且不能要求他们这样做,那么请忽略此答案。不过,其他人可能会觉得它很有用。
【讨论】:
链接ruecker.fi/foss/icecast/xslt 正在返回403 : forbidden
错误。请更新。以上是关于如何在三星智能电视上提取嵌入在 Icecast 音频(广播)流中的流式“正在播放”数据的主要内容,如果未能解决你的问题,请参考以下文章