Вступайте в группу - vk.com/mrsisadm - там больше интересного!!!
В двух словах, программное обеспечение Icecast позволяет создать сервер радио и видео вещания. В данной статье мы разберем процесс установки и настройки данного ПО на системах Linux. Установку и принцип настройки также рассмотрим для Windows.
Установка
Рассмотрим установку под системы 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
Iptables (Ubuntu):
iptables -I INPUT 1 -p tcp --dport 8000 -j ACCEPT
Первичная настройка
Приводим следующую настройку к такому виду:
<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 gcc libxml2-devel libshout-devel gcc-c++
Запускаем конфигурирование, сборку и установку:
./configure
make
make install
Ubuntu
Установка в убунте выполняется одной командой:
apt-get install ices
Настройка Icecast
Открываем конфигурационный файл и проверяем лимит на количество создаваемых ресурсов:
<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 /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 — максимальный размер лога.