opencv - Gstreamer 不会下沉到命名管道

标签 opencv gstreamer-0.10

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

我有一个 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 进程读取,这行得通,所以我知道这不是数据格式。

最佳答案

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

我确实得到了以下工作:

我使用 mkfifo 在/dev/中创建了一个名为 video_stream 的命名管道,确保您有权读取/写入它或只使用 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 更改为命名管道。

  capture = cvCaptureFromCAM( -1 );

成为

 VideoCapture capture("/dev/video_stream");

关于opencv - Gstreamer 不会下沉到命名管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266127/

相关文章:

visual-c++ - 计算二值图像中的前景对象

python - 简化从 cv2.findContours 获取坐标

python - 如何为opencv安装gstreamer 1.0 badplugin?

flush - 如何刷新 gstreamer 管道

c++ - gstreamer-0.10 打印管道字符串

python - 用python从gst管道抓取帧到opencv

java - 如何使用java中opencv的Imgproc.compareHist方法判断两张图片的相似度?

python - 使用 OpenCV 补偿自动白平衡