与 Gstreamer 同时在 2 个应用程序中使用视频设备

Using a video device in 2 applicatrions simoultaneously with Gstreamer

我正在尝试在 2 个不同的应用程序中使用我的 Jetson Nano(运行ning headless over SSH)上的摄像头。

从命令行,我能够运行

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=3280, height=2464, format=NV12, framerate=(fraction)21/1' ! nvvidconv ! xvimagesink

它通过 X11 Window.

从我的相机(IMX219 连接到 Jetson Nano)将视频流式传输到我的桌面

我想做的是以某种方式在 2 个不同的应用程序中使用相同的视频流。 我的第一个应用程序是一个 python 程序,其中 运行 包含一些 OpenCV 内容,第二个应用程序是一个简单的 bash 脚本,可将视频录制到 *.mp4 文件中。

这可能吗?我研究过使用 v4l2loopback,但我不确定这是否真的是最简单的方法。

好吧,感谢两位评论员,我设法弄明白了,这是我在 Jetson Nano 上的解决方案,但它可以针对任何 Gstreamer 应用程序进行调整。

首先,使用v4l2loopback创建2个虚拟设备,如下所示:

sudo modprobe v4l2loopback video_nr=1,2

这将创建 /dev/video1/dev/video2

然后你使用 tee 将 Gstreamer 流转储到每个虚拟设备中,这是我的台词:

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=3280, height=2464, format=NV12, framerate=(fraction)21/1' ! nvvidconv ! tee name=t ! queue ! v4l2sink device=/dev/video1 t. ! queue ! v4l2sink device=/dev/video2

这是专为我的 Jetson Nano 和我的特定相机设计的,但您可以更改 gstreamer 管道以执行您想要的操作