在opencv中使用gstreamer从树莓pi捕获流

在opencv中使用gstreamer从树莓pi捕获流,opencv,stream,udp,gstreamer,Opencv,Stream,Udp,Gstreamer,我正在尝试通过本地网络将视频从raspberry pi摄像头传输到我的电脑 在RaspberryPi端,我使用gstreamer和以下命令: raspivid -n -t 0 -rot 270 -w 960 -h 720 -fps 30 -b 6000000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=192.168.1.85 port=5

我正在尝试通过本地网络将视频从raspberry pi摄像头传输到我的电脑

在RaspberryPi端,我使用gstreamer和以下命令:

raspivid -n -t 0 -rot 270 -w 960 -h 720 -fps 30 -b 6000000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=192.168.1.85 port=5000
我在PC端使用以下命令:

gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
在这种情况下,显示视频,一切正常。但是,我想用C++程序在OpenCV中捕获流。我正试图使用使用gstreamer-1.0 32位编译的OpenCV 3.2来实现这一点

当我运行以下代码尝试捕获流时:

#include <opencv2/opencv.hpp>

int main(int argc, char *argv[])
{
    cv::VideoCapture cap("udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! appsink");

    return 0;
}
我可以使用OpenCV接收其他流,但我无法让它与gstreamer一起工作。
我搜索了这个问题,但找不到任何有用的东西,因此我非常感谢您的帮助。

我已经尝试过这个问题,现在它可以工作了。我将发布我是如何做到这一点的,希望其他人会有一个更轻松的时间

我按照指示去做。 在pc端,我运行:

#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
    cv::VideoCapture cap("udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! appsink sync=false");

    return 0;
}
要实现这一点,您需要在raspberry pi上安装gstreamer和rpicamsrc


您还需要在pc上使用gstreamer 32位编译opencv。首先安装gstreamer,开发人员版本,然后编译opencv。有关在visual studio中编译opencv的帮助,请参阅。

我认为udpsrc可能需要定义编码类型的caps。类似于
application/x-rtp,encoding name=H264,payload=96
而不是
application/x-rtp,payload=96
。感谢您的评论,但添加CAP似乎并不重要。
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
    cv::VideoCapture cap("udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! appsink sync=false");

    return 0;
}
gst-launch-1.0 rpicamsrc bitrate=3000000 ! video/x-h264, width=960, height=720 ! h264parse ! queue ! rtph264pay config-interval=1 pt=96 ! gdppay ! udpsink host=192.168.1.85 port=5000