【问题标题】:How do I obtain SHOUTcast "now playing" Metadata from the stream?如何从流中获取 SHOUTcast“正在播放”元数据?
【发布时间】:2023-03-19 19:09:01
【问题描述】:

说,我要查询“http://streaming.shoutcast.com/80sPlanet”(在线广播“A.0.0.00Radio:All 80s All The Time”)的当前广播。 我可以向该 URL 发出 HTTP GET 请求,并将标头“icy-metadata”设置为“1”,并返回包括以下“icy-*”标头:

key = "icy-br"; value = "128"
key = "icy-genre"; value = "Decades,80s"
key = "icy-metaint"; value = "16000"
key = "icy-name"; value = "A.0.0.00Radio:All 80s All The Time"
key = "icy-notice1"; value = "<BR>This stream requires <a href="http://www.winamp.com">Winamp</a><BR>"
key = "icy-notice2"; value = "SHOUTcast DNAS/posix(linux x64) v2.5.1.725<BR>"
key = "icy-pub"; value = "1"
key = "icy-sr"; value = "44100"
key = "icy-url"; value = "http://a.0.00radio.com/80s/"

但是没有关于当前在流中播放的内容的信息(我的意思是歌曲/艺术​​家/专辑/等)。不过,在直播主页 (http://80splanet.com) 上始终有最新信息。 有人告诉我,可以通过 HTTP GET 请求向添加“/7.html”或“/stats”的流 URL 获取“正在播放”信息。它适用于某些流。例如:

http://198.100.125.242/7.html
<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>383,1,541,30000,377,128,Man of the Hour - w/ Patrick and Sebastian </body></html>

(数字是流的统计信息。它们在 SHOUTcast 服务器文档中有说明) 但大多数流不支持此功能(不支持“/7.html”或“/stats”)。 HTTP 错误 404 返回或类似。

看起来 SHOUTcast 提供了一些 API (wiki.shoutcast.com/wiki/SHOUTcast_Developer) 来请求它的电台目录、获取热门电台图表等。还有“SHOUTcast XML 元数据规范”。似乎有一种方法可以以某种方式从流中获取元数据。

此外,还有一种方法可以挖掘流原始数据并根据“icy-mettaint”标头值搜索元数据,如下所述:stackoverflow.com/a/4914538/8128293,但是(首先)我无法访问流的原始数据(android.media.MediaPlayer 类只接收流 URL 并在其内部保持连接)。 (第二)我不确定这种方法,因为它没有在任何地方记录。并且(第三)我不确定它是否适用于非 mpeg 音频流(例如:audio/aacp)。

我也听说有一种方法可以通过 JSON 请求获取这种元数据到流,但仍然没有示例可查看。

【问题讨论】:

    标签: audio stream metadata shoutcast internet-radio


    【解决方案1】:

    但是(首先)我无法访问流的原始数据(android.media.MediaPlayer 类只接收流 URL 并在自身内部保持连接)

    您将不得不自己请求流数据并从中解复用元数据。内置的 Android 类不会关心带内元数据。

    我不是 Android 开发人员,但看起来您可以制作自己的 MediaDataSource。 https://developer.android.com/reference/android/media/MediaDataSource.html

    (第二)我不确定这种方法,因为它没有在任何地方记录。

    这是方法,唯一合理的方法。 20年没有改变。 Icecast 服务器也支持容器中的元数据,但这与您要执行的操作无关。

    而且(第三个)我不确定它是否适用于非 mpeg 音频流(例如:audio/aacp)。

    效果很好。它与内容类型完全无关。这种 ICY 风格的元数据处理不知道也不关心它嵌入了什么。在编解码器处理流之前,应将元数据从流中分离出来。

    我还听说有一种方法可以通过对流的 JSON 请求获取这种元数据

    没有。至少,如果您想与那里的所有服务器兼容,则不是。

    不过,在直播主页 (http://80splanet.com) 上始终有最新信息。

    有很多方法可以做到这一点。大多数站点都使用自己的系统进行带外操作。 (几乎有任何方法可以管理您的音乐库和处理调度。通常从 Web 脚本实际驱动编码器元数据,其中您的“正在播放”数据库在播放到编码器时实时更新。)另一个方法是使用您链接到的答案中的方法获取元数据服务器端。我曾经提供过一个 API 服务器可以做到这一点。 (我仍然有代码,如果你想从我这里获得许可。给我发电子邮件至 brad@audiopump.co。)一种现代方法是使用 MediaSource Extensions 并在将流传递到之前处理浏览器中的元数据解复用玩家;选手。 SHOUTcast 和 Icecast 都不支持这一点,因为它们都不能正确支持 CORS。我自己的CDN支持这种方式,代码也可以授权。

    【讨论】:

    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2013-05-28
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多