Gstreamer不会沉入命名管道

时间:2014-03-08 06:45:50

标签: opencv gstreamer-0.10

当gst-launch管道的接收器是命名管道与普通文件时,我的行为会有所不同。

我有一个gst-launch管道,可以在OMAP嵌入式(linux)板上显示来自摄像头的视频,并通过T恤以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-launch进程确实宣布它已改为PLAY。

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

并且也看不到任何输出,但在两种情况下,dri2videosink都在显示视频

使用tail或java进程,杀死它也会停止gst-launch进程,所以显然它在某种意义上是“连接”的。

使用尾部运行杀死gst-launch进程会在gst-launch退出后获得看似几K,可能是1帧的数据。

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

1 个答案:

答案 0 :(得分:3)

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

我确实得到了以下工作:

我在/ dev /中创建了一个名为pipe_stream的命名管道,使用mkfifo make 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

然后我在

使用了脸部检测教程

http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html#cascade-classifier

测试所有内容,但将输入从网络摄像头1更改为namedpipe。

  capture = cvCaptureFromCAM( -1 );

变为

 VideoCapture capture("/dev/video_stream");