232 lines
8.3 KiB
Plaintext
232 lines
8.3 KiB
Plaintext
====== Интернет-радио ======
|
||
|
||
В Yggdrasil очень легко и быстро можно создать собственное радио из локальной коллекции, не имея выделенного IP адреса.
|
||
|
||
Есть много инструкций по конфигурации эфирного времени, включая различные скрипты автоматизации плей-листов и взаимодействие с участниками стримов по расписанию.\\
|
||
Ниже рассмотрен базовый пример организации сервера на Yggdrasil / IPv6, возможно в процессе материал будет дополнен.
|
||
|
||
===== Icecast =====
|
||
|
||
[[https://icecast.org/|Icecast]] - популярный сервер потокового мультимедиа, с поддержкой потоков Ogg (Vorbis и Theora), Opus, WebM и MP3.
|
||
|
||
Поддерживает открытые стандарты общения и взаимодействия, распространяется под лицензией GNU GPL версии 2.
|
||
|
||
Простыми словами, он выполняет ту же функцию, что nginx для веб-сайтов, но ориентирован на работу с потоковым контентом.
|
||
|
||
Установка доступна из репозиториев:
|
||
|
||
<code>
|
||
apt install icecast2
|
||
</code>
|
||
|
||
Стартуем сервис, чтобы создать базовую конфигурацию
|
||
|
||
<code>
|
||
systemctl start icecast2
|
||
</code>
|
||
|
||
Пример конфигурационного файла:
|
||
|
||
<file - /etc/icecast2/icecast.xml>
|
||
<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>
|
||
</file>
|
||
|
||
Добавляем в автозагрузку и перезапустим сервис:
|
||
|
||
<code>
|
||
systemctl enable icecast2
|
||
systemctl restart icecast2
|
||
</code>
|
||
|
||
Разрешаем подключения только Yggdrasil:
|
||
<code>
|
||
ufw allow from 0200::/7 to any port 8000
|
||
</code>
|
||
|
||
===== Ezstream =====
|
||
|
||
[[https://icecast.org/ezstream/|Ezstream]] — это клиент командной строки для медиапотоков, в первую очередь для передачи на серверы Icecast.
|
||
|
||
Используется непосредственно для работы с файлами, предварительно обеспечивая их формат. В отличии от популярного Ices2, из коробки работает с ogg, mp3 а также видео форматами.
|
||
|
||
Установка:
|
||
|
||
<code>
|
||
apt install ezstream
|
||
</code>
|
||
|
||
Ezstream запускается отдельными потоками для каждой позиции stream, для этого удобно создать отдельного пользователя:
|
||
|
||
<code>
|
||
useradd -m radio
|
||
</code>
|
||
|
||
Файловую структуру можно организовать следующим образом:
|
||
|
||
<code>
|
||
mkdir /home/radio/collection - библиотека файлов для стрима
|
||
mkdir /home/radio/ezstream - файлы конфигурации ezstream
|
||
mkdir /home/radio/playlist - файлы плейлистов
|
||
</code>
|
||
|
||
Базовые варианты конфигурации ezstream расположены в директории:
|
||
|
||
<code>
|
||
ls /usr/share/doc/ezstream/examples/
|
||
</code>
|
||
|
||
Для начала, можно скопировать минимальный набор:
|
||
|
||
<code>
|
||
cp /usr/share/doc/ezstream/examples/ezstream-minimal.xml /home/radio/ezstream/gta/vice-city.xml
|
||
</code>
|
||
|
||
Работающий пример конфигурации для [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggwave/radio/gta/vice-city|радио GTA Vice City]]:
|
||
|
||
<file - /home/radio/ezstream/gra/vice-city.xml>
|
||
<?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>
|
||
</file>
|
||
|
||
Копируем нужные медиа файлы в директорию /home/radio/collection
|
||
|
||
Плейлисты для директории можно сделать простой командой:
|
||
|
||
<code>
|
||
find /home/radio/collection -name *.mp3 > /home/radio/playlist/gta/vice-city.txt
|
||
</code>
|
||
|
||
Не забываем дать права пользователю:
|
||
|
||
<code>
|
||
chmod -R radio:radio /home/radio
|
||
</code>
|
||
|
||
В завершение, создадим для каждого стрима настройки systemd
|
||
|
||
<file - /etc/systemd/system/ezstream-gta-vice-city.service>
|
||
[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
|
||
</file>
|
||
|
||
и добавим в автозапуск:
|
||
|
||
<code>
|
||
systemctl enable ezstream-gta-vice-city
|
||
systemctl start ezstream-gta-vice-city
|
||
</code>
|
||
|
||
===== Nginx =====
|
||
|
||
Если есть желание стримить на 80 порту, но он занят nginx, можно сделать проксирование:
|
||
|
||
<file - /etc/nginx/sites-available/default>
|
||
location /yggwave/radio/gta/vice-city {
|
||
proxy_pass http://localhost:8000/gta/vice-city;
|
||
}
|
||
</file>
|
||
|
||
===== Ссылки =====
|
||
|
||
* [[https://icecast.org/|Icecast]] - сервер для организации мультимедиа потоков
|
||
* [[https://icecast.org/ices/|Ices]] - клиент для Icecast
|
||
* [[https://icecast.org/ezstream/|Ezstream]] - альтернатива Ices с поддержкой дополнительных форматов
|
||
* [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggwave/|YGGwave]] ([[http://wave.ygg|wave.ygg]]) - каталог радио станций для Yggdrasil
|
||
|
||
~~DISCUSSION~~
|