Jetson Nano: Gstreamer внутри docker контейнера - PullRequest
0 голосов
/ 05 марта 2020

Мне удалось установить и использовать docker с доступом CUDA на устройстве Nvidia Jetson Nano. На устройстве выполняется пользовательская сборка Yocto / poky-zeus (поддерживается JetPack 4.3).

Образ docker, с которым я тестирую, является официальным nvidia-l4t-base Устройства Arm64 Nvidia Jetson.

Я запускаю контейнер docker со следующей строкой:

docker run --net=host --runtime nvidia --rm --ipc=host -v /tmp/.X11-unix/:/tmp/.X11-unix/ -v /tmp/argus_socket:/tmp/argus_socket --device=/dev/video0:/dev/video0 --cap-add SYS_PTRACE -e DISPLAY=:0 -it nvcr.io/nvidia/l4t-base:r32.3.1

, которая, как доказано, работает на официальном tegrafla sh изображение из NVIDIA SDK-manager (JetPack 4.3).

Я могу просто запустить gstreamer (1.14 или 1.16) вне контейнера docker, но пытаюсь запустить любой gstreamer (1.14 ) вещи внутри docker изображения терпят неудачу.

Например, при запуске этого конвейера gstreamer:

gst-launch-1.0 -e nvarguscamerasrc num-buffers=-1 ! 'video/x-raw(memory:NVMM), width=(int)1280, height=(int)720, format=(string)NV12, framerate=(fraction)60/1' ! nvvidconv flip-method=0 ! nvvidconv ! nvegltransform ! udpsink host=$HOST_IP port=$GST_PORT

происходит сбой со следующей ошибкой:

Setting pipeline to PAUSED ...
[ 2415.341857] (NULL device *): nvhost_channelctl: invalid cmd 0x80685600
[ 2415.350034] (NULL device *): nvhost_channelctl: invalid cmd 0x80685600
[ 2415.357153] (NULL device *): nvhost_channelctl: invalid cmd 0x80685600
Failed to query video capabilities: Inappropriate ioctl for device
libv4l2: error getting capabilities: Inappropriate ioctl for device
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/nvv4l2h264enc:nvv4l2h264enc0: Error getting capabilities for device '/dev/nvhost-msenc': It isn't a v4l2 driver. Check if it is a v4l1 driver.
Additional debug info:
v4l2_calls.c(98): gst_v4l2_get_capabilities (): /GstPipeline:pipeline0/nvv4l2h264enc:nvv4l2h264enc0:
system error: Inappropriate ioctl for device
Setting pipeline to NULL ...
Freeing pipeline ...

Изменение кодировки просто дает еще одну ошибку. Но этот конвейер отлично работает вне docker, а также внутри docker на официальном образе NVIDIA SDK-manager, но НЕ внутри docker контейнера с сборкой Yocto.

Доступ к камере есть в контейнере (RPI CSI камера), так как v4l2-ctl --all показывает правильную информацию.

Есть идеи, как это исправить?

Подробнее об этой проблеме от мета-тегровый слой и Nvidia- docker выпусков.

...