howto-db/data/pages/yggdrasil/internet_radio.txt
2024-02-10 12:53:55 +00:00

232 lines
8.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Интернет-радио ======
В 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~~