Вывод FFMPEG на несколько rtmp и их синхронизация - PullRequest
0 голосов
/ 26 мая 2020

предположим, что у меня есть видео, и я использую фильтр для их обрезки, скажем, шириной 1/2 и 1/2 до 2 выходных потоков rtmp.

Теперь 2 клиента подпишутся на этот поток, скажем,

vlc1 - поток 1 | vlc2 - поток 2

как я могу синхронизировать их для одновременного воспроизведения (я всегда вижу, что 1 клиент играет быстрее или медленнее, чем другой)

Вот код

ffmpeg -re -stream_loop -1 -i sample.mp4 \
  -filter:v "crop=in_w/2:in_h:0:0" -c:a copy -f flv rtmp://localhost/live/1 \
  -filter:v "crop=in_w/2:in_h:in_w/2:0" -c:a copy -f flv rtmp://localhost/live/2

Попался1

Выяснилось, что проблема была в stream_l oop, и с каждой итерацией и фильтром он вызывает некоторую задержку.

С этого момента единственное решение, работающее для меня, -

  1. Воспроизведение исходного файла (с l oop) и вывод в поток rtmp
  2. Создайте 2 потока, которые читают исходный поток, выполняют обрезку и затем выводят 2 потока rtmp
ffmpeg -i rtmp://localhost/live/feed -filter:v crop=in_w/2:in_h:0:0 -c:a copy -f flv rtmp://localhost/live/1

ffmpeg -i rtmp://localhost/live/feed -filter:v crop=in_w/2:in_h:in_w/2:0 -c:a copy -f flv rtmp://localhost/live/2

1 Ответ

0 голосов
/ 26 мая 2020

RTMP не имеет функции синхронизации. Вам нужно будет разработать внеполосную систему времени, в которой игроки также будут синхронизировать c (возможно, NTP), и добавить время начала потока в исходный тег сценария RTMP onMedatata. Затем вам необходимо изменить исходный код VL C, чтобы правильно прочитать тег и разрешить временные метки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...