我正在尝试使用opencv via aruco在Ubuntu 14.04 LTS上使用OpenCV 3.1.0和Gstreamer 1.2.4通过网络读取UDP-Stream . 我更改了“aruco_simple.cpp”示例文件的代码,通过将VideoCapturer构造函数的参数更改为GStreamer管道来实现此目的:

string PIPELINE_DEF = "udpsrc uri=udp://192.168.71.50:49152 do-timestamp=true name=src blocksize=1316 closefd=false buffer-size=100 !" \
    "tsdemux !" \
    "queue !" \
    "avdec_h264 max-threads=0 !" \
    "videoconvert !" \
           "xvimagesink name=opencvsink"
    //"appsink !"
;
    aruco::CameraParameters CamParam;

    // read the input image
    cv::Mat InImage;
    // Open input and read image
    //VideoCapture vreader(argv[1]);
    VideoCapture vreader(PIPELINE_DEF);

执行此操作我总是得到以下错误:

OpenCV Error: Unspecified error (GStreamer: unable to start pipeline
) in cvCaptureFromCAM_GStreamer, file /home/osboxes/Aruco/opencv-3.1.0/modules/videoio/src/cap_gstreamer.cpp, line 834
Exception :/home/osboxes/Aruco/opencv-3.1.0/modules/videoio/src/cap_gstreamer.cpp:834: error: (-2) GStreamer: unable to start pipeline
 in function cvCaptureFromCAM_GStreamer

我在这里找到了这个Bug http://code.opencv.org/issues/3953但是在我的情况下解决方案对我没有帮助 .

如果我在Python中直接启动GStreamer管道(没有aruco和opencv),它就可以工作 .

根据cmake输出,opencv发现了GStreamer:

--     GStreamer:                   
--       base:                      YES (ver 1.2.4)
--       video:                     YES (ver 1.2.4)
--       app:                       YES (ver 1.2.4)
--       riff:                      YES (ver 1.2.4)
--       pbutils:                   YES (ver 1.2.4)