Tengo problemas para transmitir videos H.264 a través de RTSP. El objetivo es transmitir en vivo una imagen de cámara a un cliente RTSP (idealmente un complemento de navegador al final). Esto ha funcionado bastante bien hasta ahora, excepto por un problema: el video se demorará en el inicio, tartamudeará cada pocos segundos y tendrá un retardo de ~ 4 segundos. Esto es malo.Streaming RTP/RTSP: problemas de sincronización/indicación de la hora
Nuestra configuración es para codificar con x264 (w/zerolatency & ultrarrápido) y se empaqueta en RTSP/RTP con libavformat desde ffmpeg 0.6.5. Para las pruebas, recibo la transmisión con una tubería GStreamer con gst-launch cuando me conecto a un servidor RTSP. Sin embargo,, he podido reproducir el mismo problema al transmitir directamente desde otra instancia de GStreamer con solo RTP.
máquina de envío:
gst-launch videotestsrc ! x264enc tune=zerolatency ! rtph264pay ! udpsink host=10.89.6.3
Recepción de la máquina:
gst-launch udpsrc ! application/x-rtp,payload=96 ! rtph264depay ! decodebin ! xvimagesink
También puede ejecutar estos tanto en la misma máquina, basta con cambiar el host a 127.0.0.1 en el remitente. En el extremo receptor, usted debe notar el tartamudeo y generalmente de vídeo bajo rendimiento, junto con las repetidas advertencias de la consola:
WARNING: from element /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0: A lot of buffers are being dropped.
Additional debug info:
gstbasesink.c(2875): gst_base_sink_is_too_late(): /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0:
There may be a timestamping problem, or this computer is too slow.
Una sugerido comúnmente "solución" que he visto en todo el Internet es utilizar sync=false
con xvimagesink:
gst-launch udpsrc ! application/x-rtp,payload=96 ! rtph264depay ! decodebin ! xvimagesink sync=false
el vídeo a continuación, reproduzca con una latencia casi inexistente, aun cuando se probó con nuestro software de la cámara. Esto es útil para las pruebas, pero no es muy útil para la implementación, ya que no funcionará con Totem, VLC o sus incrustaciones de complementos del navegador.
Me gustaría tratar de resolver el problema en la fuente; Sospecho que hay algún tipo de información de marca de tiempo que falta en la transmisión H.264 por x264 o tal vez en las cargas útiles de RTP. ¿Hay alguna manera de modificar el fuente gst pipeline para que yo haga no necesito usar sync=false
en el receptor?
Si eso no es posible, ¿cómo puedo decirle a los clientes (mediante SDP u otros) que la transmisión no debe sincronizarse? Finalmente, insertamos esto en el navegador utilizando un tipo de complemento VLC, por lo que una solución que funcionaría allí sería incluso mejor.
Gracias .. mismo problema, pero he dado "sync = false" en el lado del receptor y funcionó para mí. –