Opencv 与Gstreamer同时在2个应用程序中使用视频设备
我试图在两个不同的应用程序中使用Jetson Nano(通过SSH运行headless)上的摄像头提要 通过命令行,我可以运行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
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