【问题标题】:Receive ice cast meta data with python使用 python 接收 icecast 元数据
【发布时间】:2015-04-21 02:13:30
【问题描述】:

我尝试使用此脚本获取 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()

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

【问题讨论】:

    标签: python audio stream metadata icecast


    【解决方案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
    

    【讨论】:

    • 虽然这可能有效,但无需在每次收到audio data > length specifier > metadata 时启动新的 HTTP 请求。这可能每秒发生多次,具体取决于icy-metaint。最好让响应对象保持打开状态,而不是向服务器发送新请求。
    • 生成的 meta_data 包含需要解码才能使用的数据。此解决方案还进行解码:stackoverflow.com/questions/41022893/…
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 2018-09-19
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2015-07-19
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多