Трансляция потока музыки в сеть Интернет и на видеохостинги
Ниже опишу параметры для настройки трансляции без детального описания.
В целом, это всё можно запустить на одном ПК под управлением Astra Linux 1.7.5+, RedOS 7,3+, Ubuntu 18+, CentOS 8+, Mac OS X 10.13+ или на RaspberryPI 5.
Перед настройкой нужно установить пакеты Icecast2, ezstream и ffmpeg.
## Настройка ezstream
### Файл конфигурации для EZSTREAM /etc/ezstream/ezstream.xml
Список файлов для воспроизведения "/media/shuffled_broadcast_playlist.txt", описание стрима текстовое для отображения в Icecast2.
"ПАРОЛЬСТРИМА" - пароль для стрима в Icecast2.
<?xml version="1.0" encoding="UTF-8"?>
<ezstream>
<servers>
<server>
<name>RaspberryPI</name>
<protocol>HTTP</protocol>
<hostname>127.0.0.1</hostname>
<port>8000</port>
<user>source</user>
<password>ПАРОЛЬСТРИМА</password>
<tls>May</tls>
<tls_cipher_suite>HIGH:!RSA:!SHA:!DH:!aNULL:!eNULL:!TLSv1</tls_cipher_suite>
<reconnect_attempts>20</reconnect_attempts>
</server>
</servers>
<streams>
<stream>
<mountpoint>/broadcast.mp3</mountpoint>
<intake>broadcast</intake>
<server>RaspberryPI</server>
<public>No</public>
<format>MP3</format>
<stream_name>SPBCHURCH BROADCAST STREAM</stream_name>
<stream_url>https://station.spbchurch.ru</stream_url>
<stream_genre>Various</stream_genre>
<stream_description>Стрим для трансляций богослужения. Максимально близкое исполнение к традиционным гимнам.</stream_description>
<stream_quality>1.5</stream_quality>
<stream_bitrate>16</stream_bitrate>
<stream_samplerate>48000</stream_samplerate>
<stream_channels>2</stream_channels>
</stream>
</streams>
<intakes>
<intake>
<name>broadcast</name>
<type>playlist</type>
<filename>/media/shuffled_broadcast_playlist.txt</filename>
<shuffle>1</shuffle>
<stream_once>No</stream_once>
</intake>
</intakes>
<metadata>
<format_str>@t@</format_str>
<refresh_interval>5</refresh_interval>
<normalize_strings>Yes</normalize_strings>
<no_updates>No</no_updates>
</metadata>
<decoders>
<decoder>
<name>OggDec</name>
<program>oggdec -R -b 16 -e 1 -s 1 -o - @T@</program>
<file_ext>.ogg</file_ext>
<file_ext>.oga</file_ext>
</decoder>
<decoder>
<name>MadPlay</name>
<program>madplay -b 16 -R 44100 -S -o raw:- @T@</program>
<file_ext>.mp3</file_ext>
</decoder>
<decoder>
<name>Flac</name>
<program>flac -s -d --force-raw-format --sign=signed --endian=little -o - @T@</program>
<file_ext>.flac</file_ext>
</decoder>
<decoder>
<name>AAC</name>
<program>faad -d -f 2 -w @T@</program>
<file_ext>.m4a</file_ext>
</decoder>
</decoders>
<encoders>
<encoder>
<name>OggEnc-Q1.5</name>
<format>Ogg</format>
<program>oggenc -r -B 16 -C 2 -R 44100 --raw-endianness 0 -q 1.5 -t @M@ -</program>
</encoder>
<encoder>
<name>Opus-VBR96</name>
<format>Ogg</format>
<program>opusenc --vbr --bitrate 96 --title @t@ --artist @a@ --raw --raw-rate 44100 - -</program>
</encoder>
<encoder>
<name>Lame-CBR128</name>
<format>MP3</format>
<program>lame --preset cbr 128 -r --add-id3v2 --bitwidth 16 - -</program>
</encoder>
</encoders>
<!-- Log file path -->
<logfile>/var/log/ezstream.log</logfile>
<!-- Log level (0-4) -->
<loglevel>3</loglevel>
</ezstream>
### Текст службы ezstream /etc/systemd/system/ezstream.service
[Unit] Description=EZStream Streaming Media Server After=network.target,icecast2.service [Service] User=icecast2 Group=icecast ExecStartPre=/bin/sleep 30 ExecStart=/usr/bin/ezstream -c /etc/ezstream/ezstream.xml -v Restart=always [Install] WantedBy=multi-user.target
### Скрипт создания списка файлов для воспроизведения
Скрипт нужен, если будете добавлять mp3-файлы в каталог уже после запуска службы.
#!/bin/bash ls /media/mp3/*.mp3 > /media/playlist.txt shuf /media/playlist.txt > /media/shuffled_playlist.txt chmod -R 755 /media/mp3 # Посылаем сигнал ezstream на обновление списка воспроизведения killall -HUP ezstream # Посылаем сигнал ezstream для переключения на следующий трек (закомментировано, но работает исправно, если это необходимо после обновления списка) # killall -SIGUSR1 ezstream
## Настройка Icecast2
### Файл конфигурации для Icecast2 /etc/icecast2/icecast.xml
"ПАРОЛЬСТРИМА" – паролья для подключения плеера ezstream
"ПАРОЛЬРЕЛЕЯ" – пароль для перенаправления потока (в моем случае не используется, но оставлен)
"ПАРОЛЬАДМИНА" – паролья от консоли администратора Icecast2
<icecast>
<location>Saint-Petersburg, Russia</location>
<admin>slakwik@ya.ru</admin>
<limits>
<clients>100</clients>
<sources>3</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>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
<hostname>station.spbchurch.ru</hostname>
<listen-socket>
<port>8000</port>
</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>
<!-- <playlistlog>playlist.log</playlistlog> -->
<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
<logsize>10000</logsize> <!-- Max size of a logfile -->
<!-- <logarchive>1</logarchive> -->
</logging>
<mount>
<mount-name>/radio.mp3</mount-name>
<charset>UTF-8</charset>
</mount>
<mount>
<mount-name>/broadcast.mp3</mount-name>
<charset>UTF-8</charset>
</mount>
<security>
<chroot>0</chroot>
<!--
<changeowner>
<user>nobody</user>
<group>nogroup</group>
</changeowner>
-->
</security>
</icecast>
## Настройка Ffmpeg
Скрипт для запуска потока на видеохостинг
#!/bin/bash VIDEO="vkradio.mp4" BROADCAST="http://10.0.1.13:8000/broadcast.mp3" RESOLUTION="640x480" BITRATE="1500k" FRAMERATE="5" # URL для подключения к видеохостингу, ниже пример для Youtube URL="rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx-xxxx" /usr/bin/ffmpeg -re -stream_loop -1 -i "$VIDEO" -i "$BROADCAST" -c:a aac -s "$RESOLUTION" -ab 128k -b:v "$BITRATE" -threads 2 -crf 22 -preset fast -vcodec libx264 -pix_fmt yuv420p -maxrate 2048k -bufsize 2048k -framerate $FRAMERATE -g 2 -strict experimental -f flv "$URL"