Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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不下沉到命名管道_Opencv_Gstreamer 0.10 - Fatal编程技术网

Opencv Gstreamer不下沉到命名管道

Opencv Gstreamer不下沉到命名管道,opencv,gstreamer-0.10,Opencv,Gstreamer 0.10,当gst启动管道的接收器是命名管道而不是普通文件时,我得到了不同的行为 我有一个gst发布管道,它在OMAP嵌入式(linux)板上显示摄像头的视频,并通过一个tee以avi的形式交付视频 gst-launch -v -e omx_camera device=0 do-timestamp=1 mode=0 name=cam cam.src ! "video/x-raw-yuv, format=(fourcc)NV12, width=240, height=320, framerate=30/1"

当gst启动管道的接收器是命名管道而不是普通文件时,我得到了不同的行为

我有一个gst发布管道,它在OMAP嵌入式(linux)板上显示摄像头的视频,并通过一个tee以avi的形式交付视频

gst-launch -v -e omx_camera device=0 do-timestamp=1 mode=0 name=cam cam.src ! "video/x-raw-yuv, format=(fourcc)NV12, width=240, height=320, framerate=30/1" ! tee name=t1 t1. ! queue ! ducatih264enc profile=100 level=50 rate-preset=low-delay bitrate=24000 ! h264parse ! queue ! avimux ! filesink location=/tmp/camerapipe t1. ! queue ! dri2videosink sync=false
如果我

filesink location=/some/real/file t1.  
一切都很好

但是我希望用Java/opencv进程读取输出,当我这样做时,我对Java进程没有任何了解。gst启动过程不会通知它已更改为播放

为了简化事情而不是java进程,我
tail-f
命名管道

sudo gst-launch -e videotestsrc ! video/x-raw-yuv, framerate=20/1, width=640, height=480 ! ffenc_mpeg4 ! filesink location=/dev/video_stream
而且也看不到任何输出,尽管在这两种情况下,dri2videosink都在显示视频

无论是tail进程还是java进程,杀死它也会停止gst启动进程,因此显然它在某种意义上是“连接”的

在gst启动退出后,在尾部运行的情况下终止gst启动进程会得到几K(可能是1帧)的数据


我尝试过保存到普通文件并用java进程读取,这很有效,所以我知道这不是数据格式。

我也在尝试做同样的事情,我在c中使用opencv,在ubuntu中工作

我确实做到了以下几点:

我使用mkfifo在/dev/中创建了一个名为video_stream的命名管道,使sur-eyou具有读/写权限或仅使用sudo

将测试视频播放到命名管道

sudo gst-launch -e videotestsrc ! video/x-raw-yuv, framerate=20/1, width=640, height=480 ! ffenc_mpeg4 ! filesink location=/dev/video_stream
从网络摄像机播放到命名管道:

sudo gst-launch -e v4l2src device=/dev/video0 !  ffenc_mpeg4 ! filesink location=/dev/video_stream
然后,我使用了人脸检测教程

测试所有内容,但将我的输入从网络摄像头1更改为命名管道

  capture = cvCaptureFromCAM( -1 );
变成

 VideoCapture capture("/dev/video_stream");