Nvcodec gstreamer with this nvcr.io/nvidia/deepstream:6.2-devel docker image

Hello,

I have two problems with this docker :

When i build ( in docker file ) gst-plugins-bad ( 1.16.3 tag ) for use nvdec and nvenc, pkg-config not found nvidia-encode.

FROM nvcr.io/nvidia/deepstream:6.2-devel

ENV NVIDIA_DRIVER_CAPABILITIES $NVIDIA_DRIVER_CAPABILITIES,video
ENV DBUS_SYSTEM_BUS_ADDRESS=unix:path=/host/run/dbus/system_bus_socket
COPY ./Video_Codec_SDK_11.0.10.zip /root/Video_Codec_SDK_11.0.10.zip
RUN unzip Video_Codec_SDK_11.0.10.zip
RUN cp /root/Video_Codec_SDK_11.0.10/Interface/nvcuvid.h /usr/local/include
RUN cp /root/Video_Codec_SDK_11.0.10/Interface/cuviddec.h /usr/local/include
RUN cp /root/Video_Codec_SDK_11.0.10/Interface/nvEncodeAPI.h /usr/local/include

RUN cp /usr/local/cuda/include/cuda.h /root/gst-plugins-bad/sys/nvenc
RUN cp /root/Video_Codec_SDK_11.0.10/Interface/nvEncodeAPI.h /root/gst-plugins-bad/sys/nvenc
RUN cp /root/Video_Codec_SDK_11.0.10/Interface/cuviddec.h /root/gst-plugins-bad/sys/nvdec
RUN cp /root/Video_Codec_SDK_11.0.10/Interface/nvcuvid.h /root/gst-plugins-bad/sys/nvdec

RUN git clone GitHub - GStreamer/gst-plugins-bad: 'Bad' GStreamer plugins and helper libraries. This module has been merged into the main GStreamer repo for further development. && cd gst-plugins-bad/ && git checkout 1.16.3
cd /root/gst-plugins-bad/ && NVENCODE_CFLAGS=“-I/root/gst-plugins-bad/sys/nvenc” ./autogen.sh --with-cuda-prefix=“/usr/local/cuda” --disable-gtk-doc && cd sys/nvenc && make -j 12 && cp .libs/libgstnvenc.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/

When i build it in shell, it works fine why ?

also, i have chroma problem with nvh264enc plugin while there is not this problem with x264enc, what to do for fix it ? backport a fix from next tag ?

Driver Version: 525.60.13 with rtx 3070

Hi there,

I am sorry I cannot answer your question. But I think the team in the Deepstream SDK category might have more expertise on possible docker problems with the SDK.

If you don’t mind I’ll move your post over there.

Thanks!

Please execute “/opt/nvidia/deepstream/deepstream/user_additional_install.sh” as the first command in the docker, explanation can be found in the second note on page Docker Containers — DeepStream 6.2 Release documentation (nvidia.com).

1.Could you describe your operations step by step and attach the error when build failed?
2.What are the specific problems you have encountered about the chroma problem?

In addition, I had to force the reinstallation of several packages to be able to use the libav and x264 plugins
( RUN apt-get install --reinstall ca-certificates && update-ca-certificates
RUN apt-get -y install --reinstall libavcodec-extra58 libavutil56 libvpx6 libx265-179 libmpg123-0 libmpeg2-4 libmpeg2encpp-2.1-0 libx264-155

thank you for your advice but already installed the dependencies mentioned (

With DS 6.2, DeepStream docker containers do not package libraries necessary for certain multimedia operations like audio data parsing, CPU decode, and CPU encode. This change could affect processing certain video streams/files like mp4 that include audio track. Run the below script inside the docker images to install additional packages (e.g. gstreamer1.0-libav, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly as required) that might be necessary to use all of the DeepStreamSDK features :

1.Could you describe your operations step by step and attach the error when build failed?

RUN cd /root/gst-plugins-bad/ && NVENCODE_CFLAGS=“-I/root/gst-plugins-bad/sys/nvenc” ./autogen.sh --with-cuda-prefix=“/usr/local/cuda” --disable-gtk-doc && cd sys/nvenc && make -j 12 && cp .libs/libgstnvenc.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/
RUN cd /root/gst-plugins-bad/sys/nvdec && make -j 12 && cp .libs/libgstnvdec.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/

see below log for build nvdec et nvenc plugins

gstnvbaseenc.c: In function ‘_nv_preset_to_guid’:
gstnvbaseenc.c:90:7: warning: ‘NV_ENC_PRESET_DEFAULT_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
90 | CASE (DEFAULT, DEFAULT);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:201:37: note: declared here
201 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_DEFAULT_GUID =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
gstnvbaseenc.c:91:7: warning: ‘NV_ENC_PRESET_HP_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
91 | CASE (HP, HP);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:205:37: note: declared here
205 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_HP_GUID =
| ^~~~~~~~~~~~~~~~~~~~~
gstnvbaseenc.c:92:7: warning: ‘NV_ENC_PRESET_HQ_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
92 | CASE (HQ, HQ);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:209:37: note: declared here
209 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_HQ_GUID =
| ^~~~~~~~~~~~~~~~~~~~~
gstnvbaseenc.c:94:7: warning: ‘NV_ENC_PRESET_LOW_LATENCY_DEFAULT_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
94 | CASE (LOW_LATENCY_DEFAULT, LOW_LATENCY_DEFAULT);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:217:37: note: declared here
217 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOW_LATENCY_DEFAULT_GUID =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gstnvbaseenc.c:95:7: warning: ‘NV_ENC_PRESET_LOW_LATENCY_HQ_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
95 | CASE (LOW_LATENCY_HQ, LOW_LATENCY_HQ);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:221:37: note: declared here
221 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOW_LATENCY_HQ_GUID =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gstnvbaseenc.c:96:7: warning: ‘NV_ENC_PRESET_LOW_LATENCY_HQ_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
96 | CASE (LOW_LATENCY_HP, LOW_LATENCY_HQ);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:221:37: note: declared here
221 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOW_LATENCY_HQ_GUID =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gstnvbaseenc.c:97:7: warning: ‘NV_ENC_PRESET_LOSSLESS_DEFAULT_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
97 | CASE (LOSSLESS_DEFAULT, LOSSLESS_DEFAULT);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:229:37: note: declared here
229 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOSSLESS_DEFAULT_GUID =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gstnvbaseenc.c:98:7: warning: ‘NV_ENC_PRESET_LOSSLESS_HP_GUID’ is deprecated: WILL BE REMOVED IN A FUTURE VIDEO CODEC SDK VERSION [-Wdeprecated-declarations]
98 | CASE (LOSSLESS_HP, LOSSLESS_HP);
| ^~~~
In file included from gstnvenc.h:26,
from gstnvbaseenc.h:23,
from gstnvbaseenc.c:24:
nvEncodeAPI.h:233:37: note: declared here
233 | NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOSSLESS_HP_GUID =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CCLD libgstnvenc.la
Removing intermediate container 8a6a58823ffb
—> 7c4e4fb63431
Step 42/47 : RUN cd /root/gst-plugins-bad/sys/nvdec && make -j 12 && cp .libs/libgstnvdec.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/
—> Running in 72f2e1652e17
CC libgstnvdec_la-plugin.lo
CC libgstnvdec_la-gstnvdec.lo
cc1: warning: /usr/include/libdrm: No such file or directory [-Wmissing-include-dirs]
cc1: warning: /usr/include/libdrm: No such file or directory [-Wmissing-include-dirs]
CCLD libgstnvdec.la
/usr/bin/ld: cannot find -lnvcuvid
collect2: error: ld returned 1 exit status
make: *** [Makefile:833: libgstnvdec.la] Error 1

if i use the same instruction in bah shell in the same docker it works fine. in automatic build it does not work . at 6.0 tag I did not have this problem

It reports the error:cannot find -lnvcuvid. Tag 6.0 have already install the cuvid lib. You can find the libnvcuvid.so in the /usr/lib/x86_64-linux-gnu/. However, in order to reduce the docker size, 6.2 was not installed. Could you check if there are libnvcuvid.so lib in your docker?

2.What are the specific problems you have encountered about the chroma problem?
see in attachement

Because these are two different issues, could you open a new topic about the chroma problem?
We try to ensure that we discuss the same issue in one topic. Let’s use this topic discuss the first issue. Thanks

i have create nvcuvid.pc and nvidia-encode.pc

cat nvcuvid.pc
cudaroot=/usr
libdir=${cudaroot}/lib/x86_64-linux-gnu
includedir=${cudaroot}/include

Name: nvcuvid
Description: NVIDIA Video Codec SDK - Decoder
Version: 11.0.10
Libs: -L${libdir} -lnvcuvid
Cflags: -I${includedir}

cat nvidia-encode.pc
cudaroot=/usr
libdir=${cudaroot}/lib/x86_64-linux-gnu
includedir=${cudaroot}/include

Name: nvidia-encode
Description: NVIDIA Video Codec SDK - Encoder
Version: 11.0.10
Libs: -L${libdir} -lnvidia-encode
Cflags: -I${includedir}

find /usr -name “libnvcuvid.so”
/usr/lib/x86_64-linux-gnu/libnvcuvid.so

find /usr -name “nvidia-encode.so”
/usr/lib/x86_64-linux-gnu/libnvidia-encode.so

I compile with the same docker command line it works. in automatic build it does not work. It worked with nvcr.io/nvidia/deepstream:6.0-devel image but not with nvcr.io/nvidia/deepstream:6.2-devel

As I said above, 6.0 is OK. We’ll check the problem that you intall the lib yourself but get failed when run outside the docker.

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

Hi @draden, thanks for your questions. In order to help, we would like to understand:

  • Why do you prefer nvdec/nvenc over nvv4l2h264dec/nvv4l2enc?
  • What does your automatic build do? Is it a “docker build” command?

For DS 6.2 we do recommend driver version R525.85.12. A minor version difference may not affect this issue but libnvcuvid.so comes from the driver outside the docker.

  • Why do you prefer nvdec/nvenc over nvv4l2h264dec/nvv4l2enc? " because they don’t support automatic input rescaling, I have a crash with the quoted plugins ( nvv4l2h264dec/nvv4l2enc ) as a replacement. nvenc and x264enc plugins don’t crash.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.