OpenCV VideoCapture 摘要认证
OpenCV VideoCapture digest authentication
我有一个正在进行的项目,通过 opencv VideoCapture 访问多个 IP 摄像机,为其中的大多数工作。
我新买了一台大华云台,使用的是digest认证,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);
}
}
这是相机响应:
我通过使用相机的 rtsp 流而不是 http 图像解决了这个问题。谢谢你! (如果你的网络摄像头有这个问题,试试 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);
}
由于某些原因,opencv 在使用 rtsp 时可以执行摘要认证。
我有一个正在进行的项目,通过 opencv VideoCapture 访问多个 IP 摄像机,为其中的大多数工作。
我新买了一台大华云台,使用的是digest认证,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);
}
}
这是相机响应:
我通过使用相机的 rtsp 流而不是 http 图像解决了这个问题。谢谢你! (如果你的网络摄像头有这个问题,试试 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);
}
由于某些原因,opencv 在使用 rtsp 时可以执行摘要认证。