es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valores de latencia de error para tuberías de gstreamer utilizando plugins de reloj de latencia para dos PC en la red LAN.

Intenté transmitir la alimentación de la cámara desde mi Khadas vim3 con Ubuntu 20.04 instalado en mi PC con Ubuntu 16.04 instalado. Estos dos nodos están conectados en la misma LAN cableada. Mi transmisión fue exitosa. Después de eso, quería medir el valor de la latencia cuantitativamente. Para eso, utilicé latency-clock como complementos de gstreamer y lo probé. Los comandos son los siguientes,

Receptor (PC)

gst-launch-1.0 --gst-debug=timeoverlayparse:6 --gst-plugin-path={TU RUTA}/latency-clock -v udpsrc port={PUERTO} caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! timeoverlayparse ! fakesink sync=true

Todo funcionó correctamente. Pero en el lado receptor, en la salida de depuración, la lectura de la latencia es un valor anormalmente grande. Lo intenté con el servidor NTP y sincronicé el tiempo de la PC con el Khadas SBC y no hubo cambios en el error.

Salida de depuración

Además, si el transmisor y el receptor se ejecutan en la misma PC, los valores de latencia son completamente correctos. Pero en diferentes máquinas en la LAN, los valores de latencia son anormales. ¿Alguien podría sugerir una solución a este problema? ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para la lectura anormal de latencia en la transmisión de video con gstreamer

    El problema que enfrenta el usuario está relacionado con la sincronización de los relojes entre el Khadas vim3 y el PC Ubuntu 16.04. Como el transmisor y el receptor se ejecutan en máquinas diferentes en la LAN, puede haber una diferencia en sus relojes del sistema. Incluso si el usuario intenta sincronizar el tiempo del PC con el Khadas SBC utilizando un servidor NTP, los valores de latencia siguen siendo anormales.

    Una solución a este problema es utilizar el Protocolo de Tiempo de Red (NTP) para sincronizar los relojes tanto del Khadas vim3 como del PC Ubuntu 16.04. Esto se puede lograr instalando el servicio NTP en ambos nodos y configurándolos para que se sincronicen con el mismo servidor NTP.

    Otra solución es utilizar el complemento de gstreamer clocksync para sincronizar los relojes del sistema del transmisor y el receptor. Este complemento alinea el reloj en tiempo real en el lado del emisor con el reloj PTS en el lado del receptor, lo que permite una medición precisa de la latencia.

    Los comandos modificados para el transmisor y el receptor pueden ser los siguientes:

    Transmisor (Khadas vim3)

    gst-launch-1.0 -v --gst-plugin-path={TU RUTA}/latency-clock v4l2src device=/dev/video0 ! video/x-raw,format=RGB,framerate=30/1,width=1920,height=1080 ! timeoverlay ! timestampoverlay ! videoscale ! videoconvert n-threads=1 ! x264enc tune=zerolatency bitrate=2048 speed-preset=superfast ! rtph264pay ! udpsink host={HOST_IP} port={PORT} ts-offset=0
    

    Receptor (PC)

    gst-launch-1.0 --gst-debug=timeoverlayparse:6 --gst-plugin-path={TU RUTA}/latency-clock -v udpsrc port={PORT} caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! timeoverlayparse ! fakesink sync=true ts-offset=0 clock-sync=2
    

    En los comandos anteriores, la opción ts-offset se establece en 0 para asegurarse de que el transmisor y el receptor comiencen al mismo tiempo. La opción clock-sync se establece en 2, lo que permite al complemento clocksync sincronizar los relojes del sistema de los nodos.

    Con estas modificaciones, los valores de latencia deberían ser precisos incluso cuando el transmisor y el receptor están en máquinas diferentes en la LAN.

    ¡Gracias!

Comments are closed.