Hi @mchi,
I have been using deepstream container to do my experiments on deepstream. Yes, it supports multiple inputs with different sources.
For example this works, if that is what you are asking:
gst-launch-1.0 nvstreammux name=mux batch-size=2 width=1920 height=1080 ! nvinfer config-file-path=dstest2_pgie_config.txt ! nvstreamdemux name=demux filesrc location=/home/neil/use/streams/sample_720p.h264 ! h264parse ! nvv4l2decoder ! queue ! mux.sink_0 filesrc location=/home/neil/use/streams/sample_1080p.h264 ! h264parse ! nvv4l2decoder ! queue ! mux.sink_1 demux.src_0 ! queue ! nvvideoconvert ! nvdsosd ! nvvideoconvert ! videoconvert ! x264enc ! qtmux ! filesink location=./out3.mp4 demux.src_1 ! queue ! nvvideoconvert ! nvdsosd ! nvvideoconvert ! videoconvert ! x264enc ! qtmux ! filesink location=./out4.mp4
My actual motivation is to have the same path for the initial part of the pipeline(for different streams) then vary the pipeline depending on the stream id. So I am using nvdemux to separate the streams.
The pipeline I want to realise is:
uridecodebin → nvstreammux → nvinfer → nvstreamdemux name=demux demux → path1(stream1) demux → path2(stream2)
So the different cases where this worked:
1st
path1: → queue → nvconv → nvosd → nvconv → vc → x264enc → rtph → udp
path2: → queue → nvconv → nvosd → nvconv → vc → x264enc → rtph → udp
2nd
path1: → queue → nvconv → nvosd → nvconv → vc → x264enc → qtmux → filesink
path2: → queue → nvinfer(secondary classifier) → nvconv → nvosd → nvconv → vc → x264enc → rtph → udp
3rd
path1: → queue → nvconv → nvosd → msgconv → msgbroker
path2: → queue → nvconv → nvosd → msgconv → msgbroker
4th
path1: → queue → nvconv → nvosd → msgconv → msgbroker
path2: → queue → nvconv → nvosd → fakesink
The Cases where this did not work:
1st
path1: → queue → nvconv → nvosd → nvconv → vc → x264enc → rtph → udp
path2: → fakesink or → queue → fakesink
2nd
path1: → queue → nvconv → nvosd → nvconv → vc → x264enc → qtmux → filesink
path2: → fakesink or → queue → fakesink
3rd
path1: → queue → nvconv → nvosd → nvconv → vc → x264enc → rtph → udp
path2: → queue → nvconv → nvosd → msgconv → msgbroker
4th
path1: → queue → nvconv → nvosd → nvconv → vc → x264enc → qtmux → filesink
path2: → queue → nvconv → nvosd → msgconv → msgbroker
5th
path1: → queue → nvinfer(secondary classifier) → nvconv → nvosd → nvconv → vc → x264enc → rtph → udp
path2: → queue → nvconv → nvosd → msgconv → msgbroker
So 4th and 5th(did not work) are critical for my use case.
I had put a probe on the source pad of nvinfer(primary infer) so it displays the output for 1st few frames and then comes to a halt for the cases it does not work. So the frames are not
being consumed by path1 and path2 where it halts.
Is this pipeline restricted to some pipelines or there is some proper way to use nvdemux this?
Is there some other way to have a separate path in the pipeline depending on stream id?
Thanks.