Device 从V4l2src读取设备时,无法从资源读取,轮询错误?

Device 从V4l2src读取设备时,无法从资源读取,轮询错误?,device,gstreamer,v4l2,Device,Gstreamer,V4l2,我有一条管道 gst-launch-1.0 -v v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,width=640,height=480 ! xvimagesink 它工作正常,但有时如果上面的管道没有正确退出,那么如果我再次读取设备,就会面临下面的错误 Could not read from resource.. gstv4l2bufferpool.c(1023): gst_v4l2_buffer_pool_poll ():

我有一条管道

gst-launch-1.0 -v v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,width=640,height=480 ! xvimagesink
它工作正常,但有时如果上面的管道没有正确退出,那么如果我再次读取设备,就会面临下面的错误

Could not read from resource.. gstv4l2bufferpool.c(1023): gst_v4l2_buffer_pool_poll (): /GstPipeline:Video-Ingestor/GstV4l2Src:CamSource:
poll error 1: Invalid argument (22).
为了再次阅读,我需要卸下设备并重新连接。那只有我能读了


是否有其他方法,例如每当出现此错误时,在不删除设备的情况下读取设备

您可以尝试将
--eos on shutdown
选项添加到gst启动中,看看这是否会导致v4l2src元素更干净地关闭。如何在c代码中启用此功能?您将使用
sigaction()
并侦听SIGTERM和/或SIGKILL,然后优雅地结束管道。我在c代码中处理了sigaction。但是,如果我手动使进程崩溃,那么在该实例中,sigaction将不会调用。此时,如果我再次尝试读取设备,我将面临上述错误,有时资源也很忙。您可能希望粘贴信号处理代码以及有关如何使进程崩溃的更多详细信息。