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
xrandr
returns是什么?
xauth list
returns是什么?
gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink
returns是什么?
例如:
在我的设置中,因为我不使用 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 使用了一些服务器。
$DISPLAY
根据 nVidia threads:unset DISPLAY
提供了更好的结果。
在我的设置中,没有显示,EGL 错误消失了。然后就看不到流了
我还在 NVIDIA DevTalk 论坛上创建了一个关于此的主题,但它对我来说仍然是一个黑点。我对得到的答案不满意。
但是无论如何使用--net=host
标志来解决这个问题是可以的。
我目前正在 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
xrandr
returns是什么?xauth list
returns是什么?gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink
returns是什么?
例如:
在我的设置中,因为我不使用 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 使用了一些服务器。
$DISPLAY
根据 nVidia threads:unset DISPLAY
提供了更好的结果。
在我的设置中,没有显示,EGL 错误消失了。然后就看不到流了
我还在 NVIDIA DevTalk 论坛上创建了一个关于此的主题,但它对我来说仍然是一个黑点。我对得到的答案不满意。
但是无论如何使用--net=host
标志来解决这个问题是可以的。