C ++无法在OpenCV中集成JPEG管道

问题描述 投票:3回答:1

我已经浏览了OpenCV和Gstreamer上的大量线程,根本无法解决我的错误问题。我试图在OpenCV中打开Gstreamer管道。我已经使用GStreamer构建了OpenCV,它在CMake步骤中显示YES表示OpenCV已成功构建。从命令行检索流的命令工作正常,但它只显示一个框架并挂起在OpenCV中。

我的服务器语法:

gst-launch-1.0 v4l2src device="/dev/video0" ! video/x-raw,format=I420,width=640,height=480,framerate=15/1 ! jpegenc ! rtpjpegpay ! udpsink host=<IP Address> port=5000  

我在OpenCV for Client中的语法(C ++):

Mat frame;

//create video capture from video camera
VideoCapture cap("udpsrc port=5000 ! application/x-rtp,encoding-
name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink ! appsink");

cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
for(;;) 
{
    cap >> frame;

    char c = (char)waitKey(1);

    //![display]
    imshow(window_name, frame);

    frame.release();
}

错误:

GStreamer插件:嵌入式视频播放暂停;模块autovideosink0-actual-sink-xvimage报告:输出窗口已关闭OpenCV错误:icvStartPipeline中的未指定错误(GStreamer:无法启动管道),文件/home/dev/Downloads/OpenCV/opencv-3.0.0/modules/videoio/ src / cap_gstreamer.cpp,第383行终止在抛出'cv :: Exception'的实例后调用what():/ home / dev / Downloads / OpenCV / opencv- 3.0.0 / modules / videoio / src / cap_gstreamer.cpp: 383:错误:( - 2)GStreamer:无法在函数icvStartPipeline中启动管道

请提供至少20个Stack帖子的任何帮助,除了在OpenCV中启用Gstreamer之外,我没有接近。我甚至尝试过不同版本的OpenCV。

谢谢

c++ opencv image-processing gstreamer gstreamer-1.0
1个回答
1
投票

VideoCapture上限(“udpsrc port = 5000!application / x-rtp,encoding-name = JPEG,payload = 26!rtpjpegdepay!jpegdec!videoconvert!appsink”);

经过Gstreamer文档的更多挖掘后,我解决了这个问题。视频转换的加入解决了这个问题。根据Gstreamer文档,videoconvert会自动将数据转换为适用于appsink的格式。这允许在OpenCV VideoCapture中正确读取它。

© www.soinside.com 2019 - 2024. All rights reserved.