Инструкция по настройки потокового сервера на базе icecast
icecast работает как на Linux/Unix, так и на Windows. Файл конфигурации iceceast.xml, по структуре, единый для всех систем, отличие будет только в пути рабочих каталогов (в зависимости от системы).
Для начала обновим коллекцию портов. Если вы portsnap запускаете впервые, то выполним:
1 2 3 4 |
portsnap fetch portsnap extract |
Обновим:
1 2 3 |
portsnap fetch update |
В FreeBSD iceceast находится в /usr/ports/audio/icecast Так же можно поискать другие версии. Для этого переходим в порты cd /usr/ports/ и выполним поиск:
1 2 3 |
make search name=icecast |
На момент написания инструкции, нашлось два порта:
1 2 3 4 5 6 7 |
Port: icecast-2.4.4_2,1 Path: /usr/ports/audio/icecast ************************* Port: icecast-kh-2.4.0.k15_2 Path: /usr/ports/audio/icecast-kh |
С icecast-kh можно ознакомится на их странице, последний релиз на github от 1.07.20. Советую эту версию установить для ознакомления.
Установка
1 2 3 4 |
cd /usr/ports/audio/icecast make install clean BATCH="yes" |
BATCH="yes" Этот параметр позволяет избавиться от дополнительных окон, которые могут появляться при установки пакета.
Настройка
В начале создадим файл iceceast.xml путем копирования icecast.xml.sample
1 2 3 4 |
cd /usr/local/etc/ cp icecast.xml.sample icecast.xml |
Редактируем icecast.xml
Пойдем сверху вниз 🙂 Буду затрагивать только минимальные настройки, необходимые для запуска icecast сервера.
Секция <authentication>
1 2 3 4 5 6 7 8 9 10 11 12 |
<authentication> <!-- Sources log in with username 'source' --> <source-password>hackme</source-password> <!-- Relays log in with username 'relay' --> <relay-password>hackme</relay-password> <!-- Admin logs in with the username given below --> <admin-user>admin</admin-user> <admin-password>hackme</admin-password> </authentication> |
Если вы планируете передавать свой поток на icecast, то вам нужно изменить секцию <source-password>hackme</source-password> . Установите свой пароль. Список популярных программ, выполняющие роль источника, можете глянуть здесь
<relay-password>hackme</relay-password> Здесь вы устанавливает пароль сервера источника, если этот сервер требует пароль. В основном, когда вы берете поток из свободного доступа, этот параметр не важен.
1 2 3 4 |
<admin-user>admin</admin-user> <admin-password>hackme</admin-password> |
Этот параметр отвечает за доступ к веб панели вашего icecast сервера.
Секция <hostname>
1 2 3 |
<hostname>localhost</hostname> |
В <hostname> пропишите ip или DNS имя вашего icecast сервера
Секция <listen-socket>
1 2 3 4 5 |
<listen-socket> <port>8000</port> </listen-socket> |
Здесь мы указываем порт трансляции, по умолчанию стоит 8000.
Секция <relay>
Приведу пример этой секции на примере радиостанции потока https://radio.ddr64.link/potok/europapluslight/, который мы хоти ретранслировать на своем icecast сервере.
1 2 3 4 5 6 7 8 9 10 |
<relay> <server>radio.ddr64.link</server> <port>80</port> <mount>/potok/europapluslight/</mount> <local-mount>/europa</local-mount> <on-demand>0</on-demand> <relay-shoutcast-metadata>1</relay-shoutcast-metadata> </relay> |
После такой настройки, новый адрес будет http://<icecastserver>:8000/europa
<on-demand>0</on-demand> эта секция отвечает за то, будет ли постоянное обращение к потоку или по запросу. “0” – отключено
<relay-shoutcast-metadata>1</relay-shoutcast-metadata> эта секция отвечает за ретрансляцию метаданных (название песни, исполнителя). “1” – включено
Секция <paths>
В секции <paths> нужно обратить внимание на секцию <logdir>
1 2 3 |
<logdir>/var/log/icecast</logdir> |
По умолчанию директории /var/log/icecast не существует, её нужно будет создать (см. ниже)
Секция <security>
1 2 3 4 5 6 7 8 9 10 11 |
<security> <chroot>0</chroot> <!-- <changeowner> <user>nobody</user> <group>nogroup</group> </changeowner> --> </security> |
Секция <security> отвечает за то, от какого пользователя будет запускаться сервис icecast. Рекомендуется создать отдельного пользователя и группу. В моем случае, я создал пользователя и группу icecast и убрал комментарии.
<chroot>0</chroot> эта секция отвечает, разрешить или запретить запуск от root, “0” – запретить
1 2 3 4 5 6 7 8 9 |
<security> <chroot>0</chroot> <changeowner> <user>icecast</user> <group>icecast</group> </changeowner> </security> |
Описание остальных настроек, можете глянуть на сайте
Далее создадим пользователя icecast и добавим его в группу icecast:
1 2 3 |
pw groupadd icecast && pw useradd icecast -g icecast |
Создаём папку для log-файлов:
1 2 3 |
mkdir /var/log/icecast |
Создадим лог файлы:
1 2 3 |
touch /var/log/icecast/access.log && touch /var/log/icecast/error.log |
Дадим права на папку /var/log/icecast/ и всего содержимого в этой папке, для пользователя и группы icecast:
1 2 3 |
chown -R icecast /var/log/icecast/* && chgrp -R icecast /var/log/icecast/* && chmod 644 /var/log/icecast/* |
Добавим icecast в /etc/rc.conf для автозагрузки:
1 2 3 |
echo "icecast_enable=YES" >> /etc/rc.conf |
Запускаем icecast:
1 2 3 |
service icecast start |
Скорее всего, у вас возникнет предупреждение, но сервис благополучно запуститься и всё будет работать.
WARN fserve/fserve_recheck_mime_types Cannot open mime types file /etc/mime.types
Дело в том, что сервер Icecast должен иметь возможность читать основной файл типов mime Unix/Linux, расположенный в /etc/mime.types, и если этого файла нет или он есть, но нет к нему доступа, тогда нужно предоставить доступ.
В моем случае, файла mime.types не было, поэтому я его создал и поместил в /etc. Можете скачать готовый вариант и дать доступ lcecast
1 2 3 4 5 |
cd /etc fetch https://ddr64.link/download/mime.types chown icecast mime.types |
Перезапустим сервис:
1 2 3 |
service icecast restart |
Всё! 🙂