Jitter started after moving to NvUrisrcbin

Please provide complete information as applicable to your setup.

• Hardware Platform (GPU- A5000)
• DeepStream Version 6.3

When using uridecodebin with UDP, we experienced significant jitter in the camera feed. However, switching to TCP using .set_property("protocols", GstRtsp.RTSPLowerTrans.TCP) eliminated the jitter.

To implement RTSP reconnect, we transitioned to nvurisrcbin, a wrapper around uridecodebin. Despite using the same property setting, we encountered significant jitter again. We also tried set_property("select-rtp-protocol", 4), but it did not resolve the jitter issue.

We are seeking a solution to eliminate the jitter while utilizing nvurisrcbin with RTSP reconnect.

Screenshot-20240603142657-673x283

  1. please increase nvurisrcbin’s latency to 2000, then have a try.
  2. if still have issue, you can dump and compare the two media pipeline by this method.

Tried the latency , no change in jitter.

comparing pipelines now, any other things to try?

could you share the two pipeline graphs? Thanks!

Thanks for the reply, here are the pipeline graphs

Nvurisrcbin

uridecoebin

Thanks for the sharing! the graphs are not clear. could you share the zip files?

graphs.zip (767.1 KB)
added zip file here
thanks

besides select-rtp-protocol, what other parameters did you set for urisrcbin? Since uridecodebin has on protocols, how did you set this parameter?

  1. to narrow down this issue, please this simplified command-line to check if the output is good.
gst-launch-1.0 -v nvurisrcbin uri=rtsp://"rtsp address" select-rtp-protocol=4 latency=2000 ! nveglglessink
  1. if the output video in the step1 is not fine. please share the 1.log after doing the following test.
export GST_DEBUG=3,rtpjitterbuffer:6,v4l2videodec:6 && gst-launch-1.0 -v nvurisrcbin uri=rtsp://"rtsp address" select-rtp-protocol=4 latency=2000 ! nveglglessink >1.log 2>1.log

Note: Ran these commands on different machine on same network.

  • There is jitter when using the first command, Amount of jitter is less compared to when run in Pipeline
  • Adding the log file here
    1.log (120.3 KB)

When Ran on same machine with X-server, failed to get feed. (This is the production machine, where the camera is working without jitter when uridecodebin is used)

This is the output

Setting pipeline to PAUSED ...
libEGL warning: DRI3: failed to query the version
libEGL warning: DRI2: failed to authenticate
Pipeline is live and does not need PREROLL ...
Got context from element 'eglglessink0': gst.egl.EGLDisplay=context, display=(GstEGLDisplay)NULL;
Progress: (open) Opening Stream
Progress: (connect) Connecting to rtsp://xxxxxxxxxxxxxxx
ERROR: from element /GstPipeline:pipeline0/GstDsNvUriSrcBin:dsnvurisrcbin0/GstRTSPSrc:src: Could not open resource for reading and writing.
Additional debug info:
gstrtspsrc.c(7893): gst_rtspsrc_retrieve_sdp (): /GstPipeline:pipeline0/GstDsNvUriSrcBin:dsnvurisrcbin0/GstRTSPSrc:src:
Failed to connect. (Generic error)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

Properties

For Nvurisrcbin

 uri_decode_bin = Gst.ElementFactory.make("nvurisrcbin", "uri-decode-bin")
 uri_decode_bin.set_property("rtsp-reconnect-interval", 20)
 uri_decode_bin.set_property("select-rtp-protocol", 4)
 uri_decode_bin.set_property("latency", 2000)

When using uridecodebin

uri_decode_bin = Gst.ElementFactory.make("uridecodebin", "uri-decode-bin")
uri_decode_bin.set_property("uri", uri)
uri_decode_bin.connect("pad-added", cb_newpad, nbin)
uri_decode_bin.connect("child-added", decodebin_child_added, nbin, drop_frame_rate)

def decodebin_child_added(child_proxy, Object, name, user_data, drop_frame_rate):
    if(name.find("decodebin") != -1):
        Object.connect("child-added", decodebin_child_added, user_data, drop_frame_rate)
    if(name.find("nvv4l2decoder") != -1):
        Object.set_property("drop-frame-interval", drop_frame_rate)
    
    if "source" in name:
        source_element = child_proxy.get_by_name("src")
        if source_element.find_property('protocols') != None:
            Object.set_property("protocols", GstRtsp.RTSPLowerTrans.TCP)
  1. does the jitter you said mean mosaic? is it good as using uridecodebin? is the mount of jitter acceptable?
  2. from the code above, did not you set drop-frame-interval when using nvurisrcbin? please set it for nvurisrcbin because drop-frame-interval will lead frame reduction. then test the pipeline again.
  3. if the output still has jitter, please provide the new log 2.log by the following steps. you can zip the log if the log is too big. please also monitor the CPU/GPU utilization. Thanks!
1> export GST_DEBUG=6
2> run the pipeline with nvurisrcbin and redirect the log to a file. for example. app >2.log 2>2.log.