Как извлечь данные потокового воспроизведения, встроенные в аудиопоток Icecast (радио) на Samsung Smart-TV

Я создаю приложение Samsung TV для радиостанции, и они предоставляют информацию «Сейчас исполняется» в потоке Icecast. Можно ли (и как) извлечь эту информацию?


person Martin    schedule 13.09.2012    source источник


Ответы (5)


Shoutcast поддерживает «Icy-MetaData» — дополнительное поле в заголовке запроса. Когда установлено, это запрос к серверу кричащей передачи для встраивания метаданных о потоке через определенные промежутки времени (один раз через каждые байты "icy-metaint") в самом закодированном аудиопотоке. Значение "icy-metaint" определяется конфигурацией сервера громкой трансляции и отправляется клиенту как часть первоначального ответа.

Ознакомьтесь с этим сообщением в протоколе интернет-радио Shoutcast для получения подробной информации об icy:metadata и примере кода на языке C.

Более техническое обсуждение также доступно на
http://forums.radiotoolbox.com/viewtopic.php?t=74

person TheCodeArtist    schedule 19.02.2013

Да, это возможно. Метаданные чередуются с потоковыми данными с заданным интервалом. По сути, вы читаете 8192 байта (или то, что указано в заголовке ответа Icy-MetaInt), а затем читаете блок метаданных.

Первый байт этого блока метаданных сообщает вам длину данных. Длина 0 означает, что обновленных метаданных нет.

Как только вы прочитаете метаблок, вы вернетесь к чтению данных потока.

У меня есть все это более подробно в моем ответе здесь: https://stackoverflow.com/a/4914538/362536 Хотя я знаю, что вы не пишете PHP, принцип идентичен независимо от того, на каком языке.

person Brad    schedule 13.09.2012
comment
Здесь проблема не в языке, проблема в платформе. Вы не можете сделать это на платформе SmartTV. - person Adam Lukaszczyk; 14.09.2012
comment
@Dobiatowski, вы не можете перехватывать потоковые данные? Даже если вы не можете, вы все равно можете получить эти метаданные на стороне сервера. - person Brad; 14.09.2012

Из родного плеера нет возможности получить эту мету.

Вероятно, вы могли бы использовать плагин jQuery.stream для прямого получения метаданных, но вам нужно настройте Access-Control-Allow-Origin на своем сервере icecast, но я понятия не имею, будет ли это работать.

Лучшим решением здесь будет использование этого скрипта: http://code.google.com/p/icecast-now-playing-script/

Таким образом, вы устанавливаете этот скрипт на свой веб-сервер, и из приложения SmartTV вы запускаете его через AJAX один раз, пока воспроизводится ваш поток.

person Adam Lukaszczyk    schedule 14.09.2012

Я только что создал радиоплеер для icecast и centova, он использует API lastFM для извлечения метаданных песни. https://github.com/johndavedecano/Icecast-Centova-LastFM-API

person Juan David Decano    schedule 07.10.2013

Если вы делаете это для радиостанции, они могут предоставить эти данные через функцию XSLT Icecast. Некоторые случайные старые примеры XSLT для предложения потоковых метаданных, которые я сделал в какой-то момент.

Другой вариант — запустить Icecast 2.4.1 или добавить два файла (xml2json.xsl status-json.xsl) в старую версию.

Обратите внимание, что только Icecast 2.4.1 или новее поддерживает добавление заголовков CORS/ACAO, которые могут быть необходимы для доступа к данным из веб-приложения/веб-сайта.

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

person TBR    schedule 10.12.2014
comment
Ссылка ruecker.fi/foss/icecast/xslt возвращает ошибку 403 : forbidden. Пожалуйста обновите. - person TheCodeArtist; 30.06.2015