//
|
// Created by ps on 18-9-26.
|
//
|
|
#include "RtspAnalysElement.h"
|
|
#include <basic/http_server/HttpSrvRetRecieve.hpp>
|
|
using std::string;
|
|
//RtspAnalysElement::RtspAnalysElement() {}
|
|
std::string RtspAnalysElement::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 "";
|
}
|
|
RtspAnalysElement::RtspAnalysElement(LDBTool *_dbTool) : m_lDBTool(_dbTool), maxCount(50), currentCount(0) {
|
init();
|
resetFdfs();
|
{
|
// std::thread httpServer([&]() {
|
// //#todo port
|
// HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 12306, 1);
|
// httpSrvRetRecieve.setInfo("^/resetFdfs$", "POST", std::bind(&RtspAnalysElement::resetFdfs, this,
|
// std::placeholders::_1,
|
// std::placeholders::_2,
|
// std::placeholders::_3));
|
// httpSrvRetRecieve.start();
|
// httpSrvRetRecieve.waitForShutDown();
|
// });
|
// httpServer.detach();
|
}
|
}
|
|
#define SETSCORE(VEC, POS, IDENT) appPref.setFloatData(IDENT, POS >= VEC.size() ? 80 : VEC[POS]);
|
//#define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 0.1 : appPref.getFloatData(IDENT);
|
|
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 RtspAnalysElement::init() {
|
Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
|
#ifndef GB28181
|
auto lst = m_lDBTool->searchCamDevTableAll();
|
|
appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration);
|
appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration);
|
if (lst.size() > 0) {
|
Json::Value json;
|
int startCamNO = appPref.getIntData("CamStart") * appPref.getIntData("CamStep");
|
int CamCount = appPref.getIntData("CamStep");
|
auto itor = lst.begin();
|
|
if (startCamNO >= lst.size()) {
|
ERR("startCamNO > lst.size()");
|
return;
|
}
|
|
for (int i = 0; i < startCamNO; i++) {
|
itor++;
|
}
|
|
for (int i = 0; i < CamCount; i++) {
|
if (itor == lst.end()) {
|
ERR("itor == lst.end()");
|
return;
|
}
|
std::string t_camIdex = itor->str_cam_dev_id.toStdString();
|
std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(),
|
itor->str_password.toStdString(), itor->str_brand.toStdString());
|
SdkRuleMap ruleMap = m_lDBTool->searchSdkRuleByCamId(itor->str_cam_dev_id);
|
for (auto &rule:ruleMap) {
|
|
rule.second.strAddr = itor->str_addr;
|
rule.second.weekRuleVec = m_lDBTool->searchCameraWeekRuleByCamId(itor->str_cam_dev_id, rule.first);
|
|
if (rule.second.nSdkType == PerStaticSdk) {
|
float temp = 1 - (float) (rule.second.nThreshold) / 100;
|
rule.second.fSensitivity = (75 + 25 * temp) / 100;
|
|
} else if (rule.second.nSdkType != FaceSdk) {
|
float temp = 1 - (float) (rule.second.nThreshold) / 100;
|
rule.second.fSensitivity = (5 + 90 * temp) / 100;
|
}
|
// if (rule.second.nThreshold < 5 )
|
// {
|
// rule.second.fSensitivity=0.95;
|
// }
|
// else if(rule.second.nThreshold > 95)
|
// {
|
// rule.second.fSensitivity=0.05;
|
// }
|
// else
|
// {
|
// rule.second.fSensitivity = 1-(float) (rule.second.nThreshold) / 100;
|
// }
|
|
DBG("fSensitivity" << rule.second.fSensitivity);
|
}
|
appPref.setStringData(t_camIdex + "rtsp", rtsp_url);
|
// appPref.setStringData(t_camIdex+"addr", item.str_addr.toStdString());
|
json["rtsp"] = rtsp_url;
|
// json["addr"] = item.str_addr.toStdString();
|
|
INFO("cam add is " << itor->str_addr.toStdString());
|
|
addCamera(t_camIdex, ruleMap);
|
itor++;
|
}
|
// for (auto item : lst) {
|
// std::string t_camIdex = item.str_cam_dev_id.toStdString();
|
// std::string rtsp_url = rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(),
|
// item.str_password.toStdString(), item.str_brand.toStdString());
|
// SdkRuleMap ruleMap = m_lDBTool->searchSdkRuleByCamId(item.str_cam_dev_id);
|
// for (auto &rule:ruleMap) {
|
//
|
// rule.second.strAddr = item.str_addr;
|
// rule.second.weekRuleVec = m_lDBTool->searchCameraWeekRuleByCamId(item.str_cam_dev_id, rule.first);
|
//
|
// if(rule.second.nSdkType == PerStaticSdk)
|
// {
|
// float temp=1-(float)(rule.second.nThreshold)/100;
|
// rule.second.fSensitivity=(75+25*temp)/100;
|
//
|
// }
|
// else if(rule.second.nSdkType != FaceSdk)
|
// {
|
// float temp=1-(float)(rule.second.nThreshold)/100;
|
// rule.second.fSensitivity=(5+90*temp)/100;
|
// }
|
//// if (rule.second.nThreshold < 5 )
|
//// {
|
//// rule.second.fSensitivity=0.95;
|
//// }
|
//// else if(rule.second.nThreshold > 95)
|
//// {
|
//// rule.second.fSensitivity=0.05;
|
//// }
|
//// else
|
//// {
|
//// rule.second.fSensitivity = 1-(float) (rule.second.nThreshold) / 100;
|
//// }
|
//
|
// DBG("fSensitivity" << rule.second.fSensitivity);
|
// }
|
// appPref.setStringData(t_camIdex + "rtsp", rtsp_url);
|
// // appPref.setStringData(t_camIdex+"addr", item.str_addr.toStdString());
|
// json["rtsp"] = rtsp_url;
|
// // json["addr"] = item.str_addr.toStdString();
|
//
|
// INFO("cam add is " << item.str_addr.toStdString());
|
//
|
// addCamera(t_camIdex, ruleMap);
|
// }
|
} else {
|
ERR("searchCamDevTableAll size is 0");
|
}
|
|
#else
|
auto lst = m_lDBTool->searchCamDevTableByType(1);
|
|
appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration);
|
appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration);
|
if (lst.size() > 0) {
|
// Json::Value json;
|
|
for (auto &item : lst) {
|
std::string t_camIdex = item.str_cam_dev_id.toStdString();
|
std::string rtsp_url = "GB28181";
|
// rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(),
|
// item.str_password.toStdString(), item.str_brand.toStdString());
|
SdkRuleMap ruleMap = m_lDBTool->searchSdkRuleByCamId(item.str_cam_dev_id);
|
for (auto &rule:ruleMap) {
|
|
rule.second.strAddr = item.str_addr;
|
rule.second.weekRuleVec = m_lDBTool->searchCameraWeekRuleByCamId(item.str_cam_dev_id, rule.first);
|
|
if (rule.second.nSdkType == PerStaticSdk) {
|
float temp = 1 - (float) (rule.second.nThreshold) / 100;
|
rule.second.fSensitivity = (75 + 25 * temp) / 100;
|
|
} else if (rule.second.nSdkType != FaceSdk) {
|
float temp = 1 - (float) (rule.second.nThreshold) / 100;
|
rule.second.fSensitivity = (5 + 90 * temp) / 100;
|
}
|
DBG("fSensitivity" << rule.second.fSensitivity);
|
}
|
appPref.setStringData(t_camIdex + "rtsp", rtsp_url);
|
// appPref.setStringData(t_camIdex+"addr", item.str_addr.toStdString());
|
// json["rtsp"] = rtsp_url;
|
// json["addr"] = item.str_addr.toStdString();
|
|
INFO("cam add is " << item.str_addr.toStdString());
|
|
addCamera(t_camIdex, ruleMap);
|
}
|
} else {
|
ERR("searchCamDevTableAll size is 0");
|
}
|
|
#endif
|
}
|
|
RtspAnalysElement::~RtspAnalysElement() {
|
for (auto controller: controllers) {
|
delete controller.second;
|
}
|
controllers.clear();
|
}
|
|
int RtspAnalysElement::addCamera(const std::string &index, const std::map<int, SdkRule> &sdkRuleMap) {
|
if (controllers.find(index) == controllers.end()) {
|
if (currentCount >= maxCount) {
|
ERR("addCamera faild, camera's num is full!")
|
return -1;
|
}
|
|
controllers[index] = new AppPipeController(index, sdkRuleMap, true);
|
controllers[index]->setfdfsClient(&fdfsClient);
|
controllers[index]->start();
|
currentCount++;
|
return 0;
|
|
} else {
|
removeCamera(index);
|
DBG("removeCamera " << index)
|
return addCamera(index, sdkRuleMap);
|
}
|
}
|
|
int RtspAnalysElement::removeCamera(const std::string &index) {
|
if (controllers.find(index) == controllers.end())return -1;
|
auto controller = controllers[index];
|
controller->stop();
|
controller->wait();
|
delete controller;
|
controllers.erase(index);
|
currentCount--;
|
return 0;
|
}
|
|
int RtspAnalysElement::removeAll() {
|
for (auto controller: controllers) {
|
controller.second->stop();
|
}
|
for (auto controller: controllers) {
|
controller.second->wait();
|
delete controller.second;
|
}
|
controllers.clear();
|
currentCount = 0;
|
return 0;
|
}
|
|
int RtspAnalysElement::getMaxCamCount() {
|
return maxCount;
|
}
|
|
int RtspAnalysElement::getCurrentCamCount() {
|
return currentCount;
|
}
|
|
std::string RtspAnalysElement::getRtmp(std::string &index) {
|
if (controllers.find(index) == controllers.end())return "";
|
auto controller = controllers[index];
|
return controller->getRtmp();
|
}
|
|
|
std::vector<int> RtspAnalysElement::chnString2Vec(std::string str_list) {
|
std::vector<int> result;
|
char *property_list = const_cast<char *>(str_list.c_str());
|
const char *c_Analyse = ",";
|
char *t_property;
|
|
char *t_save = NULL;
|
t_property = strtok_r(property_list, c_Analyse, &t_save);
|
|
while (t_property) {
|
std::string str_pro(t_property);
|
|
result.push_back(atoi(str_pro.c_str()));
|
|
t_property = strtok_r(t_save, c_Analyse, &t_save);
|
|
}
|
return result;
|
}
|
|
//void RtspAnalysElement::setDataByType(Json::Value& json,const SdkRule& rule)
|
//{
|
// std::string camId=rule.strCamId.toStdString();
|
// sdkRuleMap[rule.nSdkType].weekRuleVec=m_lDBTool->searchCameraWeekRuleByCamId(rule.strCamId,rule.nSdkType);
|
// switch (rule.nSdkType)
|
// {
|
// case FaceSdk:
|
// {
|
// json["face.enable"] = "1";
|
|
// appPref.setFloatData(camId+"face.det",rule.nQuality);
|
// appPref.setFloatData(camId+"face.cmp",rule.nThreshold);
|
|
|
|
// break;
|
// }
|
// case CarSdk:
|
// {
|
// // DBG("XX.enable " << "1");
|
|
// appPref.setFloatData(camId+"xx.det",rule.nQuality);
|
// appPref.setFloatData(camId+"xx.cmp",rule.nThreshold);
|
|
// break;
|
// }
|
// case YoloSdk:
|
// {
|
// json["yolo.enable"] = "1";
|
// appPref.setFloatData(camId+"yolo.det",rule.nQuality);
|
// appPref.setFloatData(camId+"yolo.cmp",rule.nThreshold);
|
|
// break;
|
// }
|
// case PerimeterSdk:
|
// {
|
// // auto rule=m_lDBTool->searchPerimeterRuleByCamId(camId);
|
// json["perimeter.enable"] = 1;
|
// json["perimeter.area"]=rule.strAreas.toStdString();
|
// json["perimeter.num"]=rule.nAlarmNumLowerLimit;
|
|
// json["perimeter.delay"]=rule.nTriggerDelay;
|
// json["perimeter.tolerance"]=rule.nTriggerTolerance;
|
// appPref.setFloatData(camId+"perimeter.det",rule.nQuality);
|
// appPref.setFloatData(camId+"perimeter.cmp",rule.nThreshold);
|
|
|
// break;
|
// }
|
// case CrowdSdk:
|
// {
|
// json["crowd.enable"] = 1;
|
// json["crowd.area"]=rule.strAreas.toStdString();
|
// json["crowd.num"]=rule.nAlarmNumLowerLimit;
|
// json["crowd.delay"]=rule.nTriggerDelay;
|
// json["crowd.tolerance"]=rule.nTriggerTolerance;
|
// appPref.setFloatData(camId+"crowd.det",rule.nQuality);
|
// appPref.setFloatData(camId+"crowd.cmp",rule.nThreshold);
|
|
// break;
|
// }
|
// case KeepRightSdk:
|
// {
|
// json["keepRight.enable"] = 1;
|
// json["keepRight.leftArea"]=rule.strAreas.toStdString();
|
// json["keepRight.leftLine"]=rule.strLine.toStdString();
|
// json["keepRight.rightArea"]=rule.strExAreas.toStdString();
|
// json["keepRight.rightLine"]=rule.strExLine.toStdString();
|
// json["keepRight.delay"]=rule.nTriggerDelay;
|
// json["keepRight.tolerance"]=rule.nTriggerTolerance;
|
// appPref.setFloatData(camId+"keepRight.det",rule.nQuality);
|
// appPref.setFloatData(camId+"keepRight.cmp",rule.nThreshold);
|
// break;
|
// }
|
// default:
|
// break;
|
// }
|
//}
|