OpenCV 3.1.0とGstreamer 1.2.4を使用して、Ubuntu 14.04 LTSでネットワーク経由でUDPストリームを読み取るために、aruco経由でopencvを使用しようとしています。「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
ここでこのバグを見つけましたhttp://code.opencv.org/issues/3953 しかし、私の場合、解決策は役に立ちません。
Python で GStreamer パイプラインを直接 (aruco と opencv なしで) 開始すると、動作します。
GStreamer は、cmake の出力によると、opencv によって検出されました。
-- 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)