我正在寻找一种分析互联网收音机内容的方法。我想写一个ruby客户端,它可以从流(例如shoutcast上的收音机)中获得当前曲目、下一曲目、波段、bpm和其他元信息。有人知道怎么做吗?我该如何将该流记录到mp3或aac文件中?
也许有一个图书馆已经可以做到这一点,但到目前为止我还没有。
关于
我会回答你的两个问题。
元数据
你所寻求的并不完全可能。下一首曲目的信息不可用(请记住,并非所有电台都只是播放播放列表中的歌曲……许多电台都提供现场内容)。BPM等高级元数据不可用。你得到的只是这样的东西:
Some Band - Some Song
{artist} - {song title}
的格式也不总是遵循。
有了这些注意事项,您可以通过连接到流URL并使用以下请求头请求元数据来从流中获取元数据:
Icy-MetaData: 1
这告诉服务器发送元数据,该元数据被交织到流中。每隔8KB左右(由服务器在响应头中指定),您就会找到一块要解析的元数据。我在这里写了一个关于如何解析的详细答案:使用PHP从音频流中提取音轨信息之前的问题是特定于语言的,但你会发现我的答案可以很容易地用任何语言实现。
将流保存到磁盘
音频播放软件通常对错误具有很强的弹性。SHOUTcast服务器建立在这个主体上,并且不了解通过它们的数据。它们只是从编码器接收数据,当客户端请求流时,它们会在任意点开始发送数据。
在保存流数据时,您可以利用这一点。可以简单地将流数据写入文件。大多数音频播放器都会毫无问题地播放它们。我已经用MP3和AAC测试过了。
如果你想要一个更一致的文件,你必须使用一个库或自己解析流,以便在适当的帧上进行分割,然后在代码中处理位库问题。这是一项艰巨的工作,通常不值得做,除非你发现你的文件有真正的兼容性问题。