首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gstreamer不会沉没到命名管道

Gstreamer不会沉没到命名管道
EN

Stack Overflow用户
提问于 2014-03-08 14:45:50
回答 1查看 4.3K关注 0票数 3

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

我有一个gst-launch管道,它显示来自OMAP嵌入式(linux)板上的摄像头的视频,并通过tee以avi格式提供视频。

代码语言:javascript
运行
复制
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

如果我做了

代码语言:javascript
运行
复制
filesink location=/some/real/file t1.  

平安无事

但是我希望用一个Java/opencv进程读取输出,当我这样做时,我没有得到java进程的任何东西。gst-launch进程确实会通知它已更改为播放。

为了简化程序而不是java进程,我对命名管道执行tail -f操作

也看不到任何输出,尽管在这两种情况下dri2videosink都在显示视频

对于尾巴或java进程,终止它也会停止gst-launch进程,所以很明显它在某种意义上是‘连接的’。

在gst-launch退出后,在尾部运行的情况下终止gst-launch进程会得到看起来像几K,也许1帧的数据。

我已经尝试过将文件保存为普通文件并使用java进程进行读取,这是可行的,所以我知道这不是数据格式。

EN

回答 1

Stack Overflow用户

发布于 2014-03-13 23:57:33

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

我做到了以下几点:

我使用mkfifo在/dev/中创建了一个名为video_stream的命名管道,以确保您有权对其进行读/写,或者只使用sudo。

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

代码语言:javascript
运行
复制
sudo gst-launch -e videotestsrc ! video/x-raw-yuv, framerate=20/1, width=640, height=480 ! ffenc_mpeg4 ! filesink location=/dev/video_stream

从网络摄像机播放到命名管道:

代码语言:javascript
运行
复制
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

来测试所有东西,但将我的输入从webcam 1更改为namedpipe.

代码语言:javascript
运行
复制
  capture = cvCaptureFromCAM( -1 );

变成了

代码语言:javascript
运行
复制
 VideoCapture capture("/dev/video_stream");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22266127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档