OpenCV无法从raspberry创建的gstreamer打开网络流

时间:2017-01-18 13:56:23

标签: c++ opencv raspberry-pi video-streaming gstreamer

我正在尝试使用Gstreamer从我的Raspberry pi打开单播udp流。将使用带有OpenCV的C ++应用程序在Windows PC上接收此流。这是我在树莓上使用的shellscript来启动流:

message_id, user_id

我可以使用这样的批处理文件在我的Windows PC上接收和显示素材:

raspivid -t 0 -h 1080 -w 1920 -fps 30 -hf -vf -n -b 6000000 -o - | gst-launch-1.0 -e -vvvv  fdsrc ! h264parse !  rtph264pay config-interval=5 pt=96 ! udpsink host=192.168.0.101 port=5001

为了能够在我的C ++应用程序中使用此流,我使用Opencv。我不熟悉使用Opencv打开流。我正在尝试使用以下代码打开流:

@echo off
cd C:\gstreamer\1.0\x86_64\bin
gst-launch-1.0 -e -v udpsrc port=5001 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false

当我运行我的应用程序时,它会在cv :: VideoCapture上限(“udp:// @:5001”)中卡住(不会崩溃);每次。我不确定引号之间的输入参数是什么。当我对流进行连线时,我得到了这个结果:

  

来源:192.186.0.103目的地:192.168.0.101协议:UDP长度:1442信息:35946-> 5001 Len = 1400

显然,这只是众多软件包中的一个。

任何人都可以帮我解决这些输入参数,或者向我展示另一种在OpenCV中打开流的方法吗?

1 个答案:

答案 0 :(得分:0)

OpenCv支持gstreamer,您可以输入管道到VideoCapture。您需要做的是使用appsink完成管道。

在您的情况下,您可以使用

const char* pipe = "udpsrc port=5001 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! appsink"
cv::VideoCapture cap(pipe);