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

Тематические термины: Icecast, Windows, LinuxUbuntu, CentOS.

В двух словах, программное обеспечение Icecast позволяет создать сервер радио и видео вещания. В данной статье мы разберем процесс установки и настройки данного ПО на системах Linux. Установку и принцип настройки также рассмотрим для Windows.

Установка

Рассмотрим установку под системы Windows, Ubuntu/Debian, CentOS/Red Hat.

Windows

Переходим на страницу загрузки Icecast и скачиваем программу для 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 конфига.

Мы должны увидеть следующее:

Первый вход на страницу Icecast

Настройка редиректа радиостанции

Самый простой способ проверить работу сервера радио — настроить перенаправление другой радиостанции.

Находим подходящий ресурс, например, 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/ — на странице должен появиться список с потоками:

Настроенные потоки в icecast

Теперь пробуем в браузере открыть страницы с настроенными точками монтирования (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, что требует их конвертацию и это не очень удобно):

Ссылка на ices

Используя ссылку, скачиваем исходник:

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>

* где, как правило, редактируется следующее:

Создадим список аудиофайлов:

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 — максимальный размер лога.

# Серверы # Мультимедиа # Windows # Linux
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет