Трансляция потока музыки в сеть Интернет и на видеохостинги
Ниже опишу параметры для настройки трансляции без детального описания.
В целом, это всё можно запустить на одном ПК под управлением 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>[email protected]</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"