Deepstream app runtime source add with rtspsink using nvmultiurisrcbin

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson / GPU) : GPU
• DeepStream Version : 6.4
• JetPack Version (valid for Jetson only)
• TensorRT Version : 8.6.01
• NVIDIA GPU Driver Version (valid for GPU only) : 545.23.08
• Issue Type( questions, new requirements, bugs) : Question
• How to reproduce the issue ? (This is for bugs. Including which sample app is using, the configuration files content, the command line used and other details for reproducing)

  1. I am using deepstream-app with nvmultiurisrcbin. I have added 4 rtsp urls initally with num-source-bins=4. I have put max-batch-size=20. I have also added 8 rtsp sinks to stream the output for every source.
  2. When I am running the app, rtsp streams are coming to 4 sinks. But when I add new rtsp source using rest API , new rtsp sink is not getting created. If I use tiler with eglsink, I am able to see new src getting added and output displayed on screen. How to resolve this?
  3. How to dynamically/in runtime create/remove sink when new source is added using nvmultiurisrcbin?

Below is the app config:

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5


[tiled-display]
enable=0
rows=4
columns=5
width=1920
height=1080
gpu-id=0
nvbuf-memory-type=0


[source-list]
num-source-bins=4
list=rtsp://admin:Admin%4012345@192.168.241.52:554/1/1;rtsp://admin:Admin%4012345@192.168.241.53:554/1/1;rtsp://admin:Admin%4012345@192.168.241.55:554/1/1;rtsp://admin:Admin%4012345@192.168.241.57:554/1/1
use-nvmultiurisrcbin=1
stream-name-display=1
#sensor-id-list vector is one to one mapped with the uri-list
#identifies each sensor by a unique ID
sensor-id-list=cctv_52;cctv_53;cctv_55;cctv_57
sensor-name-list=cctv_52;cctv_53;cctv_55;cctv_57
max-batch-size=20
http-ip=localhost
http-port=9000
#sgie batch size is number of sources * fair fraction of number of objects detected per frame per source
#the fair fraction of number of object detected is assumed to be 4
#sgie-batch-size=16
#Set the below key to keep the application running at all times

[source-attr-all]
enable=1
type=4
num-sources=1
num-extra-surfaces=10
gpu-id=0
cudadec-memtype=0
latency=200
rtsp-reconnect-interval-sec=60
rtsp-reconnect-attempts=5

[sink0]
enable=1
type=1
sync=0
gpu-id=0
nvbuf-memory-type=0

[sink1]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=0
source-id=0
gpu-id=0
sync=0
bitrate=4000000    
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
# set profile only for hw encoder, sw encoder selects profile based on sw-preset
profile=0
# set below properties in case of RTSPStreaming
#link-to-demux=1
rtsp-port=8554
udp-port=5400

[sink2]
enable=1
type=4
codec=1
enc-type=0
source-id=2
gpu-id=0
sync=0
bitrate=4000000    
profile=0
#link-to-demux=1
rtsp-port=8560
udp-port=5406


[sink3]
enable=1
type=4
codec=1
enc-type=0
source-id=2
gpu-id=0
sync=0
bitrate=4000000    
profile=0
#link-to-demux=1
rtsp-port=8559
udp-port=5405


[sink4]
enable=1
type=4
codec=1
enc-type=0
source-id=1
gpu-id=0
sync=0
bitrate=4000000    
profile=0
#link-to-demux=1
rtsp-port=8555
udp-port=5401

[sink5]
enable=1
type=4
codec=1
enc-type=0
source-id=2
gpu-id=0
sync=0
bitrate=4000000    
profile=0
#link-to-demux=1
rtsp-port=8556
udp-port=5402

[sink6]
enable=1
type=4
codec=1
enc-type=0
source-id=3
gpu-id=0
sync=0
bitrate=4000000    
profile=0
#link-to-demux=1
rtsp-port=8557
udp-port=5403

[sink7]
enable=1
type=4
codec=1
enc-type=1
source-id=4
gpu-id=0
sync=0
bitrate=4000000    
profile=0
#link-to-demux=1
rtsp-port=8558
udp-port=5404

[osd]
enable=1
gpu-id=0
border-width=2
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0
display-text=1

[streammux]
gpu-id=0
live-source=1
buffer-pool-size=20
batch-size=20
batched-push-timeout=40000
width=1920
height=1080
enable-padding=0
nvbuf-memory-type=0

[primary-gie]
enable=1
gpu-id=0
bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=0
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_PeopleNet.txt


[tracker]
enable=1
# For NvDCF and NvDeepSORT tracker, tracker-width and tracker-height must be a multiple of 32, respectively
tracker-width=960
tracker-height=544
ll-lib-file=/opt/nvidia/deepstream/deepstream/lib/libnvds_nvmultiobjecttracker.so
# ll-config-file required to set different tracker types
# ll-config-file=config_tracker_IOU.yml
# ll-config-file=config_tracker_NvSORT.yml
# ll-config-file=config_tracker_NvDCF_perf.yml
# ll-config-file=config_tracker_NvDCF_accuracy.yml
ll-config-file=config_tracker_NvDeepSORT.yml
gpu-id=0
display-tracking-id=1

[tests]
file-loop=0

The deepstream-app does not support dynamically generate sink with nvstreamdemux. It is no use to set more sinks than needed in the configuration file.

You need to implement by yourself. To request new src pad from nvstreamdemux after the new source has been added to the nvstreammux new sink pad. It is a normal pad add/remove operation in GStreamer. Don’t forget to set the elements in proper state when you operate on the pads. GStreamer: open source multimedia framework

Thank you for the reply @Fiona.Chen. It will be quite helpful if you can point to an example or guide.

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

The pad add/remove is just normal GStreamer pad operations. You can refer to deepstream_reference_apps/runtime_source_add_delete at master · NVIDIA-AI-IOT/deepstream_reference_apps (github.com) for how to dynamically add/remove elements in PLAYING pipeline.

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