Чтение метаданных SHOUTcast / Icecast из радиопотока с помощью Python

Кому-нибудь удалось прочитать метаданные SHOUTcast / Icecast из удаленного радиопотока?

Есть несколько библиотек, которые могут читать метаданные из локального файла MP3, но ни одна похоже, разработан для работы с радиопотоком (который, по сути, представляет собой бесконечный MP3-файл на удаленном сервере).

Другие рекомендации предлагают загружать конечное количество бит с начала потока mp3, но это часто приводит к кучу шестнадцатеричных выходных данных, ничего не напоминающих текстовые метаданные.

Кто-нибудь знает более удачное решение? Спасибо.


person yujas    schedule 07.07.2011    source источник


Ответы (3)


#!/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'

Для получения дополнительных сведений см. это ссылка

person dbogdan    schedule 04.06.2013

Я использовал немного кода @dbogdan и создал библиотеку, которую использую для более чем 4 тысяч потоков ежедневно. Он работает хорошо, стабильно и поддерживает такие метаданные, как название песни, имя исполнителя, битрейт и тип содержимого.

вы можете найти его на странице https://github.com/Dirble/streamscrobbler-python

person Håkan Nylén    schedule 19.12.2014

Поскольку mp3 является проприетарным форматом, получить спецификацию не так-то просто. Думаю, этот веб-сайт дает хороший обзор.

В обычных файлах mp3 тег метаданных ID3v1 идет в самом конце файла, он составляет последние 128 байтов. На самом деле это плохой дизайн. Система ID3 была добавлена ​​к mp3 в последнюю очередь, поэтому я думаю, что не было другого способа сделать это без нарушения обратной совместимости. Это означает, что если радиопоток предоставляется как бесконечный mp3-файл, не может быть тега ID3 в обычном смысле этого слова.

Я бы посоветовался с людьми, которые управляют радиостанцией; может, ставят тег ID3 в нестандартное место?

person jforberg    schedule 07.07.2011
comment
Спасибо за информацию. Я должен был упомянуть, что я пытаюсь сделать это с потоками Shoutcast / Icecast и Live365, которые, скорее всего, каким-то образом стандартизировали свой формат метаданных, я просто еще не смог его найти. - person yujas; 08.07.2011
comment
В потоках интернет-радио @jforberg не используются теги ID3. Потоки в стиле SHOUTcast / Icecast используют метаданные, перемежающиеся с аудиоданными. На принимающей стороне это разделяется. - person Brad; 09.11.2014