Репликация нод

Добрый день,
и вот настал тот день, у меня 3 ноды: 1 мастер и 2 слейва. Стрим осуществляется на мастер сервер, потом слейвы видят вещание и начинают его лить в себя по RTMP, по принципу:
ffmpeg -i rtmp://master/live/test-c:v copy -c:a copy -f flv rtmp://node1.whenspeak.ru/live/test
ffmpeg -i rtmp://master/live/test-c:v copy -c:a copy -f flv rtmp://node2.whenspeak.ru/live/test

Все это работает не больше 5 минут, потом вылетает, в логах пусто. В файл льется норм, а сервер падает. Подскажите, как наладить или оптимизировать процесс?
 

Max

Administrator
Staff member
ffmpeg -i rtmp://master/live/test-c:v copy -c:a copy -f flv rtmp://node1.whenspeak.ru/live/test
ffmpeg -i rtmp://master/live/test-c:v copy -c:a copy -f flv rtmp://node2.whenspeak.ru/live/test
Можно сделать похожее без ffmpeg, с использованием REST API.
Допустим, есть три ноды:
node3 - origin (master)
node1 - edge (slave)
node2- edge (slave)
1. Публикуем поток stream1 на node3 стандартным способом.
2. По REST API вызываем /push/startup и передаем {streamName:"stream1",rtmpUrl:"rtmp://node1.whenspeak.ru/live/test"}
В результате поток должен среплецироваться на node1.
3. Делаем тоже самое для node2.

Подробная документация по REST API с примерами:
https://flashphoner.com/docs/wcs5/wcs_docs/html/en/wcs-rest-api/

Похожий кейс, в котором реплицируем поток на Youtube и Facebook
https://flashphoner.com/transliruem-videopotok-s-veb-stranic/?lang=ru
Здесь в качестве node1 и node2 используются Youtube Live и Facebook Live RTMP серверы.

Контроллировать текущие репликации (или push сессии) можно опять же с помощью REST API
/push/find_all
/push/find
/push/terminate
 

Max

Administrator
Staff member
Еще один способ репликации - это RTSP.
Пример:
Имеем node1 (origin), node2 (edge), node3 (edge)
1. Отправляем поток с вебкамеры на node1.
Например с именем: stream1
Допустим node1 имеет адрес node1.com
2. Подключаемся по websockets к node2 и делаем
Code:
session.createStream("rtsp://node1.com/stream1").play();
3. Подключаемся по websockets к node3 и делаем
Code:
session.createStream("rtsp://node1.com/stream1").play();
Т.е. забираем поток с первой ноды как RTSP и играем его в браузере.
 
Top