Сегодня собственным онлайн-вещанием никого не удивишь, более того оно становится просто обыденностью. Или вам нужно организовать централизованную трансляцию в сети. Во всех этих случаях вас выручит создание собственного сервера онлайн-вещания. В данной статье мы рассмотрим, как сделать это при помощи бесплатного пакета Icecast 2 и Ices0 для прослушивания mp3.
Установка и настройка Icecast 2
Icecast 2 — свободная реализация сервера потокового вещания использующий для этого протокол HTTP, что делает его универсальным и совместимым со множеством проигрывателей и клиентов. Пакет присутствует в стандартных репозиториях и для его установки следует воспользоваться командой:
apt install icecast2
Затем сразу включаем и запускаем
systemctl enable icecast2 systemctl start icecast2
Проверяем
Открываем браузер и переходим по пути http://192.168.1.119:8000/
* где 192.168.1.119— IP-адрес нашего сервера, который мы прописали в bind-address конфига.
Мы должны увидеть следующее:

Затем вас попросят указать три пароля, два из них будут использоваться для подключения источников вещания, третий для входа в веб-панель администратора.
При установке автоматически создается юнит сервиса Systemd и автоматически добавляется в автозагрузку. Мы же пока откроем конфигурационный файл /etc/icecast2/icecast.xml и разберем его основные настройки.
Сразу отметим, что здесь нам придется работать с конфигурационными файлами в формате XML, который имеет свои особенности синтаксиса. В частности комментарии помещаются между набором символов <!— и —>, поэтому, если вы хотите раскомментировать строку, то нужно убрать символы комментирования как в начале, так и в конце, иначе вы получите синтаксическую ошибку.
Начнем с начала, первые параметры являются чисто описательными: размещение вашего сервера и электронный адрес его администратора.
<location>Earth</location> <admin>icemaster@localhost</admin>
Данная информация является публичной и будет отображаться на странице информации о сервере.
Ниже располагается секция <limits>, в которой нас будет интересовать две опции:
<clients>100</clients> <sources>2</sources>
Первая понятна, количество обслуживаемых клиентов, а вторая задает возможное количество источников трансляции, каждая из которых вещается сервером в отдельном потоке. Например. вы можете создать несколько плейлистов и подключить каждый как отдельный источник. Указанное в опции количество должны быть больше или равно количеству источников.
Затем идут настройки аутентификации, здесь задаются те самые пароли, которые вы вводили при настройке пакета (если делали эту настройку), обязательно задайте все три пароля: для источников, релеев и админ-панели, также, опционально, можете изменить имя учетной записи администратора:
<authentication> <source-password>Password</source-password> <relay-password>Password</relay-password> <admin-user>admin</admin-user> <admin-password>Password</admin-password> </authentication>
Ниже следует указать полное доменное имя в следующей опции:
<hostname>stream.ru</hostname>
Остальные опции оставляем без изменений, перезапускаем службу.
systemctl restart icecast2
Теперь пробуем открыть в браузере адрес stream.ru:8000 и по ip 192.168.1.119:8000, если все сделано правильно, вы увидите веб-интерфейс сервера онлайн-вещания.

Свои плейлисты (Ices)
Создать свой список музыкальных композиций и передать его серверу Icecast можно с помощью Ices. Для начала, выполним его установку.
Установка клиента
Установка выполняется путем сборки пакета из исходника. Для начала скачиваем его — для этого переходим на страницу icecast.org/ices и копируем ссылку на Ices0 (ices2 не умеет работать с mp3):

Используя ссылку, скачиваем исходник:
wget https://downloads.xiph.org/releases/ices/ices-0.4.tar.gz
Распаковываем архив и заходим в каталог:
tar -zxvf ices* cd ices*
Устанавливаем пакеты, нужные для сборки:
apt install build-essential libssl-dev libxml2-dev pkg-config git autoconf automake libtool libasound2-dev libcurl4-openssl-dev libsamplerate0-dev libshout3-dev libvorbisenc2 libflac++-dev libmp3lame-dev libopus-dev
Запускаем конфигурирование, сборку и установку:
./configure make make install
Создаём список аудиофайлов в файл:
ls -d /music/* > /etc/ices/playlist.txt
* данной командой мы прочитаем содержимое каталога /music и сделаем из его содержимого плейлист для ices.
* по сути, файл playlist.txt должен включать перечень всех аудиофайлов с полным путем до них. Каждый файл с новой строчки.
Автозапуск ices
По умолчанию при установке не создается юнит в авто загрузки, создаем его. Решил cделать запуск без файла ices.xml
mcedit /etc/systemd/system/ices.service Description=Ices Service After=network.target [Service] Type=simple PIDFile=/etc/ices/ices.pid ExecStart=/usr/local/bin/ices -P password -h 192.168.1.119-m /drim -F /etc/ices/playlist.txt ExecReload=/usr/bin/killall ices Restart=always [Install] WantedBy=multi-user.target
Дополнительные команды при старте ices в строке ExecStart
-B (Background (daemon mode))
-b -Битрейт
-C Затухание в секундах
-c — Конфигурационный файл
-D Базовая директрия
-d Описание Стриминга
-f Дамп файл на сервере
-F Плейлист
-h Хост
-i Использование заголовков
-M Дополнительные модули
-m Точка монтирования
-n Имя потока
-p Порт
-P Пароль
-r randomize playlist
-s (private stream)
-u url потока
Перезапускаем systemd:
systemctl daemon-reload
Разрешаем созданный сервис:
systemctl enable ices
Запускаем его и проверяем:
systemctl start ices systemctl status ices