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