#include "PerimeterAlarmManager.h"
|
#include <basic/core/JsonFile.h>
|
#include <basic/util/app/AppPreference.hpp>
|
#include <map>
|
#include <mutex>
|
#include <sys/time.h>
|
#include "../VideoServer/QiaoJia/DB/LDBTool.h"
|
#include <basic/util/fastdfs/FastFds.hpp>
|
PerimeterAlarmManager::PerimeterAlarmManager(LDBTool *lDBTool):
|
m_lDBTool(lDBTool)
|
{
|
init();
|
}
|
|
PerimeterAlarmManager::~PerimeterAlarmManager()
|
{
|
PA_removeAll();
|
}
|
|
|
void PerimeterAlarmManager::printConfigInfo(const ControllerConfig& config)
|
{
|
//INFO("nFps "<<config.camInfo.nFps);
|
|
// INFO("strRtsp "<<config.camInfo.strRtsp);
|
// INFO("nTriggerDelay "<<config.paAlarmInfo.nTriggerDelay);
|
// INFO("nAlarmDelay "<<config.paAlarmInfo.nAlarmDelay);
|
// INFO("fSensitivity "<<config.paAlarmInfo.fSensitivity);
|
// INFO("strMaskPath "<<config.paAlarmInfo.strMaskPath);
|
// INFO("nAssembleCount "<<config.paAlarmInfo.nAssembleCount);
|
|
|
// for(auto ele:config.assembleInfo.sounds)
|
// {
|
// INFO("soundPlayInfo.nID "<<ele.strIP);
|
// INFO("soundPlayInfo.nSoundDuration "<<ele.nSoundDuration);
|
// INFO("soundPlayInfo.strPath "<<ele.strPath);
|
// }
|
}
|
|
|
int PerimeterAlarmManager::PA_addCamera(int index, const ControllerConfig& config)
|
{
|
static int gpucount = 0;
|
|
gpucount++;
|
|
if(g_mapControls[index] == nullptr)
|
{
|
auto control = new AppPaController(index,config);
|
g_mapControls[index] = control;
|
control->start();
|
return 0;
|
}else{
|
PA_removeCamera(index);
|
return PA_addCamera(index, config);
|
}
|
}
|
|
int PerimeterAlarmManager::PA_removeCamera(int index)
|
{
|
INFO("PA_removeCamera remove_index : "<<index);
|
if(g_mapControls[index] != nullptr)
|
{
|
AppPaController* control = g_mapControls[index];
|
control->stop();
|
control->wait();
|
delete control;
|
g_mapControls[index] = nullptr;
|
g_mapControls.erase(index);
|
return 0;
|
}
|
return -1;
|
}
|
|
int PerimeterAlarmManager::PA_removeAll()
|
{
|
INFO("PA_removeAll");
|
for(auto iter = g_mapControls.begin();iter!=g_mapControls.end();iter++){
|
AppPaController* control = iter->second;
|
if(nullptr!=control)
|
{
|
control->stop();
|
control->wait();
|
delete control;
|
}
|
control = nullptr;
|
}
|
g_mapControls.clear();
|
return 0;
|
}
|
|
|
|
|
bool PerimeterAlarmManager::PA_hasIndex(int index)
|
{
|
return g_mapControls[index] != nullptr;
|
}
|
|
|
static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
|
std::string passwd, std::string brand) {
|
std::string rtsp_url;
|
if (brand == "haikang") {
|
rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
|
"/h264/ch1/main/av_stream";
|
} else if (brand == "dahua") {
|
//rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
|
rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
|
"/cam/realmonitor?channel=1&subtype=0";
|
//TODO
|
} else if (brand == "yushi") {
|
rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
|
"/video1";
|
} else {
|
//TODO
|
}
|
|
return rtsp_url;
|
}
|
|
void PerimeterAlarmManager::init()
|
{
|
auto lst = m_lDBTool->searchCamDevTableAll();
|
auto lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
|
|
appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration);
|
|
if (lst.size() > 0)
|
{
|
Json::Value json;
|
Json::Value rules;
|
for (auto item : lst)
|
{
|
int camId=item.str_cam_dev_id.toInt();
|
AlarmRule rule=m_lDBTool->searchCameraRuleByCamId(camId);
|
QVector<LActRuleWeekRecord> vec=m_lDBTool->searchCameraWeekRuleByCamId(camId);
|
ControllerConfig config;
|
for(int i=0;i<vec.size();++i)
|
{
|
RuleWeekInfo info;
|
info.m_nType=vec[i].m_nType;
|
info.m_strBegin=vec[i].m_strBegin;
|
info.m_strEnd=vec[i].m_strEnd;
|
config.ruleWeekInfoVec.push_back(info);
|
}
|
|
|
config.camInfo.strCamId= item.str_cam_dev_id.toStdString();
|
|
|
config.camInfo.strRtsp= rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(),
|
item.str_password.toStdString(), item.str_brand.toStdString());
|
|
config.camInfo.strAdrr = item.str_addr.toStdString();
|
|
config.paAlarmInfo.fSensitivity=rule.sensitivity;
|
config.paAlarmInfo.nAlarmDelay=rule.alarm_delay;
|
config.paAlarmInfo.nTriggerDelay=rule.trigger_delay;
|
config.paAlarmInfo.strMaskPath=rule.str_mask_path;
|
config.paAlarmInfo.nAssembleCount=rule.assemble_count;
|
|
PA_addCamera(camId, config);
|
}
|
}
|
else
|
{
|
ERR("searchCamDevTableAll size is 0");
|
}
|
}
|
std::string PerimeterAlarmManager::resetFdfs(std::string ip, unsigned int port, std::string content) {
|
|
std::thread reset([&]() {
|
fdfsClient.rwLock.rdlock();
|
if (fdfsClient.fastFds != nullptr) {
|
delete fdfsClient.fastFds;
|
}
|
fdfsClient.fastFds = new FastFds("fastDfsClient.conf");
|
fdfsClient.rwLock.unlock();
|
});
|
reset.detach();
|
|
return "";
|
}
|