The deepstream app inside the container does not give me any video displayed as result. When trying to export to a video file, the file seems corrupted.
I properly gave the access to the display to the container (xhost +, -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix).
Then, I tried to display a video with this very basic gstreamer pipeline: gst-launch-1.0 videotestsrc ! xvimagesink
result: erroneous pipeline: no element "xvimagesink"
When I look at /usr/lib/aarch64-linux-gnu/gstreamer-1.0/ in the container, there isn’t the libraries: libgstximagesink.so, libgstxvimagesink.so and many more such as libgstximagesrc.so
I tried to installed all the missing libraries with: apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools
But it says that everything is up-to-date.
On the nvcr.io/nvidia/l4t-base:r32.3.1 docker image the pipeline gst-launch-1.0 videotestsrc ! xvimagesink is successfully displayed. I used to work a lot with l4t-base on several versions, I never had any gstraemer problem.
Are the images deepstream-l4t really bugged?
How may I have a full gstreamer install inside my image?
I may have found one of my problems: when my Jetson Nano is connected to my screen with DisplayPort, DeespStream results are not displayed (no video, only terminal); When connected to with HDMI, the output is correctly displayed. So DiplayPort seems to not be handled by DeepStream.
Every other application that are running on my nano have no trouble to be displayed with DP.
We will check the docker image. But deepstream-l4t is for deepstreamsdk and the preferred video sink is nveglglessink. If you want to use jetpack4.4, l4t-base is the correct docker image.
In order ot make nveglglessink work in the deepstream-l4t, I have to add the option: --network=host
Is it normal?
Otherwise I have the error:
nvbuf_utils: Could not get EGL display connection
nvbufsurftransform: Could not get EGL display connection
...
Using winsys: x11
ERROR: Pipeline doesn't want to pause.
Got context from element 'eglglessink0': gst.egl.EGLDisplay=context, display=(GstEGLDisplay)NULL;
Setting pipeline to NULL ...
So my run cmd is: docker run --rm --runtime=nvidia --network=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix -it nvcr.io/nvidia/deepstream-l4t:5.0.1-20.09-base /bin/bash
and the cmd launched afterward: gst-launch-1.0 videotestsrc ! nveglglessink
As I wrote in two of my posts, I did add “-e DISPLAY=$DISPLAY” to my docker command.
As I wrote in my first post, xhost + is run before. It is launched at startup so I am sure it is done before.
I know it’s weird, but as I said, nveglglessink is working only if I add --network=host.
Try the cmd I wrote in my previous post to see it.
So either the solution would do for me.
1.) running xvimagesink in the container
2.) Try to find the solution for displaying “nveglglessink” through ssh-X11Forward (suspected that install VirtualGL would do for this, but I haven’t tried to compile and run on jetson nano).
I don’t know your use case, but maybe you may display on a screen connected to the nano instead of displaying on your PC with a X11 forward. To do so, after being connected through ssh without X11 forward, just do:
export DISPLAY=:0
Then every X11 app launched through that ssh connection will be displayed on the nano screen.
Hope this trick can help you.
It is just happened that I don’t have the HDMI screen for the headless nano.
So I want to display the result on the screen of my laptop.
Maybe it is time for me to buy one $$$.