使用Python从无线电流中读取SHOUTcast/Icecast元数据

yuj*_*jas 7 python mp3 metadata stream internet-radio

有人从远程无线电流中读取SHOUTcast/Icecast元数据是否成功?

几个库可以从本地MP3文件中读取元数据,但似乎没有一个可以用于无线电流(在远程服务器上本质上是一个永无止境的MP3文件).

其他建议建议从mp3流的开头下载有限数量的位,但这通常会导致一堆十六进制输出,没有类似文本元数据.

有人知道更成功的解决方案吗?谢谢.

小智 6

#!/usr/bin/env python
import urllib2
stream_url = 'http://pub1.di.fm/di_classictrance'
request = urllib2.Request(stream_url)
try:
    request.add_header('Icy-MetaData', 1)
    response = urllib2.urlopen(request)
    icy_metaint_header = response.headers.get('icy-metaint')
    if icy_metaint_header is not None:
        metaint = int(icy_metaint_header)
        read_buffer = metaint+255
        content = response.read(read_buffer)
        title = content[metaint:].split("'")[1]
        print title
except:
    print 'Error'
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看此链接


jfo*_*erg -1

由于 mp3 是一种专有格式,因此规范并不那么容易获得。我认为这个网站提供了很好的概述。

在普通 mp3 文件中,ID3v1 元数据标记位于文件的最末尾,它构成最后 128 个字节。这实际上是一个糟糕的设计。ID3 系统是作为事后添加到 mp3 中的,所以我想在不破坏向后兼容性的情况下没有其他方法可以做到这一点。这意味着如果广播流像永无止境的 mp3 文件一样提供,则不能有正常意义上的 ID3 标签。

我会向广播电台的运营人员核实;也许他们把 ID3 标签放在了一个非标准的地方?