Вступ
Icecast — це вільний сервер для транслювання мультимедіа. За його допомогою можна запустити своє вебрадіо та транслювати музику чи вести прямі ефіри.
Ezstream — клієнт, який забезпечує його потоками. Тобто Icecast транслює те, що дає йому Ezstream (або інша програма, призначена для цього, їх досить багато, використовуйте, який вам зручно, наприклад, mpd).
Установлення
Я виконую дії на Artix Linux (тут мало що різнитиметься з подібними до дебіана, головне — конфігурація серверів)
yay -S icecast ezstream
Конфігурація Icecast
Копіюйте приклад конфігурації (/etc/icecast.xml
) чи завантажте
модифікований приклад, який я розглядатиму та змініть пароль із
hackme
на щось нормальне, й можна пробувати запускати:
icecast -c /шлях/до/icecast.xml
Тепер можна розглянути його детальніше:
<location>Просто шо хочете пишете, "кінець світу", наприклад</location>
<admin>Тут теж</admin>
В тезі <authentication>
установіть паролі для
вебінтерфейсу адміністрування та джерел аудіопотоків:
<authentication>
<!-- Sources log in with username 'source' -->
<!-- ДЛЯ ДЖЕРЕЛ (EZSTREAM та інших) -->
<source-password>ПАРОЛЬ</source-password>
<!-- Relays log in with username 'relay' -->
<relay-password>ПАРОЛЬ</relay-password>
<!-- а цей для адмінки -->
<admin-user>КОРИСТУВАЧ</admin-user>
<admin-password>ПАРОЛЬ</admin-password>
</authentication>
Установіть ім’я хоста:
<hostname>ДОМЕН ЧИ IP</hostname>
Формування плейлиста
Потрібно створити файл зі шляхами до аудіофайлів, які ми хочемо програвати, щоб потім дати його Ezstream.
find /директорія/з/музикою -name '*mp3' -type f > /шлях/до/плейлиста.m3u
Конфігурація Ezstream
тека
/usr/share/examples/ezstream/
містить
приклади конфігурацій.
<?xml version="1.0" encoding="UTF-8"?>
<ezstream>
<servers>
<server>
<hostname>127.0.0.1</hostname> <!-- якщо icecast на тому самому компі, достатньо -->
<password>ПАРОЛЬ, який писали в source-password</password>
</server>
</servers>
<streams>
<stream>
<mountpoint>/stream</mountpoint>
<format>MP3</format>
<stream_name>ІМ'Я ПОТОКУ</stream_name>
<stream_url>http://miliukhin.xyz:8000/stream</stream_url> <!-- Посилання на потік -->
</stream>
</streams>
<!-- тут додаємо плейлист -->
<intakes>
<intake>
<filename>/шлях/до/плейлиста.m3u</filename>
<shuffle>Yes</shuffle>
</intake>
</intakes>
</ezstream>
Тепер, якщо все правильно налаштували й Icecast запущений, можна запустити Ezstream і тішитись:
ezstream -c /шлях/до/ezstream.xml
Переходимо до встановлення радіо на неперервну роботу.
Запуск сервісів
Якщо у вас systemd, то використовуйте systemctl для запуску Icecast і Ezstream (саме в такому порядку), і більше нічого вам не треба.
Мені ж прийшлося написати скрипт для запуску Icecast у runit
, бо не було. Це дуже просто, ось, як він виглядає
(можна завантажити тут):
#!/bin/sh
exec 2>&1
exec icecast -c /etc/icecast.xml
Скрипт для Ezstream аналогічний:
#!/bin/sh
exec 2>&1
exec ezstream -c /home/radon/ezstream.xml
Зручний локальний менеджмент і оновлення радіо
Ось такий мініскрипт я використовую, щоб оновлювати список відтворення та водночас перезапускати ezstream:
#!/bin/sh
find /home/radon/music -name '*mp3' -type f > /home/radon/playlist.m3u && sv restart ezstream
На основному комп’ютері я запускаю інший скрипт, який за допомогою rsync
завантажує музику, яку я зберіг для радіо,
на сервер, а далі запускає цей оновлювач плейлиста.
Отже, все, що мені лишається зробити, коли я додав достатньо музики, це запустити один сценарій. Так дуже зручно працювати,
а ще я на додачу постійно маю резервну копію всього радіо.
Нюанси
Логи не працюють?
Каталог /var/log/icecast
має належати icecast
, тож запустив
chown -R icecast:icecast /var/log/icecast
UTF
Нюанси з UTF у треках вирішуються так https://github.com/libretime/libretime/issues/2501
в конфізі icecast (icecast.xml):
<mount type="default">
<charset>UTF-8</charset> <!-- має бути це -->
</mount>
Поміняти користувача на нерута з міркувань безпеки
<security>
<chroot>0</chroot>
<changeowner>
<!-- вказуйте користувача та групу, яких забажаєте -->
<user>icecast</user>
<group>icecast</group>
</changeowner>
</security>
Ніби нічого не забув, маєте тепер радіо!
Посилання
Читайте документацію 😉