Обзор И Программирование Для Стационарного Интернет-Радио

Несколько лет назад я уже публиковал статья о том, как сделать сетевую звуковую карту из роутера.

Для этого варианта требовался активный источник звука и динамики.

Портативная версия выглядела бы слишком громоздко, поэтому было решено приобрести уже готовый продукт. Из-за доступности и как самого дешевого варианта (50 евро) я выбрал Ренкфорс ИК 1 .



Обзор и программирование для стационарного интернет-радио

Для меня были важны следующие характеристики:



Обзор и программирование для стационарного интернет-радио



DLNA

Наличие DLNA позволяет напрямую перенаправлять звук из Linux на интернет-радио.

Это можно сделать как минимум тремя способами:

  • Пассивный.

    Запишите все, что воспроизводится звуковой картой, в файл и воспроизведите этот файл на магнитоле через минидлна сервер.

  • Активный.

    Использовать Райгель , который создает виртуальную звуковую карту и транслирует с нее весь звук через DLNA. Запускается скриптами, требует файлов конфигурации.

  • Активный, простой.

    Использовать проект https://github.com/masmu/pulseaudio-dlna .

    Можно установить вручную через ппа репозиторий в Ubuntu или бэкпортируйте пакет из Убунту 16.10 .

Подробнее об этих методах можно прочитать Здесь .

Вы также можете воспроизводить музыку прямо со своего телефона Android. Поддержка DLNA обнаружена только в предустановленном на телефоне музыкальном проигрывателе Samsung. Я пытался найти в Google Play музыкальные проигрыватели с поддержкой DLNA, но безуспешно.



Wi-Fi

Единственный небольшой недостаток – отсутствие поддержки протокола 802.11n.

Звук

Звук для данной категории устройств вполне приличный (один динамик на 10Вт).

Я не аудиофил, но разница со встроенными в обычный ноутбук динамиками существенная.

Бас присутствует, отлично звучит джаз, рок и электронная музыка тоже.

Есть вариант с двумя колонками (модель Ренкфорс ИК 2 ), но я не посчитал это ненужным.



Экран

ЭОбычный кран.

Интерфейс вполне дружелюбный.



Обзор и программирование для стационарного интернет-радио

Однако процедура добавления собственных радиостанций оставляет желать лучшего.



Плейлист

Именно из-за плейлиста я решил написать эту статью.

Вручную ввести URL радиостанции с помощью пульта или колеса прокрутки — непростая задача.

Порядок появления символов при использовании цифровых кнопок на пульте дистанционного управления сильно отличается от того, к которому вы привыкли при наборе СМС в кнопочном телефоне (для 2 это последовательность «2 A B C a b c» и т. д.).

Если вы используете колесо прокрутки, вам придется прокручивать каждый символ алфавита.

Решил проанализировать, можно ли добавить плейлист через веб-интерфейс.

Веб-интерфейс оказался урезанным.

Открытый порт 80 с заголовком AirMusic отображает только подписи настроек.

HTML ссылается на несуществующие стили CSS на порту 8080. Сам порт 8080 отображается по умолчанию.

404 Не Найдено .

К счастью, порт Telnet был доступен.

Используя логин корень и пароль пароль Мне удалось получить доступ к встроенному занятому ящику.

Изучение внутреннего строения дало следующую информацию:

  • Все это добро работает на процессоре с архитектурой ARM.
  • httpd сервер прослушивает порт 8080 и размещает статические данные, расположенные в /UIData .

    Там не было стилей CSS, как и другой полезной информации.

  • UIProto - сердце радио.

    Статически скомпилированное приложение, прослушивающее порт 80, работает плеер , отображает информацию на экране и многое другое.

    Судя по количеству упоминаний названия этого бинарника в Интернете, создается впечатление, что он разработан сторонней компанией (mediayou.net) для большинства китайских интернет-радио.

UIProto сохраняет список избранного воспроизведения в двоичном формате в файл /flash/myradio.cfg .

Его можно прочитать через вывод терминала, но только в виде текста.

Чтобы получить файл полностью мне пришлось немного поработать.

К счастью, busybox на радио скомпилирован с поддержкой команд. ftpput И ftpget .

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

Проанализировано бинарный файл полезность ххд(1) .

Структура файла примерно выглядит так:

   

Amount of entries: 2b Every entry len: 366b 0x00: 1b 0x00|0x02|0x03: 1b 0x20 (32): 1b 0x00: 6b 0x07|0x05: 1b len(0xTITLE+1): 1b 0x80: 1b 0xTITLE: 40b 0x00: 59b 0xURL: 250b 0x00: 5b 0x00: 2b

Возможно, некоторые элементы в структуре — это обычный мусор из необнуленной выделенной памяти.

Использование нулей в этих элементах не влияет на конечный результат. Исходная версия утилиты на языке C сохраняла жестко запрограммированный список воспроизведения.

Для хранения структуры в памяти утилиты я использовал односвязные списки.

Результатом первого запуска стал тестовый бинарный плейлист, который я загрузил на устройство.

Даже если в неизвестных мне элементах структуры были нули, новый плейлист был успешно прочитан.

Окончательный вариант коммунальные услуги читает список воспроизведения из файла CSV и записывает его в двоичный формат. Приятным бонусом стало использование названий радиостанций вместо их URL (раньше радиостанции в списке отображались как http://1.2.3.4:8080/radio.mp3 ).

Наконец, ради эксперимента, я попытался скомпилировать статический бинарный файл, который можно было бы запускать непосредственно на самом радио.

Практической пользы от этого никакой, но можно попробовать написать демон httpd, который позволит редактировать радиостанции прямо через веб-интерфейс.

Более глобальная и менее осуществимая идея — написать полностью открытую прошивку для интернет-радио.

Как заставить UIProto Я так и не понял, как перечитать плейлист после обновления.

Я использую хардкорный метод - синхронизировать и перезагрузитесь.

Для удобства загрузки плейлиста на магнитолу я написал скрипты с помощью ожидать(1) .



USB

На плате есть распаянный USB. Судя по dmesg(1) , он вполне функционален.

У меня еще не было времени проверить его работоспособность на практике.



Обзор и программирование для стационарного интернет-радио

Ссылки

Теги: #интернет-радио #C++ #linux #встроенное программирование на Linux #pulseaudio #dlna #upnp #arm #open source #C++ #Разработка под Linux
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.