Запустите ffmpeg параллельно для синхронизации в потоковой передаче rtsp

Запустите ffmpeg параллельно для синхронизации в потоковой передаче rtsp

Я пытаюсь получить видео с трех камер через rtsp. Мы используем ffmpeg с несколькими выходами, как объясняет ffmpeg, но задержка хуже, чем если бы мы запускали напрямую три разных процесса linux, возможно ли найти какую-то комбинацию команд ffmpeg, чтобы запустить в точный момент процесс записи для трех камер.

В настоящее время мы используем эту команду:

ffmpeg -rtsp_transport tcp -i rtsp://admin:[email protected]:554 -rtsp_transport tcp -i rtsp://admin:[email protected]:554 -rtsp_transport tcp -i rtsp://admin:[email protected]:554 -map 0  -vcodec copy video1.mp4 -map 1 -vcodec copy video2.mp4 -map 2  -vcodec copy video3.mp4  -y

Он обеспечивает задержку около 2 секунд.

Кроме того, мы пытаемся синхронизировать все кадры во время записи, но это кажется невозможным, если они поступают с разных устройств, должна быть переменная задержка между видео...

решение1

Существует МНОГО факторов, которые влияют на то, как видео из разных источников запускается, взаимодействует и синхронизируется (или нет):

  • Три камеры, скорее всего, не будут иметьточноодинаковая частота кадров. Даже 1/1000 неравенства во временных базах при 25 кадрах в секунду даст вам разницу в полный кадр каждые 40 секунд
  • Для того, чтобы поток "запустился" (т. е. появилось первое выходное изображение), декодер должен дождаться первого полного изображения (I-кадра), на котором могут быть построены следующие B-кадры и P-кадры. Это ограничено сверху длиной GOP, которая обычно находится в диапазоне 1-2 секунд для потоковых камер. Поскольку I-кадры чаще всего не только планируются на каждой границе GOP, но и на существенно измененном содержании изображения ("оппортунистические" I-кадры при смене сцены), очень маловероятно, что они появятся одновременно. Это означает, что для случая с несколькими входами минимальная задержка равна максимальной временной дельте между I-кадрами в разных потоках.Помните: поток h.264 по своей сути не может быть интерпретирован с любого заданного момента времени, а только с первого ключевого кадра (I-кадра), следующего за этим моментом времени.
  • Вы уверены, что задаете правильный вопрос? Может быть, лучше было бы начать входной этап намного раньше, декодировать в формат только по ключевым кадрам (что дает немедленный запуск), а затем перекодировать? Вот как минимальная задержка достигается в индустрии вещания.

Первые два пункта отвечают на вопрос, почему разные процессы запускаются быстрее, чем один процесс: каждый из них должен ждать одного ключевого кадра, а не всех трех.

Связанный контент