2

我正在寻找从冰铸流媒体收音机中提取歌曲名称。我得到了冰冷的流派,冰冷的名字。但不是歌名。我们可以从流中提取它吗?

4

1 回答 1

4

根据您的问题,我认为您已经向您的请求添加了 Icy-Metadata: 1 。

您必须阅读“icy-mettaint”响应标头,它会告诉您在流中的每个元数据更新之间如何读取字节。

以下是伪代码:

byteinterval = int(response.getHeader("icy-metaint"))
stream = response.getBodyStream()
stream.read(byteinterval)
metadata_len = byte(stream.read(1)) * 16
metadata = stream.read(metadata_len)

元数据将如下所示:

StreamTitle='Some Song Name Stream Client Sent';StreamUrl='http://someurl.com/';

不幸的是,对于完整元数据缓冲区的编码或 StreamTitle 的内容,都没有绝对的标准。

歌曲名称可能包含也可能不包含专辑名称、艺术家姓名和完整的歌曲名称或其他字段。

元数据缓冲区本身可能是也可能不是 UTF-8。由流客户端决定注入什么。大多数体面的客户端在被迫发送非 ASCII 数据时会使用 UTF-8,但不是全部(它们可能会发送一些本机编码,如 Windows-1521 或 UTF-16)。

如果您想继续获取元数据更新,您可以简单地使用“byteinterval”字节长度的块来获取更多元数据更新,或者稍后断开连接并轮询流。

于 2011-03-10T23:13:04.187 回答