2017-09-21 4 views
0

Ich habe ein laufendes Projekt Zugriff auf mehrere IP-Kameras durch opencv VideoCapture, arbeiten für die meisten von ihnen.OpenCV VideoCapture Digest Authentifizierung

Ich habe eine neue Dahua PTZ-Kamera, die Digest-Authentifizierung verwendet, und die VideoCapture in OpenCV kann es nicht öffnen. Durch WireShark konnte ich sehen, dass die Kamera einen 401 Unaothorized zurückgibt.

Ich habe nichts über OpenCV Dokumentation über Auth Probleme gefunden.

Vielleicht muss ich etwas anderes verwenden, das nicht OpenCV ist, um das zu lösen?

Hier ist ein Mindestarbeitscode (wenn Sie eine Kamera zum Testen haben).

#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); 
    } 
} 

Und hier ist die Kamera Antwort:

HTTP Unaothorized Response

+1

Welche API verwendet die 'VideoCapture'? – zindarod

+0

versuchte alle drei ohne Erfolg (CAP_IMAGES, CAP_DSHOW und CAP_FFMPEG) – Diedre

+0

Versuchen Sie, Zugriff auf die Kamera über 'FFMPEG' oder 'Gstreamer' Befehlszeile zuerst. Nachdem Sie eine funktionierende Pipeline gefunden haben, übersetzen Sie diese Pipeline in die 'VideoCapture'-Eingabe, was einfach ist. Aber du musst OpenCV mit 'FFMPEG' oder' Gstreamer' gebaut haben, damit die Pipeline mit 'VideoCapture' funktioniert. – zindarod

Antwort

0

Ich löste das Problem, indem sie den RTSP-Stream statt der http-Bild der Kamera verwendet wird. Danke! (Wenn Sie dieses Problem in Ihrer IP-Kamera haben, versuchen Sie den RTSP-Stream, sollten sie einen Befehl in der Dokumentation haben).

Schlussarbeits Code in meiner Dahua Kamera:

#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); 

} 

Aus irgendeinem Grund opencv kann den Digest-Authentifizierung durchführen, wenn RTSP verwendet wird.

Verwandte Themen