如何确保GStreamer在解码jpeg之前已抓取帧

时间:2018-10-17 17:44:37

标签: gstreamer ubuntu-18.04

我有一个GStreamer管道,它从3个单独的摄像机中抓取一个mjpeg网络摄像机流,并每个保存2帧。我正在Ubuntu 18.04的Odroid XU4的USB 3.0总线上执行这些命令,这样做时,我发现有时在输出图像集合中会得到像这样的乱码图像:

garbage image

这种情况并非总是会发生,但是执行1/5图像可能看起来像这样。

然后我发现,如果我解码jpeg,然后重新编码,则永远不会发生。参见下面的管道:

gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=2 ! \
image/jpeg,width=3840,height=2160 ! queue ! jpegdec ! queue ! \
jpegenc ! multifilesink location=/root/cam0_%02d.jpg v4l2src \ 
device=/dev/video1 num-buffers=2 ! image/jpeg,width=3840,height=2160 ! \
queue ! jpegdec ! queue ! jpegenc ! multifilesink  \
location=/root/cam1_%02d.jpg v4l2src device=/dev/video2 num-buffers=2 !  \ 
image/jpeg,width=3840,height=2160 ! queue ! jpegdec ! queue ! jpegenc ! \
multifilesink location=/root/cam2_%02d.jpg

现在,当我运行此管道时,我有1/5的机会遇到此错误:

/GstPipeline:pipeline0/GstJpegDec:jpegdec0: No valid frames decoded before end of stream

是否有一种方法可以使gstreamer等待帧而不仅仅是失败?我尝试通过添加!queue!在上面的管道中,没有成功。

0 个答案:

没有答案