2017-09-21 83 views
0

私はopencv VideoCaptureを介して複数のIPカメラにアクセスしているプロジェクトを進行中にしています。OpenCV VideoCaptureダイジェスト認証

私はダイジェスト認証を使用する新しいDahua PTZカメラを手に入れました.OpenCVのVideoCaptureはそれを開くことができません。 WireSharkを通じて私はカメラが401 Unaothorizedを返すことがわかりました。

私はOpenCVのドキュメントで認証問題について何も見つかりませんでした。

多分私はこれを解決するためにOpenCV以外の何かを使用する必要がありますか?

ここに、(テストするカメラを持っている)最小作業コードがあります。

#include <iostream> 
#include <imgproc.hpp> 
#include <opencv.hpp> 
#include <highgui.hpp> 

using namespace std; 
using namespace cv; 
int main(){ 
    while(1){ 
     VideoCapture cap("http://login:[email protected]/cgi-bin/snapshot.cgi"); 
     if(!cap.isOpened()){ 
      cout << "bug" << endl; 
      continue; 
     } 
     Mat frame; 
     cap >> frame; 
     imshow("test", frame); 
    } 
} 

そして、ここでカメラのレスポンスです:

HTTP Unaothorized Response

+1

どのAPIが 'VideoCapture'を使用していますか? – zindarod

+0

は3つすべて無駄にしました(CAP_IMAGES、CAP_DSHOW、CAP_FFMPEG) – Diedre

+0

最初に 'FFMPEG'または' Gstreamer'コマンドラインでカメラにアクセスしてみてください。作業中のパイプラインを見つけたら、そのパイプラインを 'VideoCapture'入力に変換します。これは簡単です。しかし、あなたは 'VideoCapture'で動作するように' FFMPEG'または 'Gstreamer'でOpenCVをビルドしなければなりません。 – zindarod

答えて

0

私は、HTTPではなく画像のカメラのRTSPストリームを使用して問題を解決しました。ありがとうございました! (あなたのIPカメラでこの問題が発生した場合は、rtspストリームを試してください。ドキュメンテーションにコマンドがあるはずです)。私の大化カメラで

最終作業コード:RTSPを使用している場合、いくつかの理由のためにOpenCVの

#include <iostream> 
#include <imgproc.hpp> 
#include <opencv.hpp> 
#include <highgui.hpp> 
using namespace std; 
using namespace cv; 
int main(){ 
    VideoCapture cap("rtsp://login:[email protected]/cam/realmonitor?channel=1?subtype=0"); 
    if(!cap.isOpened()){ 
     cout << "bug" << endl; 
     return 1; 
    } 

    Mat frame; 
    cap >> frame; 
    imshow("test", frame); 

} 

は、ダイジェスト認証を行うことができます。

関連する問題