Я пытаюсь получить видео с трех камер через 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-кадра), следующего за этим моментом времени.
- Вы уверены, что задаете правильный вопрос? Может быть, лучше было бы начать входной этап намного раньше, декодировать в формат только по ключевым кадрам (что дает немедленный запуск), а затем перекодировать? Вот как минимальная задержка достигается в индустрии вещания.
Первые два пункта отвечают на вопрос, почему разные процессы запускаются быстрее, чем один процесс: каждый из них должен ждать одного ключевого кадра, а не всех трех.