QiaoJiaSystem/DataManagerServer/http_configserver.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -1119,6 +1119,17 @@ if (DEV_NO_TYPE == dev_type) {//add new camera db_c.updateConfigTableByDevType(DEV_CAMERA); { //#todo // std::string topic = "VideoToImageMulth"; // std::string topic1 = "VideoAnalysFromHC"; // Json::Value json_cfg; // json_cfg["cam_edit"] = content; // std::string msg = json_cfg.toStyledString(); // DBG("msg:" << msg); // nsqMsgProducer->Publish(topic, (void *) (&msg)); // nsqMsgProducer->Publish(topic1, (void *) (&msg)); } runAllApp(); } //edit camera's sdks @@ -1126,9 +1137,20 @@ (rec_sdk_old.str_det_thr != rec_sdk.str_det_thr) || (rec_sdk_old.str_cmp_thr != rec_sdk.str_cmp_thr)) */ { killVideoAnalysFromHCApp(); sleep(1); runAllApp(); //#todo sendMessage To haikang&VideoToImage { std::string topic = "VideoToImageMulth"; std::string topic1 = "VideoAnalysFromHC"; Json::Value json_cfg; json_cfg["cam_edit"] = content; std::string msg = json_cfg.toStyledString(); DBG("msg:" << msg); nsqMsgProducer->Publish(topic, (void *) (&msg)); nsqMsgProducer->Publish(topic1, (void *) (&msg)); } // killVideoAnalysFromHCApp(); // sleep(1); // runAllApp(); } Json::Value value_out; @@ -1408,12 +1430,22 @@ QString cam_id = QString::fromStdString(value_reader["str_cam_dev_id"].asString()); int ret = db_c.deleteCamDevandSdkByCamID(cam_id); if (ret) { killVideoAnalysFromHCApp(); // killVideoAnalysFromHCApp(); int dev_record = db_c.searchCamDevNumber(); if (dev_record == 0) { db_c.updateConfigTableByDevType(DEV_NO_TYPE); } else { runAllApp(); // runAllApp(); } { std::string topic = "VideoToImageMulth"; std::string topic1 = "VideoAnalysFromHC"; Json::Value json_cfg; json_cfg["cam_del"] = content; std::string msg = json_cfg.toStyledString(); DBG("msg:" << msg); nsqMsgProducer->Publish(topic, (void *) (&msg)); nsqMsgProducer->Publish(topic1, (void *) (&msg)); } return "{\"ret_status\": \"ok_ack\"}"; } else { QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt
@@ -162,11 +162,15 @@ # cudart # cublas opencv_world # jsoncpp # jsoncpp curl uuid pthread hiredis #mq event evnsq evpp_concurrentqueue ) include_directories( @@ -211,6 +215,9 @@ /usr/include/x86_64-linux-gnu/qt5/QtSql/ ../../BasicPlatForm/libs/hiredis-master/include #nsq ../../../BasicPlatForm/libs/EvnsqTool/include ../../../BasicPlatForm/libs/libevent/include ) link_directories( @@ -228,6 +235,9 @@ ../../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom/ ../../../BasicPlatForm/libs/libboost/lib ../../../BasicPlatForm/libs/hiredis-master/lib/ #nsq ../../../BasicPlatForm/libs/EvnsqTool/lib ../../../BasicPlatForm/libs/libevent/lib ) add_executable(${PROJECT_NAME} QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -29,6 +29,17 @@ resetFdfs(); init(); { IMPORT_APP_ARGS; //nsq set callback func DBG("NsqMsgConsumer Init"); string pName(argv[0]); nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", pName, to_string(appPref.getIntData("RpcVTIMPort"))); nsqMsgConsumer->setMessageCallback(std::bind(&OnMsgFunc, std::placeholders::_1, this)); nsqMsgConsumer->init(); DBG("NsqMsgConsumer Init END!!"); } { // std::thread httpServer([&]() { // //#todo port // HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 12306, 1); @@ -67,6 +78,58 @@ return rtsp_url; } void RtspAnalysElement::OnMsgFunc(void *msgPtr, void *pThisPtr) { evnsq::Message *msg = (evnsq::Message *) msgPtr; DBG("Received a message, id=" << msg->id << " message=[" << msg->body.ToString() << "]"); RtspAnalysElement *pthis = (RtspAnalysElement *) pThisPtr; Json::Reader reader; Json::Value value; if (reader.parse(msg->body.ToString(), value)) { auto itor_json_end = value.end(); Json::Value cfg_val; for (auto itor_json = value.begin(); itor_json != itor_json_end; ++itor_json) { //#todo 使用策略模式?发送端多个指令累积后发送? if (itor_json->isString() && reader.parse(itor_json->asString(), cfg_val)) { if (itor_json.name() == "cam_edit") { string cam_idx = cfg_val["str_cam_dev_id"].asString(); if (pthis->controllers.find(cam_idx) != pthis->controllers.end()) { if (pthis->m_GB28181_Enable) { auto lst = pthis->m_lDBTool->searchCamDevTableByType(1); for (auto &item : lst) { if (item.str_cam_dev_id.toStdString() != cam_idx)continue; string rtsp_url = "GB28181"; pthis->addCamWithSearchRuleMap(item, rtsp_url); break; } } else { auto lst = pthis->m_lDBTool->searchCamDevTableByType(0); for (auto &item : lst) { if (item.str_cam_dev_id.toStdString() != cam_idx)continue; std::string rtsp_url = rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(), item.str_password.toStdString(), item.str_brand.toStdString()); pthis->addCamWithSearchRuleMap(item, rtsp_url); break; } } } } else if (itor_json.name() == "cam_del") { string cam_idx = cfg_val["str_cam_dev_id"].asString(); pthis->removeCamera(cam_idx); } } else { DBG("itor value is not string "); continue; } } } else { ERR("Error Message!!"); } } void RtspAnalysElement::init() { m_GB28181_Enable = appPref.getIntData("GB28181_Enable"); @@ -80,7 +143,6 @@ 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("CamStartNO"); int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1; auto itor = lst.begin(); @@ -89,7 +151,6 @@ ERR("startCamNO > lst.size()"); return; } for (int i = 0; i < startCamNO; i++) { itor++; } @@ -99,29 +160,11 @@ ERR("itor == lst.end()"); return; } std::string t_camIdex = itor->str_cam_dev_id.toStdString(); std::string rtsp_url = "GB28181"; auto &item = *itor; SdkRuleMap ruleMap = m_lDBTool->searchSdkRuleByCamId(itor->str_cam_dev_id); for (auto &rule:ruleMap) { string rtsp_url = "GB28181"; addCamWithSearchRuleMap(item, rtsp_url); 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; } DBG("fSensitivity" << rule.second.fSensitivity); } appPref.setStringData(t_camIdex + "rtsp", rtsp_url); INFO("cam add is " << itor->str_addr.toStdString()); addCamera(t_camIdex, ruleMap); itor++; } @@ -160,7 +203,6 @@ 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("CamStartNO"); int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1; auto itor = lst.begin(); @@ -179,30 +221,12 @@ 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) { auto &item = *itor; std::string rtsp_url = rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(), item.str_password.toStdString(), item.str_brand.toStdString()); rule.second.strAddr = itor->str_addr; rule.second.weekRuleVec = m_lDBTool->searchCameraWeekRuleByCamId(itor->str_cam_dev_id, rule.first); addCamWithSearchRuleMap(item, rtsp_url); 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); json["rtsp"] = rtsp_url; INFO("cam add is " << itor->str_addr.toStdString()); addCamera(t_camIdex, ruleMap); itor++; } } else { @@ -212,6 +236,31 @@ } } void RtspAnalysElement::addCamWithSearchRuleMap(const Record_Cam_Dev &item, string rtsp_url) { string t_camIdex = item.str_cam_dev_id.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); INFO("cam add is " << item.str_addr.toStdString()); addCamera(t_camIdex, ruleMap); } RtspAnalysElement::~RtspAnalysElement() { for (auto controller: controllers) { QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h
@@ -11,6 +11,7 @@ #include <VideoServer/QiaoJia/DB/LDBTool.h> #include <basic/util/app/AppPreference.hpp> #include "NsqMsgTool.hpp" class RtspAnalysElement { @@ -36,6 +37,8 @@ private: void init(); static void OnMsgFunc(void *msgPtr, void *pThisPtr); std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = ""); static std::vector<int> chnString2Vec(std::string str_list); @@ -43,6 +46,9 @@ // void setDataByType(Json::Value& json,const SdkRule& rule); private: //nsq BasicMsg::Nsq::NsqMsgConsumer *nsqMsgConsumer; LDBTool *m_lDBTool; int m_GB28181_Enable; std::map<std::string, AppPipeController *> controllers; @@ -51,6 +57,8 @@ FastFdsWithLock fdfsClient; std::map<int, SdkRule> sdkRuleMap; void addCamWithSearchRuleMap(const Record_Cam_Dev &item, string rtsp_url); }; QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -9,126 +9,6 @@ using std::string; void *gRtspAnalysManagerCamera = nullptr; RtspAnalysManager::RtspAnalysManager(LDBTool *_dbTool) : m_lDBTool(nullptr), m_maxCount(50), m_currentCount(0) { // INFO("MYH DEBUG HERE"); m_lDBTool = _dbTool; init(); //nsq set callback func DBG("NsqMsgConsumer Init"); nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", "cut_dura_edit", to_string(appPref.getIntData("RpcVTIMPort"))); nsqMsgConsumer->setMessageCallback(std::bind(&OnMsgFunc, std::placeholders::_1, this)); nsqMsgConsumer->init(); DBG("NsqMsgConsumer Init END!!"); } void RtspAnalysManager::OnMsgFunc(void *msgPtr, void *pThisPtr) { evnsq::Message *msg = (evnsq::Message *) msgPtr; DBG("Received a message, id=" << msg->id << " message=[" << msg->body.ToString() << "]"); RtspAnalysManager *pthis = (RtspAnalysManager *) pThisPtr; Json::Reader reader; Json::Value value; if (reader.parse(msg->body.ToString(), value)) { auto itor_json_end = value.end(); Json::Value cfg_val; for (auto itor_json = value.begin(); itor_json != itor_json_end; ++itor_json) { if (itor_json->isString() && reader.parse(itor_json->asString(), cfg_val)) { if (itor_json.name() == "cut_dura_edit") { int cut_max_duration = cfg_val["cut_max_duration"].asInt(); int cut_min_duration = cfg_val["cut_min_duration"].asInt(); DBG("cut_max_duration: " << cut_max_duration << " cut_min_duration: " << cut_min_duration); appPref.setIntData("n_cut_max_duration", cut_max_duration); appPref.setIntData("n_cut_min_duration", cut_min_duration); DBG("cut_max_duration: " << cut_max_duration << " cut_min_duration: " << cut_min_duration); // m_GB28181_Enable = appPref.getIntData("GB28181_Enable"); //*****************************#todo extract to func ************************************ //#todo GB28181 if (pthis->m_GB28181_Enable) { DBG("searchCamDevTableByType before"); auto lst = pthis->m_lDBTool->searchCamDevTableByType(1); DBG("searchCamDevTableByType size:" << lst.size()); if (lst.size() > 0) { int startCamNO = appPref.getIntData("CamStartNO"); int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1; INFO("StartCamNO: " << startCamNO << " CamCount: " << CamCount); 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(); DBG("-----camID:" << t_camIdex << "min:" << cut_min_duration << "max:" << cut_max_duration); pthis->m_controllers_videoCapElem[t_camIdex]->SetVideoMinMaxSeconds(cut_min_duration, cut_max_duration); itor++; } } else { ERR("searchCamDevTableByType size is 0"); } } else { auto lst = pthis->m_lDBTool->searchCamDevTableByType(0); if (lst.size() > 0) { int startCamNO = appPref.getIntData("CamStartNO"); int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1; INFO("StartCamNO: " << startCamNO << " CamCount: " << CamCount); 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(); DBG("-----camID:" << t_camIdex << "min:" << cut_min_duration << "max:" << cut_max_duration); pthis->m_controllers[t_camIdex]->SetVideoMinMaxSeconds(cut_min_duration, cut_max_duration); itor++; } } else { ERR("searchCamDevTableByType size is 0"); } } //*************************************************************************************** } } else { DBG("itor value is not string "); continue; } } } else { ERR("Error Message!!"); } } static std::string rtspAddrBuild(std::string ip, const int port, std::string username, std::string passwd, std::string brand) { std::string rtsp_url; @@ -150,6 +30,91 @@ return rtsp_url; } RtspAnalysManager::RtspAnalysManager(LDBTool *_dbTool) : m_lDBTool(nullptr), m_maxCount(50), m_currentCount(0) { // INFO("MYH DEBUG HERE"); m_lDBTool = _dbTool; init(); IMPORT_APP_ARGS; //nsq set callback func DBG("NsqMsgConsumer Init"); string pName(argv[0]); nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", pName, to_string(appPref.getIntData("RpcVTIMPort"))); nsqMsgConsumer->setMessageCallback(std::bind(&OnMsgFunc, std::placeholders::_1, this)); nsqMsgConsumer->init(); DBG("NsqMsgConsumer Init END!!"); } void RtspAnalysManager::OnMsgFunc(void *msgPtr, void *pThisPtr) { evnsq::Message *msg = (evnsq::Message *) msgPtr; DBG("Received a message, id=" << msg->id << " message=[" << msg->body.ToString() << "]"); RtspAnalysManager *pthis = (RtspAnalysManager *) pThisPtr; Json::Reader reader; Json::Value value; if (reader.parse(msg->body.ToString(), value)) { auto itor_json_end = value.end(); Json::Value cfg_val; for (auto itor_json = value.begin(); itor_json != itor_json_end; ++itor_json) { //#todo 使用策略模式?发送端多个指令累积后发送? if (itor_json->isString() && reader.parse(itor_json->asString(), cfg_val)) { if (itor_json.name() == "cut_dura_edit") { int cut_max_duration = cfg_val["cut_max_duration"].asInt(); int cut_min_duration = cfg_val["cut_min_duration"].asInt(); DBG("cut_max_duration: " << cut_max_duration << " cut_min_duration: " << cut_min_duration); appPref.setIntData("n_cut_max_duration", cut_max_duration); appPref.setIntData("n_cut_min_duration", cut_min_duration); DBG("cut_max_duration: " << cut_max_duration << " cut_min_duration: " << cut_min_duration); // m_GB28181_Enable = appPref.getIntData("GB28181_Enable"); //#todo GB28181 if (pthis->m_GB28181_Enable) { for (auto &item : pthis->m_controllers_videoCapElem) { item.second->SetVideoMinMaxSeconds(cut_min_duration, cut_max_duration); } } else { for (auto &item : pthis->m_controllers) { item.second->SetVideoMinMaxSeconds(cut_min_duration, cut_max_duration); } } } else if (itor_json.name() == "cam_edit") { string cam_idx = cfg_val["str_cam_dev_id"].asString(); if (pthis->m_GB28181_Enable) { if (pthis->m_controllers_videoCapElem.find(cam_idx) != pthis->m_controllers_videoCapElem.end()) { INFO("cam add is " << cfg_val["str_addr"].asString()); pthis->addCamera(cam_idx, "GB28181"); } } else { if (pthis->m_controllers.find(cam_idx) != pthis->m_controllers.end()) { std::string rtsp_url = rtspAddrBuild(cfg_val["str_ip"].asString(), 554, cfg_val["str_username"].asString(), cfg_val["str_password"].asString(), cfg_val["str_brand"].asString()); INFO("cam add is " << cfg_val["str_addr"].asString()); pthis->addCamera(cam_idx, rtsp_url); } } } else if (itor_json.name() == "cam_del") { string cam_idx = cfg_val["str_cam_dev_id"].asString(); if (pthis->m_GB28181_Enable) { pthis->removeCamera(cam_idx); } else { pthis->removeCamera(cam_idx); } } } else { DBG("itor value is not string "); continue; } } } else { ERR("Error Message!!"); } } //初始化函数 void RtspAnalysManager::init() { // INFO("MYH DEBUG HERE") QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h
@@ -23,6 +23,7 @@ //using BASICGB28181::VideoCaptureElementWithRtp; //外部使用的全局指针 extern void *gRtspAnalysManagerCamera; //用来实现recordVideo的RPC的接口类 class RtspAnalysManager : public ::RtspAnalys::RtspAnalysServer { @@ -31,10 +32,12 @@ RtspAnalysManager() : m_maxCount(50), m_currentCount(0) { m_lDBTool = new LDBTool; init(); IMPORT_APP_ARGS; //nsq set callback func DBG("NsqMsgConsumer Init"); nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", "cut_dura_edit", to_string(appPref.getIntData("RpcVTIMPort"))); string pName(argv[0]); nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", pName, to_string(appPref.getIntData("RpcVTIMPort"))); nsqMsgConsumer->setMessageCallback(std::bind(&OnMsgFunc, std::placeholders::_1, this)); nsqMsgConsumer->init(); DBG("NsqMsgConsumer Init END!!"); @@ -61,6 +64,7 @@ private: void init(); static void OnMsgFunc(void *msgPtr, void *pThisPtr); private: