Установка Вебрадіо з Icecast та Зручне Автоматизоване Керування

Налаштувати своє вебрадіо (медіатранслятор), використовуючи Icecast та Ezstream просто та зручно.

Вступ

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>

Ніби нічого не забув, маєте тепер радіо!

Посилання

Читайте документацію 😉