如何在三星智能电视上提取嵌入在 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 音频(广播)流中的流式“正在播放”数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在智能电视浏览器上对我的网站进行故障排除?

Tizen 中的 HTML5 视频元素非常慢(三星智能电视开发)

可以在 Android TV 应用程序中嵌入电视信号吗?

三星电视显示series5

泰泽智能电视(Tizen smart TV)问世

电脑通过HDMI连接电视,有图像,无声音传出?