2017-09-21 126 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时,执行摘要式身份验证。