No xvimagesink on deepstream-l4t

Hi,
It seems that gstreamer can not be fully installed on the l4t deepstream image.

I’m working on a Jetson nano, Jetpack 4.4 with the docker images: nvcr.io/nvidia/deepstream-l4t:5.0.1-20.09-base and the “sample” one.

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.

Thak you Fiona for your answer on Christmas Eve!

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

No. I don’t think network has anything to do with it. You may add “-e DISPLAY=$DISPLAY” with your docker command

make sure before you run docker, run xhost + first.

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.

Hello,

Have you checked the docker image?
I also have the issue in nvcr.io/nvidia/l4t-base:r32.5.0 where I cannot find xvimagesink.

Per your solution on “nveglglessink”. I cannot use it as I am using SSH-X11Forward into the jetson nano and the GL windows cannot foward though ssh.

Host machine [Ubuntu] >> Jetson Nano [Jetpack 4.5.1] >> Container [l4t-base]
($Display here) (xvimagesink here)

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).

Thanks

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.

Thank you very much for your reply.

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 $$$.

Anyway, thanks for the advice.

A bit late, but I think I found the solution to this… At least on the image “nvcr.io/nvidia/l4t-base:r32.5.0

$ apt install gstreamer1.0-x

This will allow you to use “videoconvert ! xvimagesink”

1 Like

As I wrote in my first post I had no problem with nvcr.io/nvidia/l4t-base:r32.3.1, the problem concerns de deepstream image for tegra: nvcr.io/nvidia/deepstream-l4t:5.0.1-20.09-base

Ok. Tested.

Please check it out. The solution is also worked for your deepstream image; nvcr.io/nvidia/deepstream-l4t:5.0.1-20.09-base.
$ apt update; apt install gstreamer1.0-x

$ gst-launch-1.0 videotestsrc ! xvimagesink

FYI:

$ docker run --runtime nvidia -it --net host --env DISPLAY=$DISPLAY -v $HOME/.Xauthority:/root/.Xauthority --volume /tmp/argus_socket:/tmp/argus_socket --device /dev/video0 nvcr.io/nvidia/deepstream-l4t:5.0.1-20.09-base /bin/bash

The docker run command might be a bit complicated, but it works fine through SSH-Forward with headless setup (no screen attached).

2 Likes