Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 与Gstreamer同时在2个应用程序中使用视频设备_Opencv_Gstreamer_Video Capture_Nvidia Jetson_V4l2loopback - Fatal编程技术网

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

Opencv 与Gstreamer同时在2个应用程序中使用视频设备,opencv,gstreamer,video-capture,nvidia-jetson,v4l2loopback,Opencv,Gstreamer,Video Capture,Nvidia Jetson,V4l2loopback,我试图在两个不同的应用程序中使用Jetson Nano(通过SSH运行headless)上的摄像头提要 通过命令行,我可以运行 gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=3280, height=2464, format=NV12, framerate=(fraction)21/1' ! nvvidconv ! xvimagesink 它通过X11窗口将视频从我的相机(IMX219连接到Jetson N

我试图在两个不同的应用程序中使用Jetson Nano(通过SSH运行headless)上的摄像头提要

通过命令行,我可以运行

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=3280, height=2464, format=NV12, framerate=(fraction)21/1' ! nvvidconv ! xvimagesink
它通过X11窗口将视频从我的相机(IMX219连接到Jetson Nano)传输到我的桌面

我想做的是在两个不同的应用程序中使用相同的视频流。 我的第一个应用程序是一个运行OpenCV的python程序,第二个应用程序是一个简单的bash脚本,它将视频记录到一个*.mp4文件中


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

好吧,多亏了两位评论员,我终于找到了答案。这是我在Jetson Nano上的解决方案,但它可以针对任何Gstreamer应用程序进行调整

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

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管道以执行您希望的操作

gstreamer有一个T元素,您可以从该元素向两个方向移动。例如,1个appsink和1个filewriter sink?仅作记录:@mika提到的T元素实际上被称为
tee