Хабрахабр

[recovery mode] Создаём простую, компактную и дешёвую интернет радиостанцию

Софтовой платформой будет Linux, для простоты лучше использовать что-то распространённое, с кучей информации в интернете, если вдруг что-то пойдёт не так. Железом для интернет радиостанции может быть что угодно, полноценный сервер с вашими проектами, какой-нибудь старый ноутбук, или нетбук, мы же хотим дёшево, а особой производительности от железа нам не требуется.

Если же под рукой ничего такого нет, или нам нужен совсем бесшумный сервер, почему бы не попробовать использовать мини компьютер?

Что-то типа Raspberry Pi 3?

У меня нашлась модель Orange Pi Pc Plus с 1GB DDR3 оперативной памяти и 8GB EMMC Flash. Нет, мы же хотим дешевле, так что нам нужно что-то типа Orange Pi.

Что нам может ещё понадобиться?

Я нашёл у себя карту памяти на 8 гигабайт, этого объёма вполне хватит. Я хочу попробовать настроить всё по простому, поэтому ещё понадобится витая пара до роутера и карта памяти Micro SD, так как на прямую на микро компьютер операционную систему установить не получится.

Итак, первым делом нужно записать образ операционной системы на карту памяти.
Для серверов я предпочитаю использовать проверенный временем Debian (да, более молодое поколение, вероятнее всего, предпочитает CentOS, но седобородые согласятся со мной, что Debian всё ещё очень хорош).

7z). Вообще, для Orange Pi на www.orangepi.org/downloadresources существует огромное количество готовых образов, но я всё-таки схожу на www.armbian.com/download и скачаю с dl.armbian.com/orangepipcplus торрент файл с armbian (в моём случае Debian_stretch_next.

У меня Orange Pi Pc Plus, у вас может быть любой другой мини компьютер, поэтому ищите соответствующий образ.

Кто чем хочет, тем и заливает образ, лично я предпочитаю Etcher (https://etcher.io). После закачки распаковываем архив и видим образ в формате img. Вставили карту памяти, выбрали её, если у вас подключено несколько носителей, нажали кнопку шить, ввели пароль если у вас на десктопе или ноутбуке тоже стоит линукс.

Карта с образом готова, можно начинать всё подключать.
Что же нам нужно, чтобы запустить и начать настраивать наш сервер?
Сам мини компьютер, интернет по Ethernet проводу и блок питания.
И всё.

Нет, конечно можно заморочиться, подключить монитор и клавиатуру и настраивать всё напрямую, но мне больше нравится клавиатура моего ноутбука, поэтому я буду настраивать свой мини компьютер удалённо, по SSH.

Итак, приступим, втыкаем кабель Ethernet, карту Micro SD с образом Armbian.
Осталось только подать питание на мини компьютер.

Что есть на нормальном мини копьютере? А вот с питанием на Orange Pi всё очень печально. Только 5V через штырьковый разьём, который покупается отдельно. Правильно, Micro-USB, а как можно запитать Orange Pi?

Адаптер питания с подходящим разьёмом стоит дороже, чем просто провод со стандартным USB на конце, поэтому можно взять его.

Если нет свободного блока питания с USB (а нам надо не абы какой, а на 2 ампера), то роемся в своём ящике с проводами, адаптерами и платами для компьютеров (у вас же есть такой ящик, правда?) и находим подходящий адаптер от какого-нибудь старого, давно разбитого ребёнком планшета, перепаиваем кабель и питание для нашего сервера готово.

Ну или просто берём зарядник от старого дискового mp3 плеера iRiver (он всего 4,7 вольта и 1,2 ампера но тоже работает).

Подаём питание и мы готовы перейти, собственно говоря, к тому, ради чего всё и затевалось, к созданию интернет радиостанции.

Самым простым способом узнать его, это зайти на свой роутер и посмотреть какой IP адрес роутер дал нашему серверу (ваш роутер же умеет DHCP, правда?). Если вы, так же как и я, намереваетесь обойтись минимумом периферии, то нам нужно узнать какой IP адрес получил наш мини компьютер.

Кому какой SSH клиент удобен, тот тем и пользуется (мало ли у вас виндовс, а как там с SSH клиентами я вот вообще не в курсе).
В моём случае я просто забиваю в консоль ssh root@192. Теперь можно заходить по SSH на наш сервер. 0. 168. 88, соглашаюсь на добавление ключа ECDSA, пароль по умолчанию для root установлен «1234», авторизовавшись мы оказываемся в консоли микрокомпьютера, который сразу же предлагает сменить пароль root.

После этого предлагается создать аккаунт непривилегированного пользователя, создаём.
По сравнению с предыдущими версиями ОС, текущая версия несколько упрощена в плане настроек и много чего уже настраивается автоматически.

У Armbian есть очень удобный инструмент настройки: armbian-config копируем команду в консоль и смотрим что нам может пригодиться.

Настройки системы нам пока что не нужны, но они могут понадобится позже, например для переноса настроенной системы с Micro SD на встроенную 8GB EMMC Flash память мини компьютера.

Нашу интернет радиостанцию можно подключить к сети даже по Wi-Fi. Нам будет полезен раздел Network, всё-таки неплохо бы иметь серверу статический IP адрес. В крайнем случае, воткнуть кабель Ethernet можно в любой момент. Уровень извращённости каждый устанавливает себе сам, но если вы строите интернет радио чисто для себя и не планируется более 10 слушателей одновременно, то почему бы наш сервер и не подцепить всё-таки по Wi-Fi?

Менять маску и шлюз нет необходимости, так как они получены от вашего роутера по DHCP. Итак, мы определились с типом подключения, теперь нам нужно настроить статический IP адрес, для этого мы идём в настройки IP и выбираем нужный интерфейс сети, после чего мы говорим, что хотим статичный адрес, заводим его и сохраняем настройки.

Поэтому просто закрываем окно с терминалом и заходим на наш мини компьютер по SSH используя новый IP адрес. После того, как вы введёте новый IP адрес и нажмёте Enter, ваша SSH сессия тут же зависнет, так как сразу же у устройства появится новый IP адрес.

Кстати, раз все функции у нас будут иметь административный характер, чтобы не писать постоянно перед каждой командой sudo, я просто авторизуюсь на мини компьютере под пользователем root.

В разделе Personal мы можем настроить временную зону, локаль и имя хоста. Запустив armbian-config снова мы можем посмотреть что можно настроить ещё интересного? UTF-8 UTF-8, вдруг пригодится. Я добавил локаль ru_RU.

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

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

Конечно, если ваш мини компьютер имеет на борту эту самую память. Базовая настройка сервера произведена и почему бы не установить работающую с MicroSD ОС на внутреннюю EMMC Flash память?

Для этого заходим в armbian-config — System — Install, выбираем доступный накопитель, жмём Enter, получаем привет из прошлого, соглашаемся и выбираем тип файловой системы ext4.

Теперь мы можем откинуться на спинку кресла и дожидаться пока OS перенесётся на внутренний накопитель мини компьютера.

Ждём пару секунд пока не погаснет светодиод на мини компьютере, выдёргиваем питание, вынимаем MicroSD карту, втыкаем питание обратно и включаем компьютер. После завершения копирования, выбираем отключить питание.

Да, если у вас нет внутренней памяти и вы не перенесли на неё операционную систему, вытащить MicroSD, вероятнее всего, будет не очень хорошей идеей.

После входа на наш мини компьютер по SSH и убедившись, что всё работает, можно начинать настраивать саму радиостанцию.

Первым делом обновляем информацию о пакетах, вбив apt update в консоль сервера.

Да, я люблю комфорт, поэтому устанавливаю mc командой apt install mc.
Я люблю всё делать из под mc, а если мне нужно увидеть консоль, я просто нажимаю ctrl+o.

Первым делом устанавливаем сам музыкальный плеер-демон: apt install mpd.
Вместе с ним установится куча зависимостей.

За конфигурацию демона отвечает файл /etc/mpd.conf, открываем его командой nano /etc/mpd.conf. Перейдем к настройке.

Имя моего пользователя без привилегий hzs, и мой конфигурационный файл выглядит примерно так:

music_directory "/home/hzs/music"
playlist_directory "/home/hzs/.mpd/playlists"
db_file "/home/hzs/.mpd/tag_cache"
log_file "/home/hzs/.mpd.log"
pid_file "/home/hzs/.mpd/pid"
state_file "/home/hzs/.mpd/state"
sticker_file "/var/lib/mpd/sticker.sql" user "hzs"
bind_to_address "localhost"
restore_paused "yes" metadata_to_use "artist,title"
auto_update "yes" audio_output { type "httpd" name "My New Internet Radio Station!!!" encoder "lame" # optional, vorbis or lame port "8000" bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 bitrate "256" # do not define if quality is defined format "44100:16:2"
} volume_normalization "yes"
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"

Тут всё понятно и без особых комментариев.

Обратите внимание, хозяином для этих директорий должен быть непривилегированный пользователь, от которого будет всё работать, в моём случае hzs. Для работы нужно создать структуру директорий из верхней части настроек.

Из под root выполняем следующие команды:

chown -cR hzs:hzs /home/hzs/music
chown -cR hzs:hzs /home/hzs/.mpd

Пора заливать музыку, у нас на сервере есть SSH, так что мы можем законнектиться любимым FTP клиентом к нашему серверу.

Заливаем немного музыки для теста в директорию для музыки, указанную в конфиге. IP адрес нам известен, порт 22, имя пользователя и пароль те, что вы задали при создании непривилегированного пользователя, тип соединения SSH.

Сейчас проигрыватель запущен с неправильным конфигом, поэтому останавливаем демона и запускаем его снова:

service mpd stop
service mpd start

Для простейшего управления демоном мы поставим консольную утилиту mpc командой apt install mpc.

После установки немного сконфигурируем проигрыватель:

mpc random on
mpc repeat on

Сейчас нужно добавить треки а плейлист, в консоли это несколько гиморройно, но ничего не поделать.

Смотрим доступные нам файлы, которые мы можем добавить в плей лист:

mpc ls

Чтобы добавить файл в плейлист, в команде mpc add мы должны указать полное имя добавляемого файла, выбор по маске не работает:

mpc add "01 Lost in Your Eyes.mp3"

Смотрим получившийся плейлист:

mpc playlist

Пора запускать нашу радиостанцию:

mpc play

Для этого вводим адрес потока http://ip:port, у меня это http://192. Попробуем послушать, для этого в любом аудиоплеере открываем аудио поток нашей радиостанции. 0. 168. 90:8000.

Audacious играл с перебоями, была проблема с кешированием, а вот SMPlayer и VLC проблем не ощутили.

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

Вам этого делать необязательно. У меня есть несколько доменов, так что первым делом я в настройках DNS создаю «A» запись с testradio и статическим внешним IP адресом моего роутера дома.

Далее на своём роутере я настраиваю port forwarding.

Так как у меня уже есть своя радиостанция на большом сервере, я указываю внешний исходный порт 9000, а внутренний локальный 8000, таким образом из вне радиостанция будет вещать по http://внешний_ip:9000.

Всё, теперь у нас получилась «настоящая» интернет радиостанция.

Если не хочется останавливаться на достигнутом, едем дальше.

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

Существует куча консолей управления, некоторые можно посмотреть тут, но я буду использовать Pitchfork MPD Client.

Это полноценная web морда, и да, мы будем стрелять пушкой по воробьям и поднимем полноценный http сервер на мини компьютере с нашей радиостанцией:

apt install apache2

Так же нам понадобится PHP:

apt-get install php

Ещё понадобятся

0-xml apt install php7.

и

apt install php-pear

Создаём в домашней папке директорию /home/hzs/wwwroot/pf и распаковываем в неё предварительно загруженный по SSH Pitchfork MPD Client.

В конфигурационном файле веб сервера apache2 /etc/apache2/sites-available/000-default.conf
nano /etc/apache2/sites-available/000-default.conf
всё выкашиваем и пишем (не забывая поменять «hzs» на имя своего пользователя):

<VirtualHost *:80> ServerName localhost ServerAdmin webmaster@localhost DocumentRoot /home/hzs/wwwroot <Directory /home/hzs/wwwroot/> Options All AllowOverride All DirectoryIndex index.php index.html index.htm Order Allow,Deny Allow from All Require all granted </Directory>
</VirtualHost>

После чего перезагружаем http сервер

service apache2 restart

168. Зайдя по адресу своего сервера IP/pf (в моём случае: http://192. 90/pf) 0.

Мы увидим пульт управления:

Всё достаточно просто и интуитивно понятно.

Далее нажимем на иконку папки справа и вкладку Filesystem.

Для обновления списка файлов нажимам кнопку Update DB, после чего выбираем оставшиеся файлы, которые у нас до сих пор отсутствуют в плейлисте и нажимаем кнопку Add чуть ниже.

Обновляем страницу и видим, что все файлы у нас добавились в плейлист:

Если нужно спрятать управление проигрывателем под пароль, то можно отредактировать конфигурационный файл:

nano /home/hzs/wwwroot/pf/config/config.xml

Там вполне понятная структура настроек.

Конечно, используемый маломощный сервер не потянет сотни слушателей, но он как минимум не оставит вас без любимой музыки где бы вы ни были, если рядом найдётся интернет. Итак, у нас получился полноценный сервер интернет радиостанции размером 10*7*3 сантиметра.

В принципе, можно не продолжать читать, но для особо упорных продолжаем дальше.
У нас же есть полноценный веб сервер, почему бы…
Ну вы уже поняли.

Создаём в корне нашего веб сервера директорию testradio, создаём в ней файл "index.php":

<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="ru-ru" lang="ru-ru" dir="ltr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>My Test Radio</title>
<script src="jquery-3.3.1.min.js"></script>
</head>
<body> <h1>My Test Radio</h1> <div id="song"> now playing:<br> <div id="title">now playing</div> <br> <div> <span id="play" type="button">Play</span> <span id="pause" type="button">Pause</span> </div> <br> <div> vol:<br> <input id="volume" type="range" min="0" max="10" value="5" /> </div> <span id="duration"></span> <br> <div>256 kbps</div> </div> <script language="JavaScript"> var audio = new Audio('http://testradio.nisel.ru:9000'); var play = document.getElementById('play'); play.addEventListener('click', function() , false); var pause = document.getElementById('pause'); pause.addEventListener('click', function() { audio.pause(); }, false); var volume = document.getElementById('volume'); volume.addEventListener('change', function(){ audio.volume = parseFloat(this.value / 10); }, false); audio.addEventListener("timeupdate", function() { var duration = document.getElementById('duration'); var s = parseInt(audio.currentTime % 60); var m = parseInt((audio.currentTime / 60) % 60); var h = parseInt((audio.currentTime / 3600) % 60); if (s < 10) s = '0' + s; if (m < 10) m = '0' + m; if (h < 10) h = '0' + h; duration.innerHTML = h + ':' + m + ':' + s; }, false);
</script> <script language="JavaScript"> function show() { $.ajax({ url: "trackname.php", cache: false, success: function(html){ $("#title").html(html); } }); } $(document).ready(function(){ show(); setInterval('show()',5000); }); </script>
</body>
</html>

Это простейший пример создания плеера для сайта, так же он умеет выводить название текущей композиции, обновляемое с помощью ajax каждые 5 секунд.

Внешний вид можно допилить по вкусу с помощью css.

3. В коде видно, что аудио поток уже идёт по адресу, указанному в DNS моего домена.
Не забываем закинуть в директорию файл jquery (в моём случае jquery-3. Вообще, конечно, jquery тут перебор и можно было бы сделать ajax запрос без него, но думать оказалось совсем лень и я использовал готовый кусок кода. 1.min.js).

Далее создаём файл "trackname.php":

<?php echo file_get_contents('http://192.168.0.90/mpc');?>

Так же в корне веб сервера создаём директорию «mpc» а в ней файл "index.php":

<?php echo exec('mpc current');?>

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

Так как опрашивать проигрываемый трек нужно непосредственно на сервере с проигрывателем, то директория веб сервера mpc должна быть на нём, а файл "trackname.php" находится на веб сервере самого сайта и подгружает файл с описанием трека с другого сервера по его IP адресу.

Чтобы всё работало, нужно всего лишь правильно пробросить порты. Сам плеер и сайт радиостанции могут находиться очень далеко друг от друга и общаться как по внешним IP адресам, так и по адресам, забитым в DNS.

Дорабатывать проект можно по своему вкусу, ну я а приятно провёл субботнюю половину дня.
Всем удачных экспериментов!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть