How to enable and test IPC buffer sharing between VST and DeepStream?

We are testing JPS on:

  • HW: Nvidia Jetson AGX Orin
  • Jetpack: 7.0

VST and deepstream-ipc-test works, but there is no guideline to check feature of sharing IPC buffer as mentioned in JPS intro (VST — Jetson Platform Services documentation).

Your helps are really appreciated.

Here is the config for IPC between VST and DeepStream: VST Config — Jetson Platform Services documentation. Are you meet any issue with the feature?

1 Like

Thank you for pointing out two settings for ipc.

It seems that I still cannot enable that feature:

  • HW: Nvidia Jetson AGX Orin
  • Jetpack: 7.0
  • vst image: nvcr.io/nvidia/jps/vst:1.3.0-24.08.1-aarch64
  • vst_config.json: defaulf file in vst image file, with following changes:
    “enable_ipc_path”: true,
    “ipc_socket_path”: “/tmp/”,

    “gpu_indices” : [0],

I have a few questions:

  1. I expect a socket path is created in /tmp, but it seems there is no new file is created in /tmp when vst is running, and what socket name should it be?
  2. If DS microservice wants to use IPC, it should also map the local /tmp to docker container when running?
  3. (Not related to IPC - I might create new topic if necessary) can VST use the iGPU and build-in encoder/decoder of AGX Orin? they are all offline when VST microservice is running. I tried with “gpu_indices” : [0].

Thank you

-------- docker-compose.yml ---------------
services:
vst:
image: nvcr.io/nvidia/jps/vst:1.3.0-24.08.1-aarch64
user: “0:0”
runtime: nvidia
container_name: vst
entrypoint: sh -c ‘/opt/vst_release/launch_vst --debug-level 3 2>&1 | tee -a /opt/vst_release/webroot/log/vst.log’
environment:
- ADAPTOR=vst_rtsp
volumes:
- ./default_vst_config.json:/opt/vst_release/configs/vst_config.json
- /usr/lib/aarch64-linux-gnu/nvidia/:/usr/lib/aarch64-linux-gnu/tegra/
- /tmp/:/tmp/

----------- some logs info --------------------------------
[2025-3-17T8:28:30.694Z:281473481041344:fs_utils.cpp:265: createDir] Creating dir_path: /home/vst/vst_release/streamer_videos/
GPU INDEX: 0
Host HTTP port: 30000
Recorded Video Root: /opt/store/video

enable_grpc: 0
grpc_server_port: 50051
webrtc_in_audio_sender_max_bitrate: 128000
webrtc_in_video_degradation_preference: resolution
enable_websocket_pingpong: 0
websocket_keep_alive_ms: 5000
webrtc_in_video_sender_max_framerate: 30
gpu_indices: 0
Remote VST address:
Enable latency logging: 1
WebRTC Out Encode Fallback Mechanism (software/pass_through): software
Enable IPC Path: 1
IPC Socket Path: /tmp/
IPC Src Buffer Timestamp Copy: 1
IPC Src Connection Attempts: 5
IPC Src Connection Interval: 1000000
IPC Sink Buffer Timestamp Copy: 1
IPC Sink Buffer Copy: 1
Use Webrtc HW decoder: 1
Enable frame drop in Stream Recorder: 1
Max frame queue size in Stream Recorder: 16000000
analytic_server_address: http://:30080/emdx
webrtc_out_enc_quality_tuning (ultra_low_latency / low_latency / high_quality): ultra_low_latency
webrtc_out_enc_preset(ultra_fast / fast / slow): ultra_fast
enable drc: 1
Enable loopback multicast: 0

[2025-3-17T8:28:30.695Z:281473481041344:utils.cpp:1147: setRecvMaxSocketBufferSize] Setting OS’s socket receive max buffer size to = 1000000
sysctl: cannot stat /proc/sys/net/core/rmem_max: No such file or directory
[2025-3-17T8:28:30.698Z:281473481041344:utils.cpp:1158: setSendMaxSocketBufferSize] Setting OS’s socket send max buffer size to = 1000000
sysctl: cannot stat /proc/sys/net/core/wmem_max: No such file or directory

(gst-plugin-scanner:28): GStreamer-WARNING **: 08:28:31.200: adding type GstEvent multiple times
[2025-3-17T8:28:31.946Z:281473481041344:Main.cpp:184: main] g_main_loop is running now
[2025-3-17T8:28:31.949Z:281473481041344:redis_subscriber.cpp:180: redisInit] Redis Subscriber Connect failed. Exiting
[2025-3-17T8:28:31.949Z:281473481041344:server.cpp:290: VmsServer] #### VST version: 1.3.0-24.08.1 ####
[2025-3-17T8:28:31.949Z:281473481041344:utils.cpp:2213: detectGPU] ############## GPU ID DETECTED = 0 ##############
[2025-3-17T8:28:31.949Z:281473481041344:utils.cpp:2214: detectGPU] ############## GPU Device = ##############
[2025-3-17T8:28:31.949Z:281473481041344:server.cpp:83: initialize] Host Ip = 172.21.0.3
[2025-3-17T8:28:31.950Z:281473481041344:adaptor_loader.cpp:145: loadAdaptor] device_manager->name:vst_rtsp
[2025-3-17T8:28:31.950Z:281473481041344:adaptor_loader.cpp:161: loadAdaptor] Loading control adaptor: prebuilts/arch/rtsp_streams.so

I think the IPC feature on JPS isn’t full tested. Why you must use the feature in your project?

we want to minimize DS loader processing time: RTSP – VST – IPC – DS seems to be a shortcut compared to RTSP – VST — RTSP — DS.

Are you check the performance bottleneck of your use case? Can you share more on your use case?

we are exploring new features of JPS with provided samples to understand what it can and can’t do.