我希望从冰铸流媒体广播中提取歌曲名称。我正在获得冰冷的流派,冰冷的名字。但不是歌名。我们可以从流中提取它吗?
答案 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”字节长度的块来获取更多元数据更新,或者稍后断开连接并轮询该流。