Headless Jetson Nano with custom built Linux: gstreamer fails with nvbuf_utils error

I have a custom built filesystem (not using nVidia’s dev Ubuntu image). I have cross compiled all the gstreamer modules that came with Jetpack.

I have a USB camera attached and a basic read into a fake sink appears to be working fine. gst-launch-1.0 v4l2src device=/dev/video1 ! 'image/jpeg,format=MJPG,width=1920,height=1080,framerate=30/1' ! jpegdec ! fakesink

When I try to encode using omxh264enc:
gst-launch-1.0 v4l2src device=/dev/video1 ! 'image/jpeg,format=MJPG,width=1920,height=1080,framerate=30/1' ! jpegdec ! omxh264enc bitrate=8000000 ! fakesink

I get this error:

nvbuf_utils: Could not get EGL display connection
nvbuf_utils: ERROR getting proc addr of eglCreateImageKHR
nvbuf_utils: ERROR getting proc addr of eglDestroyImageKHR

I’m not sure whether I have ALL the nVidia drivers etc in my custom built filesystem, but I have these:
lsmod: nvgpu is loaded

Where do I even begin debugging this?

I found out that I was missing /usr/share/glvnd/egl_vendor.d/10_nvidia.json. I added it and that fixed the Could not get EGL display connection error, but now I get a new error.

libgstnveglglessink.so: undefined symbol: GstEglJitterToolSetShow

I can’t find any reference to GstEglJitterToolSetShow. Can someone please tell me which library I’m missing?

Please refer to
Headless Jetson - #3 by DaneLLL

You can make sure if nvgpu driver is not removed.

Hi DaneLLL,

Thank you for the response. My problem was missing /usr/share/glvnd/egl_vendor.d/10_nvidia.json file. I added the file and the video encoding via OMX appears to be working as expected.

This command works for me:

gst-launch-1.0 v4l2src device=/dev/video1 ! 'image/jpeg,format=MJPG,width=1920,height=1080,framerate=30/1' ! jpegdec ! omxh265enc bitrate=8000000 ! h265parse ! qtmux ! filesink location=test.mp4 -e

1st question:
However, when I change filesink to fakesink, I get the libgstnveglglessink.so: undefined symbol: GstEglJitterToolSetShow error, and I would like to understand why.

2nd question:
I have not tried nvarguscamerasrc. What is the difference between nvarguscamerasrc and v4l2src? Is there any performance difference between them? If I use CSI camera, will one be more efficient than the other?

3rd question:
I’m running Jetpack 4.3, and I don’t see nvarguscamerasrc included anywhere in Jetpack. Where can I find the source for nvarguscamerasrc so I can cross compile it? If nVidia only supplies binaries, where can I find the binary?

Please check if you have this prebuilt lib:


Thecnvarguscamerasrc plugin is for Bayer sensors. The v4l2src plugin is for YUV sensors and USB cameras, and any device which can do capture through v4l2 interface.

You may shre brand and model ID of your camera so that we can suggest use which plugin. We also have camera partners working on camera modules. Please check
Jetson Ecosystem | NVIDIA Developer

When I use libgstnveglglessink.so built from source from libgstnvvideosinks_src.tbz2, I get this error: undefined symbol: GstEglJitterToolSetShow.

When I use nVidia’s pre-built libgstnveglglessink.so from nvidia-l4t-gstreamer_32.3.1-20191209225816_arm64.deb, I get this error: libwayland-client.so.0: cannot open shared object file: No such file or directory.
Also, the pre-built ‘libgstnvcompositor.so’ gives this error: libgstbadvideo-1.0.so.0: cannot open shared object file: No such file or directory.

Why do I need wayland? The device is headless.

Edit: I’ve cross compiled wayland and no longer get the libwayland-client.so.0 error, but I still can’t figure out how to get libgstbadvideo-1.0.so.0.

By default we have X11 and certain plugins are implemented for rendering frames through X11. Also Wayland is supported in nveglglessink plugin. In headless mode you would still need the prebuilt libs although don’t use them. Please use the default libgstnveglglessink.so and include the libs:

nvidia@nvidia-desktop:/usr/lib/aarch64-linux-gnu/gstreamer-1.0$ ldd libgstnveglglessink.so
        linux-vdso.so.1 (0x0000007fa5667000)
        libEGL.so.1 => /usr/lib/aarch64-linux-gnu/libEGL.so.1 (0x0000007fa5565000)
        libGLESv2.so.2 => /usr/lib/aarch64-linux-gnu/libGLESv2.so.2 (0x0000007fa552f000)
        libgstnvegl-1.0.so.0 => /usr/lib/aarch64-linux-gnu/libgstnvegl-1.0.so.0 (0x0000007fa551b000)
        libwayland-client.so.0 => /usr/lib/aarch64-linux-gnu/libwayland-client.so.0 (0x0000007fa54fe000)
        libwayland-egl.so.1 => /usr/lib/aarch64-linux-gnu/libwayland-egl.so.1 (0x0000007fa54ec000)
        libglib-2.0.so.0 => /usr/lib/aarch64-linux-gnu/libglib-2.0.so.0 (0x0000007fa53dd000)
        libgobject-2.0.so.0 => /usr/lib/aarch64-linux-gnu/libgobject-2.0.so.0 (0x0000007fa537f000)
        libgstbase-1.0.so.0 => /usr/lib/aarch64-linux-gnu/libgstbase-1.0.so.0 (0x0000007fa5308000)
        libgstreamer-1.0.so.0 => /usr/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0 (0x0000007fa51d8000)
        libgstvideo-1.0.so.0 => /usr/lib/aarch64-linux-gnu/libgstvideo-1.0.so.0 (0x0000007fa5144000)
        libX11.so.6 => /usr/lib/aarch64-linux-gnu/libX11.so.6 (0x0000007fa501b000)
        libcuda.so.1 => /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1 (0x0000007fa40d8000)
        libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000007fa40c3000)
        libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007fa4097000)
        librt.so.1 => /lib/aarch64-linux-gnu/librt.so.1 (0x0000007fa4080000)
        libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007fa3fc7000)
        libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fa3e6e000)
        libGLdispatch.so.0 => /usr/lib/aarch64-linux-gnu/libGLdispatch.so.0 (0x0000007fa3d42000)
        /lib/ld-linux-aarch64.so.1 (0x0000007fa563b000)
        libffi.so.6 => /usr/lib/aarch64-linux-gnu/libffi.so.6 (0x0000007fa3d2a000)
        libpcre.so.3 => /lib/aarch64-linux-gnu/libpcre.so.3 (0x0000007fa3cb8000)
        libgmodule-2.0.so.0 => /usr/lib/aarch64-linux-gnu/libgmodule-2.0.so.0 (0x0000007fa3ca4000)
        liborc-0.4.so.0 => /usr/lib/aarch64-linux-gnu/liborc-0.4.so.0 (0x0000007fa3c2b000)
        libxcb.so.1 => /usr/lib/aarch64-linux-gnu/libxcb.so.1 (0x0000007fa3bfb000)
        libnvrm_gpu.so => /usr/lib/aarch64-linux-gnu/tegra/libnvrm_gpu.so (0x0000007fa3bb7000)
        libnvrm.so => /usr/lib/aarch64-linux-gnu/tegra/libnvrm.so (0x0000007fa3b74000)
        libnvrm_graphics.so => /usr/lib/aarch64-linux-gnu/tegra/libnvrm_graphics.so (0x0000007fa3b54000)
        libnvidia-fatbinaryloader.so.440.18 => /usr/lib/aarch64-linux-gnu/tegra/libnvidia-fatbinaryloader.so.440.18 (0x0000007fa3ae5000)
        libXau.so.6 => /usr/lib/aarch64-linux-gnu/libXau.so.6 (0x0000007fa3ad2000)
        libXdmcp.so.6 => /usr/lib/aarch64-linux-gnu/libXdmcp.so.6 (0x0000007fa3abd000)
        libnvos.so => /usr/lib/aarch64-linux-gnu/tegra/libnvos.so (0x0000007fa3a9f000)
        libbsd.so.0 => /lib/aarch64-linux-gnu/libbsd.so.0 (0x0000007fa3a7d000)

NVIDIA gstreamer libs are listed in