微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在单个 GStreamer 窗口中显示 3 或 4 个摄像头 视频混音器

如何解决如何在单个 GStreamer 窗口中显示 3 或 4 个摄像头 视频混音器

首先让我说我是一个新的 Linux 和 GStreamer 用户,我完全被困住了。

我的目标是在一个窗口中尽可能实时地同时显示多达 4 个摄像头。不涉及音频。

我使用的是带有 4GB RAM 的 RaspBerry Pi 4,运行“2020-12-02-raspios-buster-armhf - Desktop.img”操作系统映像。我使用的是 1920 x1080 液晶显示器。我有 512Mb 的 RAM 专用于 GPU。

在 GStreamer 中,我试图让 4 个 USB 摄像头显示在 2 x 2 窗口中。目前我只用 2 个摄像头和 2 个 videotestsrc 进行测试。我的问题是当视频大小设置为 320 x 240 时,此配置有效。使用以下配置,我在两台摄像机上都获得了非常灵敏的图像更新。 RPi 任务管理器显示 Pi 运行时使用了大约 23% 的 cpu 和 184Mb 的 RAM。

Cameras 320x240

gst-launch-1.0 videomixer name=mix ! videoconvert ! ximagesink sync=false \
 v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=AYUV,width=320,height=240 ! videoBox border-alpha=0 top=0    left=0    ! mix. \
 v4l2src device=/dev/video2 ! videoconvert ! video/x-raw,height=240 ! videoBox border-alpha=0 top=0    left=-320 ! mix. \
 videotestsrc pattern=5 !     videoconvert ! video/x-raw,height=240 ! videoBox border-alpha=0 top=-240 left=0    ! mix. \
 videotestsrc pattern=6 !     videoconvert ! video/x-raw,height=240 ! videoBox border-alpha=0 top=-240 left=-320 ! mix.

当我将视频大小加倍到 640 x 480 时,主窗口会打开,就像使用较小的 320 x 240 窗口大小一样,但此后相机视频永远不会更新。它似乎被它开始时所看到的任何形象所冻结。 RPi 任务管理器显示 Pi 运行时使用了大约 2% 的 cpu 和 201Mb 的 RAM。 gst-launch-1.0 显示 0% cpu

gst-launch-1.0 videomixer name=mix ! videoconvert ! ximagesink sync=false \
 v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,width=640,height=480 ! videoBox border-alpha=0 top=0    left=0    ! mix. \
 v4l2src device=/dev/video2 ! videoconvert ! video/x-raw,height=480 ! videoBox border-alpha=0 top=0    left=-640 ! mix. \
 videotestsrc pattern=5 !     videoconvert ! video/x-raw,height=480 ! videoBox border-alpha=0 top=-480 left=0    ! mix. \
 videotestsrc pattern=6 !     videoconvert ! video/x-raw,height=480 ! videoBox border-alpha=0 top=-480 left=-640 ! mix.

问题: 我是使用 [videomixer] 以正确的方式配置 4 个摄像头,还是有更灵敏的方式来做到这一点?

gst-inspect-1.0 indicates that videomixer can accept the following inputs (sinks):
video/x-raw format: { (string)AYUV,(string)BGRA,(string)ARGB,(string)RGBA,(string)ABGR,(string)Y444,(string)Y42B,(string)YUY2,(string)UYVY,(string)YVYU,(string)I420,(string)YV12,(string)NV12,(string)NV21,(string)Y41B,(string)RGB,(string)BGR,(string)xRGB,(string)xBGR,(string)RGBx,(string)BGRx }

GStreamer 网站说 videomixer 仅限于 3 种不同的输入,我引用: “Videomixer 可以接受 AYUV、ARGB 和 BGRA 视频流”。我的相机本机输出 YUY2。

我不确定应该使用这 3 个中的哪一个来获得最佳性能,但我发现如果我不使用其中一个,那么当窗口显示时,只显示指定的最后一个视频源和另一个3 变黑了。

我的相机输出了 YUY2 视频。当我尝试以下命令时,我只会显示最后一个视频。

Cameras 320x240 YUY2

gst-launch-1.0 -v videomixer name=mix ! videoconvert ! xvimagesink sync=false \
 v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,height=480,framerate=15/1 ! videoBox border-alpha=0 top=0    left=0    ! mix. \
 v4l2src device=/dev/video2 ! video/x-raw,framerate=15/1 ! videoBox border-alpha=0 top=0    left=-640 ! mix. \
 videotestsrc pattern=5 !     video/x-raw,framerate=15/1 ! videoBox border-alpha=0 top=-480 left=0    ! mix. \
 videotestsrc pattern=6 !     video/x-raw,framerate=15/1 ! videoBox border-alpha=0 top=-480 left=-640 ! mix.

单独测试时,每台相机都可以在更高的 XY 尺寸下正常工作。

我不知道去哪里查看或尝试调试什么。 任何帮助将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。