Уменьшить задержку с помощью FFplay для HDMI-кодеров | Exvist Support

FAQ: Уменьшение задержки с помощью FFplay для кодировщика

Пошаговое руководство по снижению задержки с помощью FFplay

1. Установить FFmpeg и FFplay

Убедитесь, что FFmpeg (который включает FFplay) установлен в вашей системе. Вы можете проверить, установлен ли он, запустив:
  1. ffplay -версия
Если он не установлен, вы можете скачать и установить FFmpeg изОфициальный сайтили используйте менеджер пакетов, напримерaptилиЗаваритьна основе вашей операционной системы.

2. FFplay с RTSP Open Stream

Начните с запуска FFplay с URL потока RTSP:
  1. ffplay rtsp://192.168.1.120:554/live/1_0
Заменитьrtsp://192.168.1.120:554/live/1_0с фактическим URL-адресом видеокодера RTSP.

3. Отрегулируйте размер буфера

Уменьшить размер буфера по умолчанию, чтобы свести к минимуму задержку. Используйте флаг -rtsp_transport для выбора транспортного протокола (TCP или UDP). Обычно UDP приводит к снижению задержки.
Пример команды:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0
Пояснение:
  1. -rtsp_transport udpСилы транспортировки UDP, которая, как правило, ниже задержки, чем TCP.
  2. -fflags NobufferОтключает буферирование для уменьшения задержки.
  3. -анализированная 0Ограничает время, которое FFplay тратит на анализ потока, помогая начать воспроизведение быстрее.
  4. -размер 32Ограничает объем данных, используемых для зондирования потока, что также уменьшает задержку.

4. Настройка видеовывода

Используйте флаг синхронизации видео. Настройка его на видео заставляет FFplay синхронизироваться с видеопотоком, что может помочь снизить задержку.
Пример команды:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -синхронизация видео rtsp://192.168.1.120:554/live/1_0

5. Уменьшить видео и аудио буферирование

Отключить или свести к минимуму воспроизведение звука с помощью -vn (без видео) или настроить размеры аудиобуфера с помощью -an (без аудио), если аудио не необходимо для тестирования.
Пример:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -синхронизация видео -an rtsp://192.168.120:554/live/1_0

6. Опции декодирования тонкой настройки

Добавить опции для оптимизации производительности декодирования и минимизации задержки. Например:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -синхронизация видео -an -flags low_delay rtsp://192.168.1.120:554/live/1_0

7. Дополнительные оптимизации (необязательно)

Вы можете дополнительно настроить FFplay, используя флаги -x и -y для указания размера видеоокна и -framedrop на выброс кадров, если они не могут быть обработаны достаточно быстро:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -framedrop -flags low_delay -x 640 -y 360 rtsp://192.168.1.120:554/live/1_0
Пояснение:
  1. -framedropКадры падают, когда система не может идти в ногу с декодированием, уменьшая буферирование.
  2. - 640 -y 360Указывает разрешение для воспроизведения видео, уменьшая рабочую нагрузку для декодирования.

Окончательный пример команды

  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -framedrop -flags low_delay -x 640 -y 360 rtsp://192.168.1.120:554/live/1_0

8. Монитор задержки

После настройки контролируйте воспроизведение, чтобы наблюдать снижение задержки. Вы можете использовать такие инструменты, как FFprobe, для измерения задержки в режиме реального времени, проверив детали потока.
Пример команды FFprobe для проверки статистики потока:
  1. ffprobe -v tiho -print_format json -show_streams rtsp://192.168.1.120:554/live/1_0
Используя вышеуказанные команды и настраивая различные флаги, вы можете эффективно уменьшить задержку при тестировании потока RTSP из видеокодера.

Пошаговое руководство по дальнейшему снижению задержки с помощью FFplay

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

1. Настройки буфера (неправильная регулировка буфера)

У них-fflags NobufferФлаг предназначен для минимизации буферирования, но в некоторых случаях это может привести к нестабильности или увеличению задержки, особенно если условия сети не идеальны. FFplay может изо всех сил пытаться плавно обработать кадры без достаточного количества буфера, вызывая дополнительные задержки в воспроизведении.

РешениеПопробуйте скорректировать буферную стратегию. Вместо полного отключения буферирования вы можете использовать более консервативную настройку буфера или удалить-fflags NobufferФлаг:

  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -синхронизация видео rtsp://192.168.1.120:554/live/1_0

2. Транспортный протокол RTSP (UDP против TCP)

Переключение наUdpКак правило, быстрее, чем TCP для потоковой передачи RTSP, но это может привести к потере пакета или трессованию при определенных сетевых условиях, в результате чего декодер задерживает обработку. Если сеть не стабильна, используяUdpЭто может непреднамеренно увеличить задержку, поскольку FFplay пытается компенсировать потерянные или поврежденные пакеты.

РешениеТест с :ТкпПосмотрим, улучшится ли транспорт задержка. Используйтеrtsp_transport tcpВынудить флаг TCP:
ffplay -rtsp_transport tcp -analyzeduration 0 -probesize 32 -синхронизация видео rtsp://192.168.1.120:554/live/1_0

3. Падение рамы

У них-framedropФлаг говорит FFplay выбросить кадры, если он не в состоянии расшифровать их вовремя, что должно уменьшить задержку. Однако, если слишком много кадров сброшено, это может привести к увеличению задержек, поскольку восстановление и ресинхронизация FFplay может занять больше времени.

РешениеЕсли падение кадра чрезмерно, попробуйте удалить-framedropили уменьшить его воздействие флага:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -синхронизация видео rtsp://192.168.1.120:554/live/1_0
Альтернативно, вы можете попробовать скорректировать поведение -framedrop, чтобы увидеть, помогает ли это уменьшить отставание:
  1. ffplay -framedrop 0 -rtsp_transport udp -analyzeduration 0 -probesize 32 -синхронизация видео rtsp://192.168.1.120:554/live/1_0

4. Условия и сетевые условия

У нихUdpтранспорт может быть не идеальным в сети с высокой задержкой или нестабильной. UDP не гарантирует доставку пакетов, что может привести к задержкам и буферным задержкам на стороне клиента. Хотя UDP может уменьшить задержку в идеальных сетевых условиях, это часто вызывает больше проблем, когда есть сетевая нестабильность или перегрузка.

Решение: тестируйте со стабильной и менее перегруженной сетью или вернитесь кТкпВаша сеть имеет высокий джиттер или потерю пакетов.

5. Перегрузка декодера

Если-flags Low_delayФлаг используется вместе с большими видеопотоками или более высокими разрешениями, это может привести к перегрузке декодером, где FFplay пытается расшифровать кадры слишком быстро, что может привести к большим задержкам обработки.

РешениеУменьшить разрешение видео, чтобы облегчить нагрузку на декодер или выключить флаги с низкой задержкой, если это вызывает проблемы:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Чрезмерный анализ и зондирование

Флаги-анализированная 0и-размер 32предназначены для ограничения количества времени, которое FFplay тратит на анализ потока и размера первоначального пакетного зонда, что должно ускорить запуск. Однако, если эти значения слишком ограничительны, это может заставить FFplay работать с неполной информацией, что приводит к задержкам синхронизации или увеличению общей задержки при попытке восстановиться от отсутствующих данных.

РешениеУвеличьте:-анализированнаяи-пробезируйтеНемного значения, чтобы позволить FFplay собирать больше данных во время запуска без существенного увеличения задержки:
  1. ffplay -rtsp_transport udp -analyzeduration 5000000 -probesize 5000000 -синхронизация видео rtsp://192.168.1.120:554/live/1_0

7. Режим синхронизации видео

У них-синхронизировать видеоFFplay говорит точно синхронизировать видеокадры, что может вызвать задержки, когда ему нужно ждать следующего кадра. Если частота кадров кодера не соответствует ожиданиям FFplay синхронизации, это может привести к ненужным задержкам.

РешениеВы можете экспериментировать с синхронизацией:АудиоилиВременная меткаВместо видео:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -синхронизация аудио rtsp://192.168.1.120:554/live/1_0
В качестве альтернативы, удаление флага -синхронизации может помочь:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0

Заключение:

Чтобы уменьшить задержку, экспериментировать с балансировкой буферной стратегии, транспортного протокола и настроек декодирования. UDP обычно предлагает более низкую задержку, но требует стабильной сети, в то время как TCP может быть более надежным, если качество сети непоследовательно. Настройка размеров буфера, поведения зондирования и настроек падения кадра также может помочь смягчить чрезмерную задержку. Сохраняйте различные конфигурации, чтобы найти оптимальную настройку для вашего конкретного варианта использования.