From 291dbcd9331cd0df41addef74defa4654ee034fb Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期一, 22 四月 2019 15:59:20 +0800 Subject: [PATCH] 增加人员异常的参数处理 --- QiaoJiaSystem/DataManagerServer/http_configserver.cpp | 329 ++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 233 insertions(+), 96 deletions(-) diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp index 5193036..4e61e33 100644 --- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp +++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp @@ -22,6 +22,7 @@ #include <time.h> #include <dirent.h> #include "basic/pipe_element/ffmpeg/basic_struct_for_video_image.h" +#include <basic/timer_counter/Clocktimer.h> #include "vss/controller/VssDevTblController.h" #include "vss/controller/VssChannelTblController.h" @@ -73,6 +74,10 @@ void devHttpServer_c::init(void) { std::string strDevId = appConfig.getStringProperty("DEV_ID"); + + //nsq + nsqMsgProducer = new BasicMsg::Nsq::NsqMsgProducer("127.0.0.1", "4150"); + nsqMsgProducer->init(); // DSVAD010120181119 m_batch = strDevId.substr(5, 2); @@ -257,6 +262,8 @@ VssDomainUnitTblController::instance()->registerHttpServices(_HttpSrvRetRecieve); VssLocalSettingTblController::instance()->registerHttpServices(_HttpSrvRetRecieve); CamDevController::instance()->registerHttpServices(_HttpSrvRetRecieve); + //todo + CamDevController::instance()->nsqMsgProducerSet(nsqMsgProducer); VssUpperSvrTblController::instance()->registerHttpServices(_HttpSrvRetRecieve); @@ -292,10 +299,10 @@ elem["n_duration"] = iter->n_duration; elem["str_brand"] = iter->str_brand.toStdString(); elem["str_reserved"] = iter->str_reserved.toStdString(); - cout << elem.toStyledString() << endl; + DBG(elem.toStyledString()); value.append(elem); } - cout << value.toStyledString() << endl; + DBG(value.toStyledString()); // std::string out = value.toStyledString(); std::string out = value.size() > 0 ? value.toStyledString() : "[]"; @@ -696,7 +703,7 @@ } dev_rec.str_storage_dev_id = QString::fromLatin1((const char *) serialnumber);//鑾峰彇纾佺洏闃靛垪鐨勮澶噄d - std::cout << dev_rec.str_storage_dev_id.toStdString() << std::endl; + DBG(dev_rec.str_storage_dev_id.toStdString()); ret = db_c.updateDeviceTable(dev_rec); } else { return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}"; @@ -743,7 +750,7 @@ std::string str_result; std::string str_tmp; for (int i = 0; i < lvecUsefulChans.size(); i++) { - std::cout << lvecUsefulChans.at(i) << std::endl; + DBG(lvecUsefulChans.at(i)); str_tmp = std::to_string(lvecUsefulChans.at(i)); str_result += str_tmp; str_result += ","; @@ -888,17 +895,17 @@ } } - cout << elem.toStyledString() << endl; + DBG(elem.toStyledString()); value.append(elem); } for (std::vector<int>::iterator it1 = chns.begin(); it1 != chns.end(); it1++) { chn_unused["n_chn"] = *it1; - cout << "*it1" << *it1 << endl; + DBG("*it1" << *it1); value.append(chn_unused); } - cout << value.toStyledString() << endl; + DBG(value.toStyledString()); // std::string out = value.toStyledString(); std::string out = value.size() > 0 ? value.toStyledString() : "[]"; return out; @@ -1003,6 +1010,7 @@ elem["str_latitude"] = iter->str_latitude.toStdString(); elem["str_ip"] = iter->str_ip.toStdString(); elem["n_port"] = iter->n_port; + elem["type"] = iter->type; elem["str_username"] = iter->str_username.toStdString(); elem["str_password"] = iter->str_password.toStdString(); elem["str_brand"] = iter->str_brand.toStdString(); @@ -1025,12 +1033,12 @@ // elem["str_det_thr"] = rec_sdk.str_det_thr.toStdString(); // elem["str_cmp_thr"] = rec_sdk.str_cmp_thr.toStdString(); - cout << elem.toStyledString() << endl; + DBG(elem.toStyledString()); value.append(elem); } - cout << value.toStyledString() << endl; + DBG(value.toStyledString()); std::string out = value.size() > 0 ? value.toStyledString() : "[]"; return out; } @@ -1113,6 +1121,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 @@ -1120,9 +1139,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; @@ -1136,11 +1166,11 @@ std::string brand) const { if (brand == "haikang") { - bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str()); - if (!ret) { - ERR("getHKDevSerialNumber ERR"); - return false; - } +// bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str()); +// if (!ret) { +// ERR("getHKDevSerialNumber ERR"); +// return false; +// } //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream port = 554;//TODO // std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + @@ -1166,8 +1196,8 @@ std::string publish_basepath = rtmpAddr + "cam" + str_uuid; DBG("publish_basepath:" << publish_basepath); appPref.setStringData("publish.basepath", publish_basepath); - appPref.setIntData("pulish.width", 640); - appPref.setIntData("pulish.height", 360); +// appPref.setIntData("pulish.width", 1920); +// appPref.setIntData("pulish.height", 1080); if (m_rtmp.find(ip) != m_rtmp.end()) { if (m_rtmp[ip].appPC == nullptr) { @@ -1190,11 +1220,11 @@ return false;//TODO } else if (brand == "yushi") { // rtsp://admin:admin@192.168.8.8:554/video1 - bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str()); - if (!ret) { - ERR("getUVDevSerialNumber ERR"); - return false; - } +// bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str()); +// if (!ret) { +// ERR("getUVDevSerialNumber ERR"); +// return false; +// } port = 554; // std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + @@ -1219,8 +1249,8 @@ std::string publish_basepath = rtmpAddr + "cam" + str_uuid; DBG("publish_basepath:" << publish_basepath); appPref.setStringData("publish.basepath", publish_basepath); - appPref.setIntData("pulish.width", 640); - appPref.setIntData("pulish.height", 360); +// appPref.setIntData("pulish.width", 1920); +// appPref.setIntData("pulish.height", 1080); if (m_rtmp.find(ip) != m_rtmp.end()) { if (m_rtmp[ip].appPC == nullptr) { @@ -1266,6 +1296,7 @@ if (m_rtmp[ip].userCounter == 0) { m_rtmp[ip].appPC->stop(); m_rtmp[ip].appPC->wait(); + delete m_rtmp[ip].appPC; m_rtmp.erase(ip); } } @@ -1290,28 +1321,41 @@ } Json::Value value; if (value_reader.isMember("id")) { - if (value_reader["id"].isNull()) return "{\"ret_status\": \"id鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; - value["connect_status"] = "True"; - std::string rtmp_url = appConfig.getStringProperty("srsAddr"); - rtmp_url.append("cam").append(value_reader["id"].asCString()); - value["video_url"] = rtmp_url; - out = value.toStyledString(); - - } else { - //TODO - //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream + if (value_reader["id"].isNull()) { + //鏈湴瑙嗛婧� 绗竴娆℃祴璇曡繛鎺� + //TODO + //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream // std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + "/h264/ch1/main/av_stream"; - bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \ + bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \ value_reader["str_username"].asString(), value_reader["str_password"].asString(), \ value_reader["str_brand"].asString()); - if (!ret) { + if (!ret) { + return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; + } + std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp(); + value["connect_status"] = "True"; + value["video_url"] = rtmp_url; + out = value.toStyledString(); + } else if (!value_reader["type"].isNull()) { + + value["connect_status"] = "True"; + std::string rtmp_url = appConfig.getStringProperty("srsAddr"); + rtmp_url.append("cam").append(value_reader["id"].asCString()); + value["video_url"] = rtmp_url; + out = value.toStyledString(); + { + std::string topic = "VideoToImageMulth"; + Json::Value json_cfg; + json_cfg["cam_startPublish"] = content; + std::string msg = json_cfg.toStyledString(); + DBG("msg:" << msg); + nsqMsgProducer->Publish(topic, (void *) (&msg)); + } + } else { return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; } - - std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp(); - value["connect_status"] = "True"; - value["video_url"] = rtmp_url; - out = value.toStyledString(); + } else { + return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; } return out; @@ -1329,19 +1373,32 @@ if (!reader.parse(content, value_reader)) { return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}"; } - - //TODO - //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream -// std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + "/h264/ch1/main/av_stream"; - DBG("cam_connect_video_stop begin"); - bool ret = cam_connect_video_stop(value_reader["str_ip"].asString()); - if (!ret) { - return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}"; - } - DBG("cam_connect_video_stop end"); - Json::Value value; - value["ret_status"] = "ok_ack"; + if (value_reader.isMember("id")) { + value["ret_status"] = "ok_ack"; + cam_connect_video_stop(value_reader["str_ip"].asString()); + { + std::string topic = "VideoToImageMulth"; + Json::Value json_cfg; + json_cfg["cam_stopPublish"] = content; + std::string msg = json_cfg.toStyledString(); + DBG("msg:" << msg); + nsqMsgProducer->Publish(topic, (void *) (&msg)); + } + } else { + //TODO + //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream +// std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + "/h264/ch1/main/av_stream"; + DBG("cam_connect_video_stop begin"); + bool ret = cam_connect_video_stop(value_reader["str_ip"].asString()); + if (!ret) { + return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}"; + } + DBG("cam_connect_video_stop end"); + + value["ret_status"] = "ok_ack"; + } + std::string out = value.toStyledString(); @@ -1402,12 +1459,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 { @@ -1446,7 +1513,7 @@ "sed -i '/tracker_server=/d' ./WebFDSClient.conf && sed -i '/\\\"host:port\\\"/atracker_server=" + \ value["web_pic_ip"].asString() + ":" + std::to_string(value["web_pic_port"].asInt()) + \ "' ./WebFDSClient.conf";// - std::cout << "cmd_web:" << cmd_web << std::endl; + DBG("cmd_web:" << cmd_web); system(cmd_web.c_str()); //#todo fastDfsClient @@ -1455,7 +1522,7 @@ "sed -i '/tracker_server=/d' ./fastDfsClient.conf && sed -i '/\\\"host:port\\\"/atracker_server=" + \ value["es_pic_ip"].asString() + ":" + std::to_string(value["es_pic_port"].asInt()) + \ "' ./fastDfsClient.conf"; - std::cout << "cmd_es:" << cmd_es << std::endl; + DBG("cmd_es:" << cmd_es); system(cmd_es.c_str()); //#todo config @@ -1528,9 +1595,15 @@ } if (ret) { - killVideoAnalysFromHCApp(); - sleep(1); - runAllApp(); + //todo VideoToImageMulth + { + std::string topic = "VideoToImageMulth"; + Json::Value json_cfg; + json_cfg["cut_dura_edit"] = content; + std::string msg = json_cfg.toStyledString(); + DBG("msg:" << msg); + nsqMsgProducer->Publish(topic, (void *) (&msg)); + } return "{\"ret_status\": \"ok_ack\"}"; } else { return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; @@ -1610,7 +1683,7 @@ // system("sed -i 's/address .*$/address 192.168.1.111/g' test"); std::string cmd_ip = "sed -i 's/address .*$/address " + ip_addr + "/g' /etc/network/interfaces"; - std::cout << "cmd_ip:" << cmd_ip << std::endl; + DBG("cmd_ip:" << cmd_ip); system(cmd_ip.c_str()); //淇敼config.json @@ -1690,6 +1763,13 @@ return out; } +//{ +// "cookie": "abc", //闆嗙兢cookie +// "fatherNodeName": "main@192.168.1.186", //寮曞鑺傜偣鍚嶇О,娣诲姞寮曞鑺傜偣鏃惰鍊间负" "(鍐呬负绌烘牸) +// "culID" : "uuid", //闆嗙兢id +// "culName" : "name", //闆嗙兢鍚嶇О +// "devID" : "uuid" //璁惧id +//} std::string devHttpServer_c::addNode(std::string ip, unsigned int port, std::string content, PResponse &response) { DBG("ip:" << ip << "; port:" << port); DBG("content: " << content); @@ -1702,25 +1782,32 @@ //#todo nodes have counter? //#todo nodeName Automatic generated? //#todo devId+num + // 鐢熸垚鑺傜偣id - uuid std::string uuid = GetUUId::getUUID(); + // 鑾峰彇褰撳墠鏈哄櫒ip unsigned char ip_old[15] = {0}; std::string str_netIfName = appConfig.getStringProperty("netIfName"); GetIpAddress(str_netIfName.c_str(), ip_old); std::string str_ip((char *) ip_old); + // 鑺傜偣鍚嶇О std::string nodeName = uuid.append("@" + str_ip); std::string cookie = value["cookie"].asString(); + // 寮曞鑺傜偣 std::string FatherNodeName = value["fatherNodeName"].asString(); //#todo ClusterID ClusterName + // 闆嗙兢id std::string clusterID = value["culID"].asString(); + // 涓虹┖鍒欑敓鎴�,鍚﹀垯鐩存帴浣跨敤 clusterID = clusterID.size() > 0 ? clusterID : GetUUId::getUUID(); std::string clusterName = value["culName"].asString(); + std::string devID = value["devID"].asString(); std::string devName = value["devName"].asString(); - + // erlang鑺傜偣淇濆瓨璺緞/opt/erlang/${uuid} std::string path = std::string("/opt/erlang/").append(nodeName.substr(0, nodeName.find("@"))); if (erlangDbTool != nullptr) { //gaunbi node @@ -1732,6 +1819,7 @@ if (cookie.size() > 0 && (clusterID.size() > 0 || clusterName.size() > 0)) { // erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie); + // #todo 杩涚▼鍚� -> get from argv[0] string str_tmp = "DataWebserver"; erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie, clusterID, clusterName, str_tmp); bool ret = erlangDbTool->initErlang(); @@ -1740,6 +1828,7 @@ ret = erlangDbTool->startNodeDb(FatherNodeName, devID); if (ret) { + //濡傛灉鎴愬姛鍒欐洿鏂伴厤缃枃浠� appConfig.setStringProperty("erlNode", nodeName); appConfig.setStringProperty("erlCookie", cookie); appConfig.setStringProperty("erlPath", path); @@ -1752,6 +1841,7 @@ runAllApp(); // sleep(4); } else { + // 鍚﹀垯鍒欑疆绌洪厤缃枃浠� appConfig.setStringProperty("erlNode", ""); appConfig.setStringProperty("erlCookie", ""); appConfig.setStringProperty("erlPath", ""); @@ -1784,6 +1874,7 @@ ret = erlangDbTool->removeNode(); + // 缃┖閰嶇疆鏂囦欢 appConfig.setStringProperty("erlNode", ""); appConfig.setStringProperty("erlCookie", ""); appConfig.setStringProperty("erlPath", ""); @@ -1901,15 +1992,20 @@ std::string Uuid = value["uuid"].asString(); std::string TableType = value["TableType"].asString(); std::string TableName = value["TableName"].asString(); + // 闆嗙兢鍐呭悓姝� int SyncType = atoi(value["SyncType"].asCString()); std::string BwType = value["BwType"].asString(); std::string StartTime = value["StartTime"].asString(); std::string EndTime = value["EndTime"].asString(); + // 鏄惁涓婁紶 std::string UploadFlag = value["IsSync"].asString(); UploadFlag = UploadFlag.empty() ? "0" : UploadFlag; + + // 搴曞簱闃堝�� std::string CmpThreshold = value["threshold"].asString(); CmpThreshold = CmpThreshold.empty() ? "60" : CmpThreshold; + // 鏄惁鍚敤 std::string Enabled = value["enabled"].asString(); Enabled = Enabled.empty() ? "1" : Enabled; @@ -1941,9 +2037,7 @@ fieldValues.insert(std::make_pair("bwType", BwType)); fieldValues.insert(std::make_pair("startTime", StartTime)); fieldValues.insert(std::make_pair("endTime", EndTime)); -// #todo fieldValues.insert(std::make_pair("create_by", createBy)); - fieldValues.insert(std::make_pair("uploadFlag", UploadFlag)); fieldValues.insert(std::make_pair("cmpThreshold", CmpThreshold)); fieldValues.insert(std::make_pair("enabled", Enabled)); @@ -1968,7 +2062,6 @@ return ""; } - //// #todo 涓婁紶銆備粎榛戝悕鍗曘�� //// #TODO 鏍规嵁createBy鍒ゆ柇鏄惁闇�瑕佷笂浼� // if (createBy == "analyDev" && BwType == "1") { @@ -1979,7 +2072,7 @@ // Enabled); // } - + // send message to other CNode erlangDbTool->sendMessage(); std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}"); return str_result; @@ -2049,9 +2142,12 @@ // auto resType = erlangDbTool->findAllTypeInfo(); string json = "["; for (auto &item : resDB) { + //-------------------maybe delete ?------------------------ if (item.second.tableName.find("lt_") == 0) { continue; } + //-------------------maybe delete end---------------------- + string subJson = "{ "; subJson.append("\"uuid\":\"" + item.second.uuid + "\","); subJson.append("\"tableName\":\"" + item.second.tableName + "\","); @@ -2272,7 +2368,7 @@ fieldValues.insert(std::make_pair("uuid", strUUID)); fieldValues.insert(std::make_pair("idCard", idcard)); - m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues); + ret_addPerson = m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues); } } else { @@ -2670,6 +2766,7 @@ std::string strSelectTemplate = R"#( -vf "select=eq(n\,%d)")#"; sprintf(selectExpBuff, strSelectTemplate.c_str(), frameIdDiff - 1); if (videoSt.Valid() && imgSt.Valid()) { + ClockTimer clockTimer1("ffmpeg getpic"); std::string cmd("ffmpeg -i '" + videoPath + "'" + std::string(selectExpBuff) + " -vframes 1" + " -y '" + str_imgName + "'"); INFO("Video To Image Cmd: " << cmd); @@ -2679,17 +2776,20 @@ return "{\"error\":\"鏈煡鍒拌棰戣矾寰刓"}"; } + ClockTimer clockTimer2("cv::imread(str_imgName)"); cv::Mat img = cv::imread(str_imgName); if (img.empty()) { ERR("{\"error\":\"Video File error\"}"); return "{\"error\":\"瑙嗛鏂囦欢閿欒\"}"; } + ClockTimer clockTimer3("CvUtil::cvMat2Buffer(img, buffer)"); std::vector<unsigned char> buffer; CvUtil::cvMat2Buffer(img, buffer); std::string img_url = "http://"; fdfsClient.rwLock.rdlock(); if (fdfsClient.fastFds != nullptr) { + ClockTimer clockTimer4("fdfsClient.fastFds->uploadFile"); std::string t_strImg = ""; if (!fdfsClient.fastFds->uploadFile(buffer, t_strImg, "jpg")) { img_url = "upload image fail"; @@ -2833,7 +2933,7 @@ appConfig.setStringProperty("DEV_ID", dev_id); appConfig.save(); - //std::cout<<dev_id<<std::endl; + return true; } @@ -2932,8 +3032,19 @@ } } - if (videoStVec.size() >= 1) { - std::string strVideoName = strPath + videoStVec[0].ToVideoName(); + std::vector<VideoName_s_t> videoStVec_; + auto imgTm_ = AppUtil::ParseFromHypenTimeStr(imgSt.m_timeStamp); + for (auto &item : videoStVec) { + auto resTime_ = AppUtil::ParseFromHypenTimeStr(item.m_timeStamp); + auto timeRes = difftime(mktime(&resTime_), mktime(&imgTm_)); + if ((timeRes < 0 && difftime(mktime(&imgTm_), mktime(&resTime_)) >= 30) || (timeRes / 60 >= 3)) { + continue; + } + videoStVec_.emplace_back(item); + } + + if (videoStVec_.size() >= 1) { + std::string strVideoName = strPath + videoStVec_[0].ToVideoName(); INFO("ImageName: " << imgKey << " SingleMatchVideo: " << strVideoName); return strVideoName; } else { @@ -3238,6 +3349,10 @@ rule.strExAreas = value["strExAreas"].asCString(); rule.strLine = value["strLine"].asCString(); rule.strExLine = value["strExLine"].asCString(); + + if (!value["strPerimeterObjType"].empty()) { + rule.strPerimeterObjType = value["strPerimeterObjType"].asCString(); + } if (rule.strCamId.isEmpty()) { return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; } @@ -3261,11 +3376,19 @@ if (db_c.updateSdkRule(rule)) { // if(rule.nIsRun==1) - killVideoAnalysFromHCApp(); - sleep(1); - runAllApp(); +// killVideoAnalysFromHCApp(); +// sleep(1); +// runAllApp(); - + { + std::string topic = "VideoAnalysFromHC"; + Json::Value json_cfg; + json_cfg["editSdkRule"] = content; + std::string msg = json_cfg.toStyledString(); + DBG("msg:" << msg); + usleep(1000); + nsqMsgProducer->Publish(topic, (void *) (&msg)); + } return "{\"ret_status\": \"ok_ack\"}"; } else { return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; @@ -3306,6 +3429,7 @@ obj["strExAreas"] = rule.second.strExAreas.toStdString(); obj["strLine"] = rule.second.strLine.toStdString(); obj["strExLine"] = rule.second.strExLine.toStdString(); + obj["strPerimeterObjType"] = rule.second.strPerimeterObjType.toStdString(); Json::Value weekRuleArray; @@ -3337,21 +3461,28 @@ } std::string devHttpServer_c::getSnapshot(std::string ip, unsigned int port, std::string content, PResponse &response) { + DBG("ip:" << ip << "; port:" << port); + DBG("content: " << content); Json::Reader reader; Json::Value value; if (reader.parse(content, value)) { - - std::string ip = value["str_ip"].asString(); + std::string str_imgName = ""; + std::string rtsp_ip = value["str_ip"].asString(); // int port= value["n_port"].asInt(); int port = 554; std::string username = value["str_username"].asString(); std::string pass = value["str_password"].asString(); std::string brand = value["str_brand"].asString(); - std::string rtsp_url = rtspAddrBuild(ip, port, username, pass, brand); - if (rtsp_url.empty()) { - return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; - } + std::string rtsp_url = rtspAddrBuild(rtsp_ip, port, username, pass, brand); + + if (value.isMember("id")) { + if (value["id"].isNull()) return "{\"ret_status\": \"id鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; + str_imgName.append("./").append(value["id"].asString()).append(".jpg"); + } else { + if (rtsp_url.empty()) { + return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}"; + } // unsigned char serialnumber[SERIALNO_LEN] = {0}; // int ret = getDevSerialNumber(ip.c_str(), port,username.c_str(),pass.c_str(),brand.c_str(),serialnumber); @@ -3363,20 +3494,22 @@ // std::string str_cam_dev_id = std::string((char *) serialnumber);//鎽勫儚鏈篿d cam_mac - std::string str_imgName = appConfig.getStringProperty("cutPath"); - if (str_imgName.back() != '/') { - str_imgName.push_back('/'); - } - str_imgName += ip; - str_imgName += "-"; - str_imgName += "snapshot.jpg"; - //admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream -r 1/25 -f image2 -s 1920*1080 /home/basic/work_src/a.jpg - std::string cmd( - "ffmpeg -i " + rtsp_url + " -vf select='eq(pict_type\\,I)',setpts='N/(25*TB)' -f image2 -s 1920*1080 -y " + - str_imgName); + str_imgName = appConfig.getStringProperty("cutPath"); + if (str_imgName.back() != '/') { + str_imgName.push_back('/'); + } + str_imgName += rtsp_ip; + str_imgName += "-"; + str_imgName += "snapshot.jpg"; + //admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream -r 1/25 -f image2 -s 1920*1080 /home/basic/work_src/a.jpg + std::string cmd( + "ffmpeg -i " + rtsp_url + + " -vf select='eq(pict_type\\,I)',setpts='N/(25*TB)' -f image2 -s 1920*1080 -y " + + str_imgName); // std::string cmd("ffmpeg -i " + rtsp_url + " -r 1/25 -f image2 -s 1920*1080 -y " + str_imgName); - DBG(cmd); - system(cmd.c_str()); + DBG(cmd); + system(cmd.c_str()); + } cv::Mat img = cv::imread(str_imgName); @@ -3398,7 +3531,11 @@ fdfsClient.rwLock.unlock(); Json::Value result; result["imgUrl"] = strImgUrl; - db_c.updateCamDevSnapshot(QString::fromStdString(ip), QString::fromStdString(strImgUrl)); + if (value.isMember("id")) { + db_c.updateCamDevSnapshotbyID(value["id"].asString().c_str(), QString::fromStdString(strImgUrl)); + } else { + db_c.updateCamDevSnapshot(QString::fromStdString(rtsp_ip), QString::fromStdString(strImgUrl)); + } return result.toStyledString(); -- Gitblit v1.8.0