iPhone从icecast流媒体广播中提取歌曲名称

时间:2011-01-24 06:42:50

标签: iphone live-streaming icecast

我希望从冰铸流媒体广播中提取歌曲名称。我正在获得冰冷的流派,冰冷的名字。但不是歌名。我们可以从流中提取它吗?

1 个答案:

答案 0 :(得分:4)

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

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

以下是伪代码:

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”字节长度的块来获取更多元数据更新,或者稍后断开连接并轮询该流。