Публикация потока на Wowza сервер по протоколу SRT

2020-05-30 20:34:00

В последнее время все большую популярность приобретает технология потоковой передачи видео по протоколу SRT. В данной статье мы не будем подробно рассматривать особенности самого протокола, а тем более сравнивать его с протоколом RTMP. Заметим только, что изначально SRT позиционировался прежде всего как альтернатива сервисам типа Zixi (весьма недешевым), позволяющим передать Mpeg2 транспортный поток через открытый Интернет с минимальной потерей качества и минимально возможной задержкой (с учетом того факта, что повторная передача потерянных пакетов – это всегда дополнительная задержка). Соответственно и предлагался он к использованию там, где исходным сигналом был транспортный поток, прежде всего от профессионального ТВ-оборудования. В дальнейшем протокол SRT стал рассматриваться как некая революционная замена брошенного Adobe-протокола RTMP для всех случаев стриминга в Интернет, хотя на потоке с маленьким битрейтом и стримером, расположенном в одном географическом регионе с принимающим сервером, значимых различий в качестве трансляции при использовании того или другого протокола не будет.

Остановимся на поддержке SRT в Wowza Streaming Engine. Медиасервер Wowza может выступать как передающим SRT-устройством, так и принимающим его конечным оборудованием. Наибольший интерес для широкого круга пользователей представляет собой как раз второй сценарий. Настроить его в Wowza чрезвычайно просто:

1. На сервере с установленным Wowza Streaming Engine сетевой экран должен быть настроен таким образом, чтобы разрешать входящий UDP-трафик. Сетевой экран локальной сети тоже должен пропускать входящий UDP.

2. Добавить стрим-файл, используя Wowza Streaming Engine Manager. В нашем примере файл будет называться srt.stream. URI указать в виде srt://0.0.0.0:10000, что говорит Wowza слушать поток на локальном сетевом интерфейсе, порт UDP 10000. Наш энкодер будет направлять SRT-поток на Wowza-сервер (push). В случае, когда Wowza-сервер должен тянуть поток c энкодера (pull), в URI указывается IP и порт на энкодере.

3. Запустить прием потока, указав приложение для приема потока live и тип MediaCaster srt.


4. Запустить энкодер. В нашем случае ffmpeg для трансляции файла «по кругу»: ffmpeg -re -stream_loop -1 -i sample.mp4 -pix_fmt yuv420p -deinterlace -vf "scale=640:360" -vsync 1 -threads 0 -vcodec libx264 -r 29.970 -g 60 -sc_threshold 0 -b:v 1024k -bufsize 1216k -maxrate 1280k -preset medium -profile: v main -tune film -acodec aac -b:a 128k -ac 2 -ar 48000 -af "aresample=async=1:min_hard_comp=0.100000:first_pts=0" -vbsf h264_mp4toannexb -f mpegts srt://xxx.xxx.xxx.xxx:10000 Для публикации по SRT можно использовать энкодеры OBS broadcaster или vMix.

5. Проверить наличие входящего потока

6. Проиграть поток с Wowza по протоколу HLS: ffplay http://xxx.xxx.xxx.xxx:1935/live/srt.stream/playlist.m3u8

7. Добавить поток в список автостарта (Startup Streams), иначе после рестарта сервиса Wowza он не будет подключен автоматически.

Важное отличие процесса публикации по протоколу SRT от RTMP заключается в том, что поток нужно предварительно создать в интерфейсе управления Wowza Manager (stream-файл) и запустить его, в то время как для RTMP-публикации ничего создавать не нужно. Поток на Wowza-сервере создается по факту публикации энкодером.