说,我即将询问当前广播的流" http://streaming.shoutcast.com/80sPlanet" (在线广播" A.0.0.00Radio:All 80s All Time")。 我可以使用标题" icy-metadata"对此URL进行HTTP GET请求。设置为" 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)上始终存在最新信息。 我被告知有可能让#34;现在正在播放&#34;信息通过HTTP GET请求添加&#34; /7.html"或&#34; / stats&#34;。它适用于某些流。例如:
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服务器文档中有解释) 但是大多数流不支持此功能(不是&#34; /7.html"也不是&#34; / stats&#34;)。 HTTP错误404返回或类似。
看起来SHOUTcast提供了一些API(wiki.shoutcast.com/wiki/SHOUTcast_Developer)来请求它的无线电目录,获得热门站点图表等等。还有&#34; SHOUTcast XML元数据规范&#34;。似乎有一种方法可以以某种方式从流中获取元数据。
此外,还有一种方法可以挖掘流原始数据并根据&#34; icy-metaint&#34;来搜索元数据。这里解释的标头值:stackoverflow.com/a/4914538/8128293,但是(第一个)我无法访问流的原始数据(android.media.MediaPlayer类仅接收流URL并维护其内部的连接)。 (第二)我不确定这种方法,因为它没有任何文件证明。并且(第三)我不确定它是否适用于非mpeg音频流(例如:audio / aacp)。
另外我听说有一种方法可以通过JSON请求将这种元数据传递给流,但仍然没有示例可供查看。
答案 0 :(得分: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支持这种方法,代码也可用于许可。