У меня есть постоянный проект доступа к нескольким IP-камерам через opencv VideoCapture, работающий для большинства из них.
У меня новая PTZ-камера Dahua, использующая дайджест-проверку подлинности, и VideoCapture в OpenCV не может ее открыть. Через 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);
}
}
А вот и ответ камеры:
Я решил проблему, используя поток rtsp камеры вместо изображения http. благодарю вас! (если у вас есть эта проблема в вашей IP-камере, попробуйте поток rtsp, они должны иметь команду в документации).
Окончательный рабочий код в моей камере Dahua:
#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.
Других решений пока нет …