Skip to content

Импорт потоков из M3U

При первичной настройке Flussonic Media Server может возникнуть необходимость завести большое количество потоков. Например, это может быть список мультикаст-групп или другие HTTP MPEG-TS / HLS / RTMP источники.

В интерфейсе такой функции нет, но Flussonic Media Server предоставляет API для импорта и несложный формат конфигурационного файла. С помощью небольшого python-скрипта можно сконвертировать m3u-плейлист в конфигурацию Flussonic Media Server и импортировать вручную, вставив текст в /etc/flussonic/flussonic.conf, или используя curl и HTTP API.

Для начала, скачаем скрипт m3u_to_flussonic.py с ресурса gist.github.com:

wget -O m3u_to_flussonic.py https://gist.githubusercontent.com/klyushkov/bf95dcf66ba99ba9a5d8e5eb71db75ae/usr/src/app/src/img/f998977e3596c11129f31470936a58145a68e180/m3u_to_flussonic.py

Затем запускаем его, используя python (большинство дистрибутивов поставляются с установленным python, а если нет, то установите его самостоятельно apt install -y python-minimal)

python m3u_to_flussonic.py example1.m3u

В результате вы должны получить следующий вывод:

root@flussonic:~# python m3u_to_flussonic.py example1.m3u
stream _BBC_World {
  url tshttp://example.com/stream/to/video2;
}
stream _CNN_International {
  url tshttp://example.com/stream/to/video2;
}
stream Arirang {
  url tshttp://example.com/stream/to/video3;
}
stream ORT {
  url tshttp://example.com/ort/mpegts;
}
stream ORT_HLS {
  url hls://example.com/ort/index.m3u8;
}
stream stream6 {
  url hls://example.com/streamwithoutname/video.m3u8;
}
stream RTMP_stream {
  url rtmp://example.com/static/stream;
}

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

root@flussonic:~# python m3u_to_flussonic.py example2.m3u
stream stream1 {
  url udp://239.255.0.1:5500;;
}
stream stream2 {
  url udp://239.255.0.2:5500;;
}
stream stream3 {
  url udp://239.255.0.3:5500;;
}
stream stream4 {
  url udp://239.255.0.4:5500;;
}
stream stream5 {
  url udp://239.255.0.5:5500;;
}

Эту конфигурацию нужно скопировать и вставить в файл /etc/flussonic/flussonic.conf, после чего перечитать конфигурацию командой service flussonic reload

Так же можно применить конфигурацию через API, это может быть удобно, если вы хотите завести потоки на несколько серверов:

root@flussonic2:~# curl -u flussonic:letmein! --data-binary "$(python m3u_to_flussonic.py example2.m3u)" http://flussonic:80/flussonic/api/config/stream_create
{"success":true}

Где:

  • flussonic:letmein! — логин и пароль от вашего Flussonic Media Server.
  • example1.m3u — импортируемый файл.
  • http://flussonic:80 — адрес вашего сервера.

{"success":true} означает, что импорт прошел успешно.

Кстати, m3u_to_flussonic.py умеет работать не только с локальными файлами, но и с удаленными по http://:

root@flussonic:~# python m3u_to_flussonic.py http://example.com/example2.m3u
<...>

Примеры файлов

Если у вас нету под рукой m3u плейлиста, можете потренироваться на этих:

example1.m3u

#EXTM3U
#EXTINF:0 tvg-name="BBC" audio-track="eng" tvg-logo="http://example.com/BBC.png", BBC World
http://example.com/stream/to/video2
#EXTINF:0 tvg-name="CNN" audio-track="rus" group-title="News", CNN International
http://example.com/stream/to/video2
#EXTINF:0,Arirang
http://example.com/stream/to/video3
#EXTINF:-1,ORT
http://example.com/ort/mpegts
#EXTINF:-1,ORT_HLS
http://example.com/ort/index.m3u8
http://example.com/streamwithoutname/video.m3u8
#EXTINF:-1,RTMP_stream
rtmp://example.com/static/stream

example2.m3u

udp://239.255.0.1:5500
udp://239.255.0.2:5500
udp://239.255.0.3:5500
udp://239.255.0.4:5500
udp://239.255.0.5:5500