使用python接收冰铸元数据

时间:2015-02-19 16:18:59

标签: python audio stream metadata icecast

我尝试使用此脚本获取mp3流的冰铸元数据:

import requests

url = 'http://stream.jam.fm/jamfm-nmr/mp3-128/konsole/'

try:
    response = requests.get(url, headers={'Icy-MetaData': 1}, stream=True)
    response.raise_for_status()
except requests.RequestException, e:
    print 'Error:', e
else:
    headers, stream = response.headers, response.raw
    meta_int = headers.get('icy-metaint')

    if meta_int is not None:
        audio_length = int(meta_int)

        while True:
            try:
                audio_data = stream.read(audio_length)
                meta_byte = stream.read(1)
                if (meta_byte):
                    meta_length = ord(meta_byte) * 16
                    meta_data = stream.read(meta_length)
                    print meta_data
            except KeyboardInterrupt:
                break

    response.close()

这适用于第一个包。当曲目改变时,我永远不会收到有关标题信息的更新。我的问题是:这个预期的行为和轨道信息只是发送一次还是我做错了什么?我希望能够注意到轨道更改,而不会不时地轮询流。

1 个答案:

答案 0 :(得分:-1)

while True:

    try:
        #new request
        response = requests.get(url, headers={'Icy-MetaData': 1}, stream=True)
        response.raise_for_status()
        headers, stream = response.headers, response.raw
        meta_int = headers.get('icy-metaint')

        audio_data = stream.read(audio_length)
        meta_byte = stream.read(1)
        if (meta_byte):
            meta_length = ord(meta_byte) * 16
            meta_data = stream.read(meta_length)
            print (meta_data)
    except KeyboardInterrupt:
        break
相关问题