Я создаю приложение Samsung TV для радиостанции, и они предоставляют информацию «Сейчас исполняется» в потоке Icecast. Можно ли (и как) извлечь эту информацию?
Как извлечь данные потокового воспроизведения, встроенные в аудиопоток Icecast (радио) на Samsung Smart-TV
Ответы (5)
Shoutcast поддерживает «Icy-MetaData» — дополнительное поле в заголовке запроса. Когда установлено, это запрос к серверу кричащей передачи для встраивания метаданных о потоке через определенные промежутки времени (один раз через каждые байты "icy-metaint") в самом закодированном аудиопотоке. Значение "icy-metaint" определяется конфигурацией сервера громкой трансляции и отправляется клиенту как часть первоначального ответа.
Ознакомьтесь с этим сообщением в протоколе интернет-радио Shoutcast для получения подробной информации об icy:metadata и примере кода на языке C.
Более техническое обсуждение также доступно на
http://forums.radiotoolbox.com/viewtopic.php?t=74
Да, это возможно. Метаданные чередуются с потоковыми данными с заданным интервалом. По сути, вы читаете 8192 байта (или то, что указано в заголовке ответа Icy-MetaInt
), а затем читаете блок метаданных.
Первый байт этого блока метаданных сообщает вам длину данных. Длина 0 означает, что обновленных метаданных нет.
Как только вы прочитаете метаблок, вы вернетесь к чтению данных потока.
У меня есть все это более подробно в моем ответе здесь: https://stackoverflow.com/a/4914538/362536 Хотя я знаю, что вы не пишете PHP, принцип идентичен независимо от того, на каком языке.
Из родного плеера нет возможности получить эту мету.
Вероятно, вы могли бы использовать плагин jQuery.stream для прямого получения метаданных, но вам нужно настройте Access-Control-Allow-Origin на своем сервере icecast, но я понятия не имею, будет ли это работать.
Лучшим решением здесь будет использование этого скрипта: http://code.google.com/p/icecast-now-playing-script/
Таким образом, вы устанавливаете этот скрипт на свой веб-сервер, и из приложения SmartTV вы запускаете его через AJAX один раз, пока воспроизводится ваш поток.
Я только что создал радиоплеер для icecast и centova, он использует API lastFM для извлечения метаданных песни. https://github.com/johndavedecano/Icecast-Centova-LastFM-API
Если вы делаете это для радиостанции, они могут предоставить эти данные через функцию XSLT Icecast. Некоторые случайные старые примеры XSLT для предложения потоковых метаданных, которые я сделал в какой-то момент.
Другой вариант — запустить Icecast 2.4.1 или добавить два файла (xml2json.xsl status-json.xsl) в старую версию.
Обратите внимание, что только Icecast 2.4.1 или новее поддерживает добавление заголовков CORS/ACAO, которые могут быть необходимы для доступа к данным из веб-приложения/веб-сайта.
Если вы не сотрудничаете напрямую с радиостанцией и не можете попросить их об этом, то игнорируйте этот ответ. Хотя кому-то это может пригодиться.
403 : forbidden
. Пожалуйста обновите.
- person TheCodeArtist; 30.06.2015