OpenCV VideoCapture 摘要认证

Die*_*dre 4 c++ opencv digest-authentication ip-camera opencv3.3

我有一个正在进行的项目,通过 opencv VideoCapture 访问多个 IP 摄像机,适用于大多数摄像机。

我有一个新的大华 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:password@111.111.111.111/cgi-bin/snapshot.cgi");
        if(!cap.isOpened()){
            cout << "bug" << endl;
            continue;
        }
        Mat frame;
        cap >> frame;
        imshow("test", frame);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是相机的响应:

HTTP 未经授权的响应

Die*_*dre 6

我通过使用相机的rtsp流而不是http图像解决了这个问题。谢谢你!(如果您的 ip 摄像机遇到此问题,请尝试使用 rtsp 流,文档中应该有一个命令)。

我的大华相机中的最终工作代码:

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

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

}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,opencv 在使用 rtsp 时可以执行摘要身份验证。