修改了大华sdk的实现方式
提高了大华接口的调用速度
This commit is contained in:
parent
005ce8cb29
commit
50af73c593
@ -6,7 +6,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "dahua/dhnetsdk.h"
|
|
||||||
|
|
||||||
#define DH_CHANNEL 0
|
#define DH_CHANNEL 0
|
||||||
|
|
||||||
@ -23,6 +23,8 @@ private:
|
|||||||
std::mutex usable_mutex_;
|
std::mutex usable_mutex_;
|
||||||
std::mutex operate_mutex_;
|
std::mutex operate_mutex_;
|
||||||
|
|
||||||
|
bool connected_ = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef std::shared_ptr<DaHua> Ptr;
|
typedef std::shared_ptr<DaHua> Ptr;
|
||||||
|
|
||||||
@ -39,6 +41,16 @@ public:
|
|||||||
~DaHua() override;
|
~DaHua() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
bool connected() {
|
||||||
|
std::lock_guard<std::mutex> lock(usable_mutex_);
|
||||||
|
return connected_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_connect(bool connected) {
|
||||||
|
std::lock_guard<std::mutex> lock(usable_mutex_);
|
||||||
|
connected_ = connected;
|
||||||
|
}
|
||||||
|
|
||||||
PTZ_INFO::Ptr get_ptz_range() override;
|
PTZ_INFO::Ptr get_ptz_range() override;
|
||||||
|
|
||||||
PTZ_INFO::Ptr get_ptz() override;
|
PTZ_INFO::Ptr get_ptz() override;
|
||||||
@ -113,8 +125,6 @@ private:
|
|||||||
void login();
|
void login();
|
||||||
|
|
||||||
void logout();
|
void logout();
|
||||||
|
|
||||||
fDisConnect dis_connect_callback_ = nullptr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace CC
|
} // namespace CC
|
@ -6,7 +6,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "hikvision/HCNetSDK.h"
|
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "DaHua.h"
|
#include "DaHua.h"
|
||||||
|
#include "dahua/dhnetsdk.h"
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
@ -63,7 +64,13 @@ bool DaHua::snapshot(const std::string &path) {
|
|||||||
|
|
||||||
DaHua::DaHua(std::string ip, std::string username, std::string password)
|
DaHua::DaHua(std::string ip, std::string username, std::string password)
|
||||||
: ip_(std::move(ip)), username_(std::move(username)), password_(std::move(password)) {
|
: ip_(std::move(ip)), username_(std::move(username)), password_(std::move(password)) {
|
||||||
CLIENT_Init(dis_connect_callback_, (LDWORD)this);
|
CLIENT_Init(
|
||||||
|
[](LLONG lLoginID, char *ip, LONG port, LDWORD dwUser) {
|
||||||
|
// 断线重连
|
||||||
|
((DaHua *)dwUser)->set_connect(false);
|
||||||
|
((DaHua *)dwUser)->login();
|
||||||
|
},
|
||||||
|
(LDWORD)this);
|
||||||
login();
|
login();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,6 +87,9 @@ void DaHua::login() {
|
|||||||
out_param.dwSize = sizeof(out_param);
|
out_param.dwSize = sizeof(out_param);
|
||||||
|
|
||||||
login_handle_ = CLIENT_LoginWithHighLevelSecurity(&in_param, &out_param);
|
login_handle_ = CLIENT_LoginWithHighLevelSecurity(&in_param, &out_param);
|
||||||
|
if (login_handle_ > 0) {
|
||||||
|
set_connect(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaHua::move_up(float speed) {
|
void DaHua::move_up(float speed) {
|
||||||
@ -140,17 +150,7 @@ void DaHua::move_up() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool DaHua::usable() {
|
bool DaHua::usable() {
|
||||||
std::unique_lock<std::mutex> lock(usable_mutex_);
|
return connected() && login_handle_ > 0;
|
||||||
if (login_handle_ > 0) {
|
|
||||||
// 如果已经是登录过的重新尝试登录避免因为超时导致的操作失败
|
|
||||||
logout();
|
|
||||||
login();
|
|
||||||
}
|
|
||||||
if (login_handle_ <= 0) {
|
|
||||||
login();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PTZ_INFO::Ptr DaHua::get_ptz_range() {
|
PTZ_INFO::Ptr DaHua::get_ptz_range() {
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "HikVision.h"
|
#include "HikVision.h"
|
||||||
|
#include "hikvision/HCNetSDK.h"
|
||||||
|
|
||||||
namespace CC {
|
namespace CC {
|
||||||
|
|
||||||
|
@ -5,9 +5,10 @@
|
|||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
auto cam = CC::make_dahua_camera("192.168.163.4", "admin", "eccom123");
|
auto cam = CC::make_dahua_camera("192.168.163.4", "admin", "eccom123");
|
||||||
std::cout<<cam->get_ptz_info()->str()<<std::endl;
|
std::cout<<cam->get_fov_info()->str()<<std::endl;
|
||||||
cam->zoom(50);
|
cam->zoom(50);
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds (10000));
|
std::this_thread::sleep_for(std::chrono::milliseconds (10000));
|
||||||
std::cout<<cam->get_ptz_info()->str()<<std::endl;
|
cam->zoom(0);
|
||||||
|
std::cout<<cam->get_fov_info()->str()<<std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user