30.05.2020
В последнее время все большую популярность приобретает технология потоковой передачи видео по протоколу 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 или в терминологии SRT энкодер будет работать в режиме Caller.1
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
Где xxx.xxx.xxx.xxx это IP адрес сервера с Wowza. Следует учесть, что при наличии нескольких IP на одном сетевом интерфейсе принять SRT поток Wowza может только на первом из IP.адресов.
Вместо ffmpeg для публикации можно использовать энкодеры OBS Studio, vMix или любой другой с поддержкой SRT.
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-сервере создается по факту публикации энкодером.
1. Wowza-сервер не может тянуть поток c SRT энкодера работающего в режиме Listner. Режим взаимодействия SRT устройств Rendezvous в Wowza так же не поддерживается.