Исходя из вашего вопроса, я полагаю, вы уже добавили 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).
Если вы хотите продолжать получать обновления метаданных, вы можете просто потреблять блоки байтового интервала длиной в байты, чтобы получать больше обновлений метаданных, или отключаться и опрашивать поток позже.