Использование Icecast или настройка сервера для радиовещания


Тематические термины: Icecast, Windows, Linux, Ubuntu, CentOS.
В двух словах, программное обеспечение Icecast позволяет создать сервер радио и видео вещания. В данной статье мы разберем процесс установки и настройки данного ПО на системах Linux. Установку и принцип настройки также рассмотрим для Windows.
Установка
Windows
CentOS
Ubuntu
Принцип настройки
Тестовый запуск
Настройка брандмауэра
Первичная настройка
Selinux
Запуск
Тест
Настройка редиректа радиостанции
Свои плейлисты (Ices)
Установка клиента
Настройка Icecast
Настройка Ices и запуск плейлиста
Автозапуск ices
Автоматическое переключение каналов
Логирование
Установка
Рассмотрим установку под системы Windows, Ubuntu/Debian, CentOS/Red Hat.
Windows
Переходим на страницу загрузки Icecast и скачиваем программу для Windows:
Запускаем скачанный файл - принимаем лицензионное соглашение - кликаем несколько раз Next и Install. Когда завершится установка, кликаем по Close.
Установка завершена.
Linux CentOS 7
Устанавливаем расширенный репозиторий epel:
yum install epel-release
Устанавливаем icecast:
yum install icecast
Linux Ubuntu
Установка выполняется из базового репозитория:
apt-get install icecast2
Принцип настройки
Все настройки вносятся в конфигурационный файл формата XML.
В Windows он расположен по пути %ProgramFiles(x86)%\Icecast\icecast.xml. Открыть его можно любым текстовым редактором.
В CentOS 7 конфигурационный файл открываем командой:
vi /etc/icecast.xml
В Ubuntu:
vi /etc/icecast2/icecast.xml
Сами настройки в данном файле одинаковые для любой операционной системы. Все что включено в <!-- ... --> является комментарием и не учитывается программой.
После внесения настроек, службу icecast необходимо перезапускать.
Тестовый запуск
Настройка брандмауэра
Перед запуском сервера, необходимо убедиться в правильных настройках фаервола (необходимо открыть порт 8000).
Firewalld (CentOS 7):
firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --reload
* подробнее о процессе настройки firewalld.
Iptables (Ubuntu):
iptables -I INPUT 1 -p tcp --dport 8000 -j ACCEPT
* подробнее о процессе настройки iptables.
Первичная настройка
Приводим следующую настройку к такому виду:
<bind-address>192.168.0.15</bind-address>
* при такой настройке мы указываем, на каком сетевом интерфейсе будем слушать запросы (в данном случае, на 192.168.0.15).
Selinux
Если в системе линукс используется система безопасности Selinux, либо отключаем ее, либо настраиваем.
Запуск
В CentOS 7 разрешаем сервис и запускаем его следующими командами:
systemctl enable icecast
systemctl start icecast
В Ubuntu:
systemctl enable icecast2
systemctl start icecast2
Тест
Открываем браузер и переходим по пути http://192.168.0.15:8000/
* где 192.168.0.15 — IP-адрес нашего сервера, который мы прописали в bind-address конфига.
Мы должны увидеть следующее:
Настройка редиректа радиостанции
Самый простой способ проверить работу сервера радио — настроить перенаправление другой радиостанции.
Находим подходящий ресурс, например, hd.lagrosseradio.info. Изучаем документацию по настройке ретрансляции.
И дописываем в наш конфигурационный файл, примерно, следующее:
<relay>
<server>ice4.lagrosseradio.info</server>
<port>80</port>
<mount>/lagrosseradio-metal-024.mp3</mount>
<local-mount>/metal</local-mount>
<on-demand>0</on-demand>
</relay>
<relay>
<server>shoutcast.aichyna.com</server>
<port>9000</port>
<mount>/aplus_128</mount>
<local-mount>/aplus</local-mount>
<on-demand>0</on-demand>
</relay>
* перенаправлений может быть несколько. В данном примере на ресурсы ice4.lagrosseradio.info и shoutcast.aichyna.com.
* server — имя сервера, с которого берется поток; port — сетевой порт, на котором удаленный сервер отдает поток; mount — точка мониторования на стороне удаленного сервера, с которого берем поток; local-mount — точка монтирования, которая будет использоваться нашим сервером для обращения к настраиваемому потоку; on-demand — если стоит 0, сервер всегда берет поток и проигрывает его, если 1 — только при наличие активных обращений.
Перезапускаем сервис:
systemctl restart icecast || systemctl restart icecast2
Опять открываем нашу страницу http://192.168.0.15:8000/ — на странице должен появиться список с потоками:
Теперь пробуем в браузере открыть страницы с настроенными точками монтирования (local-mount) — http://192.168.0.15:8000/metal и /http://192.168.0.15:8000/aplus. Мы должны увидеть проигрыватель с кнопкой Play.
Свои плейлисты (Ices)
Создать свой список музыкальных композиций и передать его серверу Icecast можно с помощью Ices. Для начала, выполним его установку.
Установка клиента
CentOS 7.
Установка выполняется путем сборки пакета из исходника. Для начала скачиваем его — для этого переходим на страницу icecast.org/ices и копируем ссылку на Ices0 (ices2 не умеет работать с mp3, что требует их конвертацию и это не очень удобно):
Используя ссылку, скачиваем исходник:
wget http://downloads.us.xiph.org/releases/ices/ices-0.4.tar.gz
* если получим ошибку «wget: команда не найдена», ставим wget командой yum install wget.
Распаковываем архив и заходим в каталог:
tar -zxvf ices*
cd ices*
Устанавливаем пакеты, нужные для сборки:
yum install make gcc libxml2-devel libshout-devel gcc-c++
Запускаем конфигурирование, сборку и установку:
./configure
make
make install
Ubuntu
Установка в убунте выполняется одной командой:
apt-get install ices
Настройка Icecast
Открываем конфигурационный файл.
а) В CentOS 7 конфигурационный файл открываем командой:
vi /etc/icecast.xml
б) В Ubuntu:
vi /etc/icecast2/icecast.xml
Проверяем лимит на количество создаваемых ресурсов:
<icecast>
<limits>
...
<sources>3</sources>
...
* если лимит на sources будет превышен предыдущими плейлистами или редиректами, мы получим ошибку при запуске ices, например: Error during send: Mount failed on http://192.168.0.15:8000/music, error: Login failed.
Меняем пароль на управление ресурсами:
<authentication>
...
<source-password>newpassword</source-password>
* newpassword — собственно, сам пароль.
Закрываем редактор и перезапускаем icecast:
systemctl restart icecast || systemctl restart icecast2
Настройка Ices и запуск плейлиста
Создаем каталог конфигурационного файла и сам файл:
mkdir /etc/ices
vi /etc/ices/ices.xml
<?xml version="1.0"?>
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">
<Playlist>
<File>/etc/ices/playlist.rock.txt</File>
<Randomize>1</Randomize>
<Type>builtin</Type>
<Module>ices</Module>
</Playlist>
<Execution>
<Background>1</Background>
<Verbose>0</Verbose>
<BaseDirectory>/etc/ices</BaseDirectory>
</Execution>
<Stream>
<Server>
<Hostname>192.168.0.15</Hostname>
<Port>8000</Port>
<Password>newpassword</Password>
<Protocol>http</Protocol>
</Server>
<Mountpoint>/rock</Mountpoint>
<Dumpfile>ices.dump</Dumpfile>
<Name>Default stream</Name>
<Genre>Default genre</Genre>
<Description>Default description</Description>
<URL>http://192.168.0.15:8000</URL>
<Public>0</Public>
<Bitrate>128</Bitrate>
<Reencode>0</Reencode>
<Channels>2</Channels>
</Stream>
</ices:Configuration>
* где, как правило, редактируется следующее:
- File — путь до файла со списком аудиофайлов.
- Randomize — воспроизведение в случайном порядке.
- Verbose — отладка. Следует поменять на 1, если программа работает не корректно.
- BaseDirectory — рабочий каталог программы. В нем будут храниться pid и log файлы.
- Hostname — адрес нашего сервера icecast.
- Port — порт, на котором слушает сервер icecast.
- Password — пароль для ресурса, который был выставлен в конфигурационном файле icecast.
- Mountpoint — точка монтирования на сервере для плейлиста.
- URL — путь URL до плейлиста.
Создадим список аудиофайлов:
ls -d /music/rock/* > /etc/ices/playlist.rock.txt
* данной командой мы прочитаем содержимое каталога /music/rock и сделаем из его содержимого плейлист для ices.
* по сути, файл playlist.rock.txt должен включать перечень всех аудиофайлов с полным путем до них. Каждый файл с новой строчки.
Запускаем ices:
ices -c /etc/ices/ices.xml
* где /etc/ices/ices.xml — путь до конфигурационного файла.
Автозапуск ices
В теории, можно добавить команду /usr/local/bin/ices -c /etc/ices/ices.xml в /etc/rc.local. Но профессиональнее создать сервис на базе systemd.
Создаем файл сервиса:
vi /etc/systemd/system/ices.service
[Unit]
Description=Ices Service
After=network.target
Requires=icecast.service
[Service]
Type=forking
PIDFile=/etc/ices/ices.pid
ExecStart=-/usr/local/bin/ices -c /etc/ices/ices.xml
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
Перезапускаем systemd:
systemctl daemon-reload
Разрешаем созданный сервис:
systemctl enable ices
Запускаем его и проверяем:
systemctl start ices
systemctl status ices
Автоматическое переключение каналов
Идея заключается в создании общего канала (mount) с переключением на резервный (в случаях, когда общий ничего не вещает). Это применяется для создания канала диджея — когда он подключен, в эфир идет его трансляция, когда отключен — музыка из плейлиста или перенаправленная с другой радиостанции. Также, это можно применять для оповещений или вставки рекламных роликов.
В данном примере разберем создание канала, который будет получать аудиоконтент из ices, а при отключении данной трансляции, будет играть музыка из другого источника.
В конфиг icecast добавляем:
<relay>
<server>shoutcast.aichyna.com</server>
<port>9000</port>
<mount>/aplus_128</mount>
<local-mount>/aplus</local-mount>
<on-demand>0</on-demand>
</relay>
<mount>
<mount-name>/live</mount-name>
<fallback-mount>/aplus</fallback-mount>
<fallback-override>1</fallback-override>
</mount>
* на самом деле, данный relay мы уже добавляли выше; live — имя основного канала; aplus в секции fallback-mount — имя канала, на который нужно перенаправить слушателя, если основной канал не задействован; секция fallback-override определяет, нужно ли автоматически возвращать слушателей на основной канал, если он опять станет активным.
Перезапускаем icecast:
systemctl restart icecast || systemctl restart icecast2
Можно уже подключаться в эфиру (в нашем примере по адресу http://192.168.160.163:8000/live) — мы должны услышать музыку, которая транслируется на shoutcast.aichyna.com.
Создаем конфигурационный файл для ices (или правим уже созданный):
vi /etc/ices/live.xml
<?xml version="1.0"?>
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">
<Playlist>
<File>/etc/ices/playlist.rock.txt</File>
<Randomize>1</Randomize>
<Type>builtin</Type>
<Module>ices</Module>
</Playlist>
<Execution>
<Background>1</Background>
<Verbose>5</Verbose>
<BaseDirectory>/etc/ices/live</BaseDirectory>
</Execution>
<Stream>
<Server>
<Hostname>192.168.160.163</Hostname>
<Port>8000</Port>
<Password>newpassword</Password>
<Protocol>http</Protocol>
</Server>
<Mountpoint>/live</Mountpoint>
<Dumpfile>ices.dump</Dumpfile>
<Name>Live stream</Name>
<Genre>Genre</Genre>
<Description>Live DJ</Description>
<URL>http://192.168.160.163:8000</URL>
<Public>0</Public>
<Bitrate>128</Bitrate>
<Reencode>0</Reencode>
<Channels>2</Channels>
</Stream>
</ices:Configuration>
* обратите внимание, похожий конфиг мы создавали, когда знакомились с ices.
Создаем рабочий каталог для ices:
mkdir /etc/ices/live
Запускаем ices:
ices -c /etc/ices/live.xml
Логирование
В Linux, лог хранится в каталоге /var/log/icecast. В Windows — %ProgramFiles(x86)%\Icecast\log.
Для изменения пути хранения правил изменяем тег logdir в секции paths:
<paths>
...
<logdir>/var/log/icecast</logdir>
...
</paths>
В данных каталогах располагается два файла — access и error (соответственно, лог обращений к серверу и лог ошибок).
Для редактирования уровня логирования и имен файлов правим секцию logging:
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>3</loglevel>
<logsize>10000</logsize>
</logging>
* где accesslog и errorlog — имена файлов лога; loglevel — уровень логирования (4 Debug, 3 Info, 2 Warn, 1 Error); logsize — максимальный размер лога.