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

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

5 ответов

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

Прочтите этот пост в Shoutcast Internet Radio Protocol, чтобы узнать подробности о icy: метаданные и примеры кода на C.

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

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

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

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

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

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

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

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

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

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

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

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

У меня есть все это более подробно в моем ответе здесь: /questions/25363115/poluchenie-informatsii-o-dorozhke-iz-audiopotoka-s-pomoschyu-php/25363132#25363132 Хотя я знаю, что вы не пишете PHP, принципал идентичен независимо от того, на каком языке.

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

Другие вопросы по тегам