Содержание

Интернет-радио

В Yggdrasil очень легко и быстро можно создать собственное радио из локальной коллекции, не имея выделенного IP адреса.

Есть много инструкций по конфигурации эфирного времени, включая различные скрипты автоматизации плей-листов и взаимодействие с участниками стримов по расписанию.
Ниже рассмотрен базовый пример организации сервера на Yggdrasil / IPv6, возможно в процессе материал будет дополнен.

Icecast

Icecast - популярный сервер потокового мультимедиа, с поддержкой потоков Ogg (Vorbis и Theora), Opus, WebM и MP3.

Поддерживает открытые стандарты общения и взаимодействия, распространяется под лицензией GNU GPL версии 2.

Простыми словами, он выполняет ту же функцию, что nginx для веб-сайтов, но ориентирован на работу с потоковым контентом.

Установка доступна из репозиториев:

apt install icecast2

Стартуем сервис, чтобы создать базовую конфигурацию

systemctl start icecast2

Пример конфигурационного файла:

/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>

Добавляем в автозагрузку и перезапустим сервис:

systemctl enable icecast2
systemctl restart icecast2

Разрешаем подключения только Yggdrasil:

ufw allow from 0200::/7 to any port 8000

Ezstream

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:

/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>

Копируем нужные медиа файлы в директорию /home/radio/collection

Плейлисты для директории можно сделать простой командой:

find /home/radio/collection -name *.mp3 > /home/radio/playlist/gta/vice-city.txt

Не забываем дать права пользователю:

chmod -R radio:radio /home/radio

В завершение, создадим для каждого стрима настройки systemd

/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

и добавим в автозапуск:

systemctl enable ezstream-gta-vice-city
systemctl start ezstream-gta-vice-city

Nginx

Если есть желание стримить на 80 порту, но он занят nginx, можно сделать проксирование:

/etc/nginx/sites-available/default
location /yggwave/radio/gta/vice-city {
	proxy_pass http://localhost:8000/gta/vice-city;
}

Ссылки