2017-09-21 160 views
0

我有一個正在進行的項目通過opencv VideoCapture訪問多個IP攝像頭,爲他們中的大多數工作。OpenCV VideoCapture摘要認證

我有一臺新的大華雲臺攝像機使用摘要認證,並且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

嘗試所有三種方法無效(CAP_IMAGES,CAP_DSHOW和CAP_FFMPEG) – Diedre

+0

嘗試先通過FFMPEG或Gstreamer命令行訪問攝像機。找到工作流水線後,將該流水線轉換爲'VideoCapture'輸入,這很容易。但你必須用'FFMPEG'或'Gstreamer'構建OpenCV才能使管道與'VideoCapture'一起工作。 – zindarod

回答

0

我用相機的RTSP流,而不是HTTP圖像的解決了這個問題。謝謝! (如果你的ip camera有這個問題,試試rtsp流,他們應該在文檔中有一個命令)。在我的大華攝像機

最後的工作代碼:

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

} 

出於某種原因,OpenCV的使用RTSP時,執行摘要式身份驗證。