3

私は OpenCV と Gstreamer で大量のスレッドを調べましたが、問題を自分のエラーで解決することはできません。OpenCV で Gstreamer パイプラインを開こうとしています。GStreamer で OpenCV をビルドしましたが、OpenCV が正常にビルドされたことを示す CMake ステップで YES と表示されます。ストリームを取得するコマンドはコマンド ラインから正常に動作しますが、フレームを表示するだけで 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 での私の構文 (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 が報告: 出力ウィンドウが閉じられましたsrc/cap_gstreamer.cpp、383 行目は「cv::Exception」のインスタンスをスローした後に呼び出されて終了します。 383: エラー: (-2) GStreamer: 関数 icvStartPipeline でパイプラインを開始できません

私が少なくとも 20 回の Stack 投稿を行ってきましたが、OpenCV で Gstreamer を有効にしたことを除いて、私が開始した時点にはまだ近づいていません。さまざまなバージョンの OpenCV も試しました。

ありがとう

4

1 に答える 1

1

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

今日、Gstreamer のドキュメントをさらに掘り下げた後、問題を解決しました。videoconvert を追加することで問題が解決しました。Gstreamer のドキュメントによると、videoconvert はデータを appink に適した形式に自動的に変換します。これにより、OpenCV VideoCapture で正しく読み取ることができます。

于 2017-12-25T02:00:52.183 に答える