Docker容器中Gstreamer摄像机的使用

时间:2019-11-14 07:10:11

标签: docker gstreamer x11 nvidia egl

我目前正在在Docker容器中运行DL算法,并且已经取得了成功。但是,我只能通过将3标志传递给foo_bar_baz命令来使其运行,该命令使容器使用主机计算机的网络接口。如果我不通过该标志,则会引发以下错误:

import re
text = '      1       1       1 Old -> New'   
sum([int(i) for i in re.findall('\d+', text)])

当我这样做

--net=host

它输出正确的docker run

但是我不知道Gstreamer,X11或EGL与完整的网络功能有什么关系。除No EGL Display nvbufsurftransform: Could not get EGL display connection No protocol specified nvbuf_utils: Could not get EGL display connection 标志外,是否对此有任何解释或其他解决方法?因此,我无法为各种容器映射不同的端口。

2 个答案:

答案 0 :(得分:1)

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

但是可以使用--net=host标志来解决此问题。

答案 1 :(得分:-1)

快速了解:Gstreamer本身无法在X11-Forwarding上运行,您最好使用VNC解决方案或访问物理计算机。

故障排除

  • 是否安装了gstreamer? apt install -y gstreamer1.0-plugins-base
  • xrandr返回什么?
  • xauth list返回什么?
  • gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink返回什么?

例如:
在我的设置中,因为我不使用dockerfile,所以我复制了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需要一个“接收器”,但不需要X11显示器。 如果主机上的某个服务器在设计的端口上运行,则使用--net = host运行docker将允许客户端在docker中进行连接。 根据文档,Gpu使用了一些服务器。

Doc

$ DISPLAY
根据{{​​3}}:unset DISPLAY提供了更好的结果。 在我的设置中,没有显示,EGL错误消失了。然后看不到流。