Accessing `nvdsgst_multistream` from 7.0-samples-multiarch Docker container

Hello,

I have a DeepStream 7.0 application that runs directly on a L4T 36.3.0 Jetson AGX Orin. For portability and ease of use, I’d like to move the application to be run inside a Docker container.

To do this, I’ve pulled and run the 7.0-samples-multiarch image from DeepStream | NVIDIA NGC. However, when I run my application inside the container, I get the following error:

root@ORIN:/opt/nvidia/deepstream/deepstream-7.0# ./app
[2024-12-05T16:49:09Z INFO  app] Starting app, hostname: Default
thread 'main' panicked at app/src/main.rs:107:6:
Failed to create app: Failed to create processing pipeline

Caused by:
    0: failed to make nvstreammux
    1: Gstreamer couldn't make element nvstreammux
    2: Failed to find element factory with name 'nvstreammux' for creating element

Running gst-inspect-1.0 inside the container gives:

root@ORIN:/opt/nvidia/deepstream/deepstream-7.0# gst-inspect-1.0 | grep nv | grep mux
nvdsgst_metamux:  nvdsmetamux: meta muxer

However, running the same command outside the container correctly identifies the missing plugin, nvdsgst_multistream:

2024-12-05T16:37:43+0000 root@ORIN:/home/root $ gst-inspect-1.0 | grep nv | grep mux
nvdsgst_metamux:  nvdsmetamux: meta muxer
nvdsgst_multistream:  nvstreamdemux: Stream demultiplexer
nvdsgst_multistream:  nvstreammux: Stream multiplexer

So it looks like nvsgst_multistream is accessible from the docker image. I’ve tried running /opt/nvidia/deepstream/deepstream-7.0/user_additional_install.sh inside the image, but still get the same error.

It does appear to be present in the Gstreamer plugins directory, just blacklisted:

root@ORIN:/opt/nvidia/deepstream/deepstream-7.0# ls /usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_multistream.so
/usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_multistream.so
...
root@ORIN:/opt/nvidia/deepstream/deepstream-7.0# gst-inspect-1.0 -b
Blacklisted files:
  libcustom2d_preprocess.so
  libnvdsgst_inferserver.so
  libnvdsgst_multistream.so
  libnvdsgst_nvmultiurisrcbin.so
  libnvdsgst_udp.so

Total count: 5 blacklisted files
...
root@ORIN:/opt/nvidia/deepstream/deepstream-7.0# gst-inspect-1.0 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_multistream.so

(gst-inspect-1.0:1360): GStreamer-WARNING **: 17:08:26.061: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_multistream.so': libgstnvdsseimeta.so.1.0.0: cannot open shared object file: No such file or directory
Could not load plugin file: Opening module failed: libgstnvdsseimeta.so.1.0.0: cannot open shared object file: No such file or directory

Also, I know my application uses nvvideo4linux2, but this appears to be fully missing from the docker image, even after ./user_additional_install.sh:

root@ORIN:/opt/nvidia/deepstream/deepstream-7.0# gst-inspect-1.0 | grep nvvideo4linux2

(gst-plugin-scanner:597): GStreamer-WARNING **: 17:31:03.910: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_nvmultiurisrcbin.so': libgstnvcustomhelper.so: cannot open shared object file: No such file or directory

(gst-plugin-scanner:597): GStreamer-WARNING **: 17:31:04.009: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_inferserver.so': libtritonserver.so: cannot open shared object file: No such file or directory

(gst-plugin-scanner:597): GStreamer-WARNING **: 17:31:04.038: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_udp.so': librivermax.so.0: cannot open shared object file: No such file or directory
...
root@ORIN:/opt/nvidia/deepstream/deepstream-7.0# find /* -name libgstnvvideo4linux2.so

How do I access these plugins in my Docker image?

Unlike x86, on Jetson, Docker shares some libraries with the host, including BSP/CUDA, etc.

Can you share the command line to start docker, or try the following command line

docker run -it --rm --net=host --runtime nvidia  -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-7.0 -v /tmp/.X11-unix/:/tmp/.X11-unix nvcr.io/nvidia/deepstream:7.0-triton-multiarch

@junshengy I was able to get the applications running by manually linking in all the missing libraries, but is there an official/maintained list of which plugins are expected to be shared between the docker image and the host? I want to remove all the DeepStream libraries from my host and keep them inside the docker image

Please do not do this. Many of these libraries are userspace drivers.

Copying these libraries to a docker image will not allow the docker image to run on different versions of Jetpack.

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