Docker 个容器中的 Gstreamer 相机使用情况

Gstreamer Camera Usage within Docker Containers

我目前正在 docker 容器内研究 运行 DL 算法,我已经成功了。但是,我只能通过将 --net=host 标志传递给 docker run 命令来获得它 运行,这使得容器使用主机的网络接口。如果我不传递该标志,它会抛出以下错误:

No EGL Display 
nvbufsurftransform: Could not get EGL display connection
No protocol specified
nvbuf_utils: Could not get EGL display connection

当我做的时候

echo $DISPLAY

它输出 :0 是正确的。

但我不明白 Gstreamer、X11 或 EGL 与全网络功能有什么关系。除了 --net=host 标志之外,对此有任何解释或任何解决方法吗?由于这个原因,我无法为各种容器映射不同的端口。

快速提醒: Gstreamer 本身无法在 X11-Forwarding 上工作,您最好使用 VNC 解决方案,或者可以访问物理机器。

疑难解答

  • 是否安装了 gstreamer? apt install -y gstreamer1.0-plugins-base
  • xrandrreturns是什么?
  • xauth listreturns是什么?
  • gst-launch-1.0 nvarguscamerasrc ! nvoverlaysinkreturns是什么?

例如:
在我的设置中,因为我不使用 docker 文件,所以我复制了 xauth 列表 cookie,然后将其粘贴到 docker xauth add user/unix:11 MIT-MAGIC-COOKIE cccccccccccccccccccccccccc 之后我可以用 xterm& 测试显示。 此外,一旦完成,我就会得到 xrandr

的输出

越来越冗长
我还通过 ssh 连接 和详细 连接到 docker(我们不关心主机/或/访客)ssh -X -v user@192.168.123.123 因此 EGL 错误被调试细节包装。

流东西
这与 nVidia 的 Deepstream 和 Gstreamer 定制有关。 一些 nvidia 线程指出 EGL 需要 "sink" 但没有 X11 显示。 如果在设计端口的主机上有一些服务器 运行,运行 docker 和 --net=host 将允许客户端在 docker 内连接。 根据文档,Gpu 使用了一些服务器。

Doc

$DISPLAY
根据 nVidia threadsunset DISPLAY 提供了更好的结果。 在我的设置中,没有显示,EGL 错误消失了。然后就看不到流了

我还在 NVIDIA DevTalk 论坛上创建了一个关于此的主题,但它对我来说仍然是一个黑点。我对得到的答案不满意。

但是无论如何使用--net=host标志来解决这个问题是可以的。