Reduzca la latencia con FFplay para codificadores HDMI | Exvist Support

Preguntas frecuentes: Reducir la latencia con FFplay for Codificador

Guía paso a paso para reducir la latencia con FFplay

1. Instalar FFmpeg y FFplay

Asegúrese de que FFmpeg (que incluye FFplay) esté instalado en su sistema. Puede comprobar si está instalado ejecutando:
  1. ffplay -version
Si no está instalado, puede descargar e instalar FFmpeg desde elsitio oficialo usar un gestor de paquetes comoapt or brewsegún su sistema operativo.

2. Abrir FFplay con flujo RTSP

Comience ejecutando FFplay con la URL de su flujo RTSP:
  1. ffplay rtsp://192.168.1.120:554/live/1_0
Reemplacertsp://192.168.1.120:554/live/1_0con la URL RTSP real de su codificador de vídeo.

3. Ajustar el tamaño del búfer

Reduzca el tamaño del búfer predeterminado para minimizar el retraso. Use el indicador -rtsp_transport para seleccionar el protocolo de transporte (TCP o UDP). UDP normalmente da como resultado una latencia menor.
Comando de ejemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0
Explicación:
  1. -rtsp_transport udp: Fuerza el transporte UDP, que generalmente tiene menor latencia que TCP.
  2. -fflags nobuffer: Desactiva el búfer para reducir la latencia.
  3. -analyzeduration 0: Limita el tiempo que FFplay dedica a analizar el flujo, lo que ayuda a iniciar la reproducción más rápido.
  4. -probesize 32: Limita la cantidad de datos utilizados para sondear el flujo, lo que también reduce la latencia.

4. Ajustar el retraso de salida de vídeo

Use el indicador -sync para ajustar la sincronización de vídeo. Establecerlo en video fuerza a FFplay a sincronizarse con el flujo de vídeo, lo que puede ayudar a reducir la latencia.
Comando de ejemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

5. Reducir el búfer de vídeo y audio

Desactive o minimice la reproducción de audio con -vn (sin vídeo) o ajuste los tamaños del búfer de audio usando -an (sin audio) si el audio no es necesario para la prueba.
Ejemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Ajustar las opciones de decodificación

Añada opciones para optimizar el rendimiento de decodificación y minimizar la latencia. Por ejemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -flags low_delay rtsp://192.168.1.120:554/live/1_0

7. Optimizaciones adicionales (opcional)

Puede ajustar aún más FFplay usando los indicadores -x e -y para especificar el tamaño de la ventana de vídeo, y -framedrop para descartar fotogramas si no se pueden procesar con la suficiente rapidez:
  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
Explicación:
  1. -framedrop: Descarta fotogramas cuando el sistema no puede seguir el ritmo de decodificación, reduciendo el búfer.
  2. -x 640 -y 360: Especifica la resolución para reproducir el vídeo, reduciendo la carga de decodificación.

Ejemplo de comando final

  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. Supervisar la latencia

Después de la configuración, supervise la reproducción para observar la reducción de la latencia. Puede usar herramientas como FFprobe para medir la latencia en tiempo real inspeccionando los detalles del flujo.
Ejemplo de comando FFprobe para comprobar las estadísticas del flujo:
  1. ffprobe -v quiet -print_format json -show_streams rtsp://192.168.1.120:554/live/1_0
Al usar los comandos anteriores y ajustar los distintos indicadores, puede reducir eficazmente la latencia al probar el flujo RTSP desde su codificador de vídeo.

Guía paso a paso para reducir aún más la latencia con FFplay

Si experimenta un aumento de la latencia después de seguir las instrucciones proporcionadas, podría haber varias razones por las que esto ocurre. A continuación, se presentan algunas causas potenciales y formas de abordarlas:

1. Configuración del búfer (ajuste incorrecto del búfer)

El indicador-fflags nobufferestá diseñado para minimizar el búfer, pero en algunos casos esto puede provocar inestabilidad o un aumento de la latencia, especialmente si las condiciones de la red no son ideales. FFplay puede tener dificultades para procesar los fotogramas sin problemas sin suficiente búfer, lo que provoca retrasos adicionales en la reproducción.

Solución: Intente ajustar la estrategia de búfer. En lugar de deshabilitar completamente el búfer, podría usar una configuración de búfer más conservadora o eliminar la-fflags nobufferbandera:

  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

2. Protocolo de transporte RTSP (UDP vs TCP)

Cambiar aUDPsuele ser más rápido que TCP para la transmisión RTSP, pero puede provocar pérdida de paquetes o jitter en determinadas condiciones de red, lo que hace que el decodificador retrase el procesamiento. Si la red no es estable, usarUDPpuede aumentar inadvertidamente la latencia mientras FFplay intenta compensar los paquetes perdidos o corruptos.

Solución: Pruebe con el transporteTCPy vea si la latencia mejora. Use la-rtsp_transport tcpbandera para forzar TCP:
ffplay -rtsp_transport tcp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

3. Descarte de fotogramas

La-framedropbandera le indica a FFplay que descarte fotogramas si no puede decodificarlos a tiempo, lo que debería reducir la latencia. Sin embargo, si se descartan demasiados fotogramas, esto puede provocar retrasos mayores, ya que FFplay puede tardar más en recuperarse y resincronizarse.

Solución: Si el descarte de fotogramas es excesivo, intente eliminar la-framedropbandera o reduzca su impacto:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0
Alternativamente, puede intentar ajustar el comportamiento de -framedrop para ver si ayuda a reducir el retraso:
  1. ffplay -framedrop 0 -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

4. Condiciones de red y jitter

ElUDPtransporte puede no ser ideal en una red de alta latencia o inestable. UDP no garantiza la entrega de paquetes, lo que puede provocar jitter y retrasos de almacenamiento en búfer en el lado del cliente. Aunque UDP puede reducir la latencia en condiciones de red perfectas, a menudo causa más problemas cuando hay inestabilidades o congestión en la red.

Solución: Pruebe con una red estable y menos congestionada, o vuelva aTCPsi su red tiene alto jitter o pérdida de paquetes.

5. Sobrecarga del decodificador

Si el-flags low_delayflag se utiliza junto con grandes flujos de vídeo o resoluciones más altas, podría provocar una sobrecarga del decodificador donde FFplay intenta decodificar fotogramas demasiado rápido, lo que puede introducir más retrasos de procesamiento.

Solución: Reduzca la resolución del vídeo para aligerar la carga del decodificador o desactive los flags de baja latencia si está causando problemas:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Análisis y sondeo excesivos

Los flags-analyzeduration 0y-probesize 32están destinados a limitar la cantidad de tiempo que FFplay dedica a analizar el flujo y el tamaño del sondeo inicial de paquetes, lo que debería acelerar el inicio. Sin embargo, si estos valores son demasiado restrictivos, podrían forzar a FFplay a operar con información incompleta, lo que provocaría retrasos de sincronización o un aumento de la latencia general mientras intenta recuperarse de los datos faltantes.

Solución: Aumente ligeramente los valores de-analyzedurationy-probesizepara permitir que FFplay recopile más datos durante el inicio sin aumentar significativamente la latencia:
  1. ffplay -rtsp_transport udp -analyzeduration 5000000 -probesize 5000000 -sync video rtsp://192.168.1.120:554/live/1_0

7. Modo de sincronización de vídeo

El-sync videoEl flag indica a FFplay que sincronice los fotogramas de vídeo con precisión, lo que puede provocar retrasos cuando necesita esperar al siguiente fotograma. Si la velocidad de fotogramas de salida del codificador no se alinea bien con las expectativas de sincronización de FFplay, esto puede provocar retrasos innecesarios.

Solución: Puedes experimentar sincronizando con laaudio or marca de tiempoen lugar de con el vídeo:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync audio rtsp://192.168.1.120:554/live/1_0
Alternativamente, eliminar por completo el flag -sync podría ayudar:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0

Conclusión:

Para reducir la latencia, experimenta equilibrando la estrategia de almacenamiento en búfer, el protocolo de transporte y la configuración de decodificación. UDP suele ofrecer menor latencia, pero requiere una red estable, mientras que TCP puede ser más fiable si la calidad de la red es inconsistente. Ajustar los tamaños de búfer, el comportamiento de sondeo y la configuración de descarte de fotogramas también puede ayudar a mitigar la latencia excesiva. Sigue probando diferentes configuraciones para encontrar la configuración óptima para tu caso de uso específico.