iPhone извлекает название песни из потокового радио Icecast - PullRequest
2 голосов
/ 24 января 2011

Я хочу извлечь название песни из потокового радио.Я получаю ледяной жанр, ледяное имя и прочее.но не название песни.Можем ли мы извлечь его из потока?

1 Ответ

4 голосов
/ 11 марта 2011

Исходя из вашего вопроса, я полагаю, вы уже добавили 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. Клиент должен принять решение о том, что вводить. Большинство приличных клиентов будут использовать UTF-8, когда вынуждены отправлять не ASCII-данные, но не все (и они могут отправлять некоторые собственные кодировки, например Windows-1521 или UTF-16).

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

...