В Yggdrasil очень легко и быстро можно создать собственное радио из локальной коллекции, не имея выделенного IP адреса.
Есть много инструкций по конфигурации эфирного времени, включая различные скрипты автоматизации плей-листов и взаимодействие с участниками стримов по расписанию.
Ниже рассмотрен базовый пример организации сервера на Yggdrasil / IPv6, возможно в процессе материал будет дополнен.
Icecast - популярный сервер потокового мультимедиа, с поддержкой потоков Ogg (Vorbis и Theora), Opus, WebM и MP3.
Поддерживает открытые стандарты общения и взаимодействия, распространяется под лицензией GNU GPL версии 2.
Простыми словами, он выполняет ту же функцию, что nginx для веб-сайтов, но ориентирован на работу с потоковым контентом.
Установка доступна из репозиториев:
apt install icecast2
Стартуем сервис, чтобы создать базовую конфигурацию
systemctl start icecast2
Пример конфигурационного файла:
<icecast> <location>Yggdrasil</location> <admin>icemaster@localhost</admin> <clients>100</clients> <sources>2</sources> <queue-size>524288</queue-size> <client-timeout>30</client-timeout> <header-timeout>15</header-timeout> <source-timeout>10</source-timeout> <burst-on-connect>1</burst-on-connect> <burst-size>65535</burst-size> </limits> <authentication> <source-password>пароль</source-password> <relay-password>пароль</relay-password> <admin-user>admin</admin-user> <admin-password></admin-password> </authentication> <hostname>[xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]</hostname> <listen-socket> <port>8000</port> <bind-address>::</bind-address> </listen-socket> <http-headers> <header name="Access-Control-Allow-Origin" value="*" /> </http-headers> <fileserve>1</fileserve> <paths> <basedir>/usr/share/icecast2</basedir> <logdir>/var/log/icecast2</logdir> <webroot>/usr/share/icecast2/web</webroot> <adminroot>/usr/share/icecast2/admin</adminroot> <alias source="/" destination="/status.xsl"/> </paths> <logging> <accesslog>access.log</accesslog> <errorlog>error.log</errorlog> <loglevel>3</loglevel> <logsize>10000</logsize> </logging> <security> <chroot>0</chroot> <changeowner> <user>nobody</user> <group>nogroup</group> </changeowner> </security> </icecast>
Добавляем в автозагрузку и перезапустим сервис:
systemctl enable icecast2 systemctl restart icecast2
Разрешаем подключения только Yggdrasil:
ufw allow from 0200::/7 to any port 8000
Ezstream — это клиент командной строки для медиапотоков, в первую очередь для передачи на серверы Icecast.
Используется непосредственно для работы с файлами, предварительно обеспечивая их формат. В отличии от популярного Ices2, из коробки работает с ogg, mp3 а также видео форматами.
Установка:
apt install ezstream
Ezstream запускается отдельными потоками для каждой позиции stream, для этого удобно создать отдельного пользователя:
useradd -m radio
Файловую структуру можно организовать следующим образом:
mkdir /home/radio/collection - библиотека файлов для стрима mkdir /home/radio/ezstream - файлы конфигурации ezstream mkdir /home/radio/playlist - файлы плейлистов
Базовые варианты конфигурации ezstream расположены в директории:
ls /usr/share/doc/ezstream/examples/
Для начала, можно скопировать минимальный набор:
cp /usr/share/doc/ezstream/examples/ezstream-minimal.xml /home/radio/ezstream/gta/vice-city.xml
Работающий пример конфигурации для радио GTA Vice City:
<?xml version="1.0" encoding="UTF-8"?> <ezstream> <servers> <server> <name>YGGwave</name> <hostname>127.0.0.1</hostname> <password>пароль к серверу Icecast</password> </server> </servers> <streams> <stream> <server>YGGwave</server> <intake>GTA Vice City</intake> <mountpoint>/gta/vice-city</mountpoint> <format>MP3</format> <shuffle>Yes</shuffle> <stream_once>No</stream_once> <public>No</public> <stream_name>YGGwave - GTA Vice City</stream_name> <stream_url>http://[201:23b4:991a:634d:8359:4521:5576:15b7]:8000/gta/vice-city</stream_url> <stream_genre>OST</stream_genre> <stream_description>GTA Vice City Radio Stations</stream_description> </stream> </streams> <intakes> <intake> <name>GTA Vice City</name> <filename>/home/radio/playlist/gta/vice-city.txt</filename> </intake> </intakes> <metadata> <svrinfoname>GTA - Vice City Radio</svrinfoname> <format_str>GTA Vice City</format_str> <refresh_interval>-1</refresh_interval> <normalize_strings>Yes</normalize_strings> <no_updates>No</no_updates> </metadata> </ezstream>
Копируем нужные медиа файлы в директорию /home/radio/collection
Плейлисты для директории можно сделать простой командой:
find /home/radio/collection -name *.mp3 > /home/radio/playlist/gta/vice-city.txt
Не забываем дать права пользователю:
chmod -R radio:radio /home/radio
В завершение, создадим для каждого стрима настройки systemd
[Unit] Description=ezstream-gta-vice-city After=network.target [Service] Type=simple User=radio ExecStart=/usr/bin/ezstream -c /home/radio/ezstream/gta/vice-city.xml StandardOutput=file:/home/radio/ezstream-gta-vice-city-debug.log StandardError=file:/home/radio/ezstream-gta-vice-city-error.log Restart=on-failure [Install] WantedBy=multi-user.target
и добавим в автозапуск:
systemctl enable ezstream-gta-vice-city systemctl start ezstream-gta-vice-city
Если есть желание стримить на 80 порту, но он занят nginx, можно сделать проксирование:
location /yggwave/radio/gta/vice-city { proxy_pass http://localhost:8000/gta/vice-city; }