Does using `nvstreamdemux` cause performance issues?

Please provide complete information as applicable to your setup.

• Hardware Platform (GPU)
• DeepStream Version 7.0
• TensorRT Version 8.6.1
• NVIDIA GPU Driver Version (535)

I was using nvstreamdemux to get multiple rtsp out for all my sources. But I saw that without nvstreamdemux I was getting a perf value close to 18*14 (18FPS for 14 sources), but when I added nvstreamdemux, it got down to 6*14 (6FPS for 14 sources). Is this the expected behaviour?

sample code:

    streammux.link(queue1)
    queue1.link(pgie)
    pgie.link(queue2)
    queue2.link(tracker)
    tracker.link(queue3)
    queue3.link(sgie1)
    sgie1.link(queue4)
    queue4.link(sgie2)
    sgie2.link(queue5)
    queue5.link(sgie3)
    sgie3.link(queue6)
    queue6.link(nvanalytics)
    nvanalytics.link(queue7)
    queue7.link(nvstreamdemux)

    for i in range(number_sources):
        # tiler = make_element("nvmultistreamtiler", i)

        # tiler_rows=int(math.sqrt(number_sources))
        # tiler_columns=int(math.ceil((1.0*number_sources)/tiler_rows))
        # tiler.set_property("rows",tiler_rows)
        # tiler.set_property("columns",tiler_columns)
        # tiler.set_property("width", TILED_OUTPUT_WIDTH)
        # tiler.set_property("height", TILED_OUTPUT_HEIGHT)

        # pipeline.add(tiler)

        nvvidconv = make_element("nvvideoconvert", i)

        pipeline.add(nvvidconv)

        nvosd = make_element("nvdsosd", i)

        nvosd.set_property('process-mode',OSD_PROCESS_MODE)
        nvosd.set_property('display-text',OSD_DISPLAY_TEXT)

        pipeline.add(nvosd)

        nvvidconv_postosd = make_element("nvvideoconvert", i+number_sources)

        pipeline.add(nvvidconv_postosd)

        encoder = make_element("nvv4l2h264enc", i)
        encoder.set_property("tuning-info-id",1)

        pipeline.add(encoder)

        sink = make_element("rtspclientsink", i)
        sink.set_property("location",f"rtsp://0.0.0.0:8554/ds-test-{i}")
        sink.set_property("latency", 0)
        sink.set_property("protocols",GstRtsp.RTSPLowerTrans.TCP)

        pipeline.add(sink)

        queue = make_element("queue", i)
        pipeline.add(queue)

        padname = "src_%u" % i
        demuxsrcpad = nvstreamdemux.request_pad_simple(padname)

        if not demuxsrcpad:
            sys.stderr.write("Unable to create demux src pad \n")

        queuesinkpad = queue.get_static_pad("sink")
        if not queuesinkpad:
            sys.stderr.write("Unable to create queue sink pad \n")
        demuxsrcpad.link(queuesinkpad)

        # queue.link(tiler)
        queue.link(nvvidconv)
        nvvidconv.link(nvosd)
        nvosd.link(nvvidconv_postosd)
        nvvidconv_postosd.link(encoder)
        encoder.link(sink)


Also, is how can I implement the same, but instead of having 1 rtsp out for each source, how can I have a total of 2 rtsp out(7 and 7 for 14 sources) with nvmultistreamtiler?

  1. could you share the whole media pipeline? which sample are you testing or referring to? which plugin’s probe function did you put update_fps in? can you use deepstream_demux_multi_in_multi_out.py which will use nvstreamdemux to reproduce this issue?
  2. why not use one tiler for all sources? there is another solution. you can use nvstreamdemux + nvstreammux+ tiler to show 7 sources. then use another nvstreamdemux + nvstreammux+ tiler to show other 7 sources.

There is no update from you for a period, assuming this is not an issue anymore. Hence we are closing this topic. If need further support, please open a new one. Thanks

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.