将 v4l2loopback 和 GStreamer 与 MJPEG 相机一起使用

Using v4l2loopback and GStreamer with MJPEG cameras

我有一台 4k 相机,有 MJPEG 和 YUY2 格式。目前,我可以 运行

$ gst-launch-1.0 v4l2src device=/dev/video1 ! "video/x-raw,format=YUY2,width=640,height=480,framerate=30/1" ! tee name=t ! queue ! v4l2sink device=/dev/video20 t. ! queue ! v4l2sink device=/dev/video21
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

并将 video1 图像流式传输到两个不同的设备。

问:如何将 MJPEG 图像从 video1 传递到 video20video21,它们采用 YUY2 格式。

在 MJPEG 的情况下,您需要向 v4l2src 添加 image/jpeg 个大写字母。在 v4l2src 之后,您需要将其转换为原始视频。

Gstreamer 有 jpegdecavdec_mjpeg 插件。在我当前的版本中 jpegdec 不支持 YUY2 输出,所以我会使用 avdec_mjpeg。或者,您可以将 jpegdecvideoconvert 一起使用(即 ... ! jpegdec ! videoconvert ! ...)。

下面一行应该可以做到:

gst-launch-1.0 v4l2src device=/dev/video1 ! "image/jpeg,width=3840,height=2160,framerate=30/1" ! avdec_mjpeg ! "video/x-raw,format=YUY2,width=3840,height=2160,framerate=30/1" ! tee name=t ! queue ! v4l2sink device=/dev/video20 t. ! queue ! v4l2sink device=/dev/video21