QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp
@@ -43,7 +43,11 @@ std::string strInfo = request->path; auto func = m_map_TASKFUNC[strInfo]; if(func != nullptr){ std::string strRet = func(request->remote_endpoint_address(),request->remote_endpoint_port(),request->content.string(),response); std::cout << "url "<< strInfo << std::endl; std::string content = request->content.string(); std::cout << "content " << content << std::endl; std::string strRet = func(request->remote_endpoint_address(),request->remote_endpoint_port(),content,response); std::cout << "strRet " << strRet << std::endl; if(strRet.size() > 0){ DBG("strRet.size() > 0"); response->write(strRet); QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -1003,11 +1003,24 @@ 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(); elem["str_reserved"] = iter->str_reserved.toStdString(); SdkRuleMap ruleMap = db_c.searchSdkRuleByCamId(iter->str_cam_dev_id); int count = ruleMap.size(); elem["nSdkTypes"] = Json::arrayValue; if (count > 0) { for (auto rule:ruleMap) { if (rule.second.nIsRun == 1) { elem["nSdkTypes"].append(rule.second.nSdkType); } } } // Record_Cam_Sdk rec_sdk = db_c.searchCamSdkTableByCamId(iter->str_cam_dev_id); // elem["str_sdks"] = rec_sdk.str_sdks.toStdString(); // elem["str_det_thr"] = rec_sdk.str_det_thr.toStdString(); @@ -1052,7 +1065,7 @@ if ((!ret) || (serialnumber[0] == 0)) { return "{\"ret_status\": \"内容有误,请检查!\"}"; } rec.type = 0; rec.str_cam_dev_id = QString::fromLatin1((const char *) serialnumber);//摄像机id cam_mac rec.str_name = QString::fromStdString(value["str_name"].asString()); rec.str_addr = QString::fromStdString(value["str_addr"].asString()); @@ -1272,26 +1285,35 @@ Json::Reader reader; Json::Value value_reader; std::string out; if (!reader.parse(content, value_reader)) { return "{\"ret_status\": \"传输错误,请检查!\"}"; } 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(); //TODO //调用rtsp流rtsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream } else { //TODO //调用rtsp流rtsp://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) { return "{\"ret_status\": \"内容有误,请检查!\"}"; } if (!ret) { return "{\"ret_status\": \"内容有误,请检查!\"}"; } std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp(); Json::Value value; value["connect_status"] = "True"; value["video_url"] = rtmp_url; std::string out = value.toStyledString(); 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(); } return out; } @@ -1934,6 +1956,7 @@ ret = erlangDbTool->createDatabase(Uuid, fieldValues); } else if (SyncType == 0) { TableName.insert(0, "lt_"); fieldValues["tableName"] = TableName; //本地库 ret = m_SqliteFaceEncap.createTable(TableName, fieldValues); } @@ -2408,26 +2431,27 @@ std::string BwType = value["BwType"].asString(); std::string StartTime = value["StartTime"].asString(); std::string EndTime = value["EndTime"].asString(); //#更新底库管理表 FieldValues fieldValues; fieldValues.insert(std::make_pair("uuid", Uuid)); fieldValues.insert(std::make_pair("tableName", TableName)); // fieldValues.insert(std::make_pair("tableDesc", "ceshi2")); fieldValues.insert(std::make_pair("tableType", TableType)); fieldValues.insert(std::make_pair("bwType", BwType)); fieldValues.insert(std::make_pair("startTime", StartTime)); fieldValues.insert(std::make_pair("endTime", EndTime)); // fieldValues.insert(std::make_pair("create_by", "who")); bool ret = false; if (SyncType == 1) { //同步库 ret = erlangDbTool->updateDatabase(Uuid, TableType, TableName, SyncType, BwType, StartTime, EndTime); ret = erlangDbTool->updateDatabase("sys_o_tables", fieldValues); } else if (SyncType == 0) { //本地库 //#更新底库管理表 FieldValues fieldValues; fieldValues.insert(std::make_pair("uuid", Uuid)); if (TableName.find("lt_") != 0) { TableName.insert(0, "lt_"); } fieldValues.insert(std::make_pair("tableName", TableName)); // fieldValues.insert(std::make_pair("tableDesc", "ceshi2")); fieldValues.insert(std::make_pair("tableType", TableType)); fieldValues.insert(std::make_pair("bwType", BwType)); fieldValues.insert(std::make_pair("startTime", StartTime)); fieldValues.insert(std::make_pair("endTime", EndTime)); // fieldValues.insert(std::make_pair("create_by", "who")); fieldValues["tableName"] = TableName; ret = m_SqliteFaceEncap.updateTable("sys_o_tables", fieldValues); } @@ -3318,17 +3342,22 @@ Json::Value value; if (reader.parse(content, value)) { std::string str_imgName = ""; std::string ip = value["str_ip"].asString(); if (value.isMember("id")) { if (value["id"].isNull()) return "{\"ret_status\": \"id内容有误,请检查!\"}"; str_imgName.append("./").append(value["id"].asString()).append(".jpg"); } else { std::string 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\":\"内容有误,请检查!\"}"; } 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\":\"内容有误,请检查!\"}"; } // unsigned char serialnumber[SERIALNO_LEN] = {0}; // int ret = getDevSerialNumber(ip.c_str(), port,username.c_str(),pass.c_str(),brand.c_str(),serialnumber); @@ -3340,20 +3369,22 @@ // std::string str_cam_dev_id = std::string((char *) serialnumber);//摄像机id 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 += 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); QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
@@ -18,15 +18,17 @@ private: /** 摄像头设备构造函数 */ CamDevController() {} public: /** 摄像头设备单例模式 */ static CamDevController* instance() { static CamDevController *instance() { static CamDevController instance; return &instance; } public: /** 注册{label}http服务 */ void registerHttpServices(HttpSrvRetRecieve& _HttpSrvRetRecieve) { void registerHttpServices(HttpSrvRetRecieve &_HttpSrvRetRecieve) { _HttpSrvRetRecieve.setInfo("^/addCamDev$", "POST", std::bind(&CamDevController::addCamDev, this, @@ -54,6 +56,7 @@ std::placeholders::_3, std::placeholders::_4)); } public: /** 添加摄像头设备 */ std::string addCamDev(std::string ip, unsigned int port, std::string content, PResponse &response) { @@ -68,11 +71,17 @@ Json::Value idJsonValue = requestJsonValue[CamDev_id]; if (idJsonValue.type() != Json::ValueType::nullValue) { camDevBuilder.addid(std::stoi((idJsonValue.asString()))); } else { ERR("CamDev_id is null " << " is null"); // return responseJsonValue.toStyledString(); } Json::Value cam_dev_idJsonValue = requestJsonValue[CamDev_cam_dev_id]; if (cam_dev_idJsonValue.type() != Json::ValueType::nullValue) { camDevBuilder.addcam_dev_id((cam_dev_idJsonValue.asString())); } else { ERR(CamDev_cam_dev_id << " is null"); return responseJsonValue.toStyledString(); } Json::Value nameJsonValue = requestJsonValue[CamDev_name]; @@ -128,6 +137,8 @@ Json::Value typeJsonValue = requestJsonValue[CamDev_type]; if (typeJsonValue.type() != Json::ValueType::nullValue) { camDevBuilder.addtype((typeJsonValue.asString())); } else { camDevBuilder.addtype("1"); } auto keyValuesToAdd = camDevBuilder.buildCamDevMap(); if (keyValuesToAdd.size() > 0) { @@ -230,7 +241,8 @@ camDevBuilder.addtype((typeJsonValue.asString())); } if (idJsonValue.type() != Json::ValueType::nullValue) { responseJsonValue = CamDevSqliteDao::instance()->updateCamDev(camDevBuilder.buildCamDevMap(), "id", idJsonValue.asString()); responseJsonValue = CamDevSqliteDao::instance()->updateCamDev(camDevBuilder.buildCamDevMap(), "id", idJsonValue.asString()); } } return responseJsonValue.toStyledString(); @@ -309,6 +321,8 @@ Json::Value typeJsonValue = requestJsonValue[CamDev_type]; if (typeJsonValue.type() != Json::ValueType::nullValue) { camDevBuilder.addtype((typeJsonValue.asString())); } else { camDevBuilder.addtype("1"); } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; @@ -390,6 +404,8 @@ Json::Value typeJsonValue = requestJsonValue[CamDev_type]; if (typeJsonValue.type() != Json::ValueType::nullValue) { camDevBuilder.addtype((typeJsonValue.asString())); } else { camDevBuilder.addtype("1"); } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; @@ -399,10 +415,6 @@ return responseJsonValue.toStyledString(); } }; #endif //CAMDEV_CONTROLLER_H QiaoJiaSystem/DataManagerServer/vss/controller/VssChannelTblController.h
@@ -473,7 +473,7 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssChannelTblDao::instance()->findJsonArray(string("select * from ") + VSSChannelTbl_TABLE_NAME + " where 1 = 1 limit 1"); responseJsonValue["data"] = VssChannelTblDao::instance()->findJsonArray(string("select * from ") + VSSChannelTbl_TABLE_NAME + " where 1 = 1 limit 1", vssChannelTblBuilder.buildVssChannelTblMap()); } return responseJsonValue.toStyledString(); } @@ -604,7 +604,9 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssChannelTblDao::instance()->findJsonArray(string("select * from ") + VSSChannelTbl_TABLE_NAME + " where 1 = 1"); responseJsonValue["data"] = VssChannelTblDao::instance()->findJsonArray(string("select * from ") + VSSChannelTbl_TABLE_NAME + " where 1 = 1" , vssChannelTblBuilder.buildVssChannelTblMap()); } return responseJsonValue.toStyledString(); QiaoJiaSystem/DataManagerServer/vss/controller/VssDevTblController.h
@@ -293,7 +293,7 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssDevTblDao::instance()->findJsonArray(string("select * from ") + VSSDevTbl_TABLE_NAME + " where 1 = 1 limit 1"); responseJsonValue["data"] = VssDevTblDao::instance()->findJsonArray(string("select * from ") + VSSDevTbl_TABLE_NAME + " where 1 = 1 limit 1", vssDevTblBuilder.buildVssDevTblMap()); } return responseJsonValue.toStyledString(); } @@ -364,7 +364,22 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssDevTblDao::instance()->findJsonArray(string("select * from ") + VSSDevTbl_TABLE_NAME + " where 1 = 1"); auto devDataList = VssDevTblDao::instance()->findJsonArray(string("select * from ") + VSSDevTbl_TABLE_NAME + " where 1 = 1", vssDevTblBuilder.buildVssDevTblMap()); for (int i = 0; i < devDataList.size(); i++) { auto& devData = devDataList[i]; auto DevPubID = devData[VssDevTbl_DevPubID]; std::map<std::string, std::string> whereKeyValues; whereKeyValues[CamDev_cam_dev_id] = DevPubID.asString(); auto camDevDataList = CamDevSqliteDao::instance()->findCamDevList(whereKeyValues)["data"]; devData["RemarkName"] = ""; if (camDevDataList.size() > 0) { auto camDevData = camDevDataList[0]; devData["RemarkName"] = camDevData[CamDev_name].asString(); } } responseJsonValue["data"] = devDataList; } return responseJsonValue.toStyledString(); QiaoJiaSystem/DataManagerServer/vss/controller/VssDomainUnitTblController.h
@@ -248,7 +248,7 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssDomainUnitTblDao::instance()->findJsonArray(string("select * from ") + VSSDomainUnitTbl_TABLE_NAME + " where 1 = 1 limit 1"); responseJsonValue["data"] = VssDomainUnitTblDao::instance()->findJsonArray(string("select * from ") + VSSDomainUnitTbl_TABLE_NAME + " where 1 = 1 limit 1", vssDomainUnitTblBuilder.buildVssDomainUnitTblMap()); } return responseJsonValue.toStyledString(); } @@ -304,7 +304,7 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssDomainUnitTblDao::instance()->findJsonArray(string("select * from ") + VSSDomainUnitTbl_TABLE_NAME + " where 1 = 1"); responseJsonValue["data"] = VssDomainUnitTblDao::instance()->findJsonArray(string("select * from ") + VSSDomainUnitTbl_TABLE_NAME + " where 1 = 1", vssDomainUnitTblBuilder.buildVssDomainUnitTblMap()); } return responseJsonValue.toStyledString(); QiaoJiaSystem/DataManagerServer/vss/controller/VssUpperSvrTblController.h
@@ -368,7 +368,7 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssUpperSvrTblDao::instance()->findJsonArray(string("select * from ") + VSSUpperSvrTbl_TABLE_NAME + " where 1 = 1 limit 1"); responseJsonValue["data"] = VssUpperSvrTblDao::instance()->findJsonArray(string("select * from ") + VSSUpperSvrTbl_TABLE_NAME + " where 1 = 1 limit 1", vssUpperSvrTblBuilder.buildVssUpperSvrTblMap()); } return responseJsonValue.toStyledString(); } @@ -464,7 +464,7 @@ } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; responseJsonValue["data"] = VssUpperSvrTblDao::instance()->findJsonArray(string("select * from ") + VSSUpperSvrTbl_TABLE_NAME + " where 1 = 1"); responseJsonValue["data"] = VssUpperSvrTblDao::instance()->findJsonArray(string("select * from ") + VSSUpperSvrTbl_TABLE_NAME + " where 1 = 1", vssUpperSvrTblBuilder.buildVssUpperSvrTblMap()); } return responseJsonValue.toStyledString(); QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h
@@ -77,7 +77,8 @@ return rowDataList; } static Json::Value findJsonArray(string sql) { static Json::Value findJsonArray(string sql, std::map<std::string, std::string>& whereColumns) { sql = sql + getWhereColumnNameValuePair(whereColumns); initConnection(); mysqlpp::Query query = conn->query(sql); Json::Value rowList; @@ -97,6 +98,7 @@ rowList.append(row); } } else { cout << "error " <<query.error() << endl; cout << "query failed" << endl; } return rowList; @@ -130,6 +132,7 @@ return updateSql; } static void doConnect() { cout << "db_host=" << appConfig.getStringProperty("db_host").c_str() << endl; if (conn->connect( appConfig.getStringProperty("database").c_str(), appConfig.getStringProperty("db_host").c_str(), QiaoJiaSystem/DataManagerServer/vss/dao/BaseSqliteDao.h
@@ -18,6 +18,62 @@ BaseSqliteDao::m_pModel = lDBTool->get_m_pModel(); BaseSqliteDao::m_mutexVisit = lDBTool->get_m_mutexVisit(); } static string getColumnNames(std::map<std::string, std::string>& columns) { string columnNames; auto size = columns.size(); int i = 0; for (auto column : columns) { columnNames.append(column.first); if (i != size - 1) { columnNames.append(","); } i++; } return columnNames; } static string getColumnValues(std::map<std::string, std::string>& columns) { string columnValues; auto size = columns.size(); int i = 0; for (auto column : columns) { columnValues.append("'"+column.second+"'"); if (i != columns.size() - 1) { columnValues.append(","); } i++; } return columnValues; } static string getColumnNameValuePair(std::map<std::string, std::string>& columns) { string columnNameValuePair; auto size = columns.size(); int i = 0; for (auto column : columns) { columnNameValuePair.append(column.first); columnNameValuePair.append("="); columnNameValuePair.append("'"+column.second+"'"); if (i != size - 1) { columnNameValuePair.append(","); } i++; } return columnNameValuePair; } static string getWhereColumnNameValuePair(std::map<std::string, std::string>& columns) { string columnNameValuePair; auto size = columns.size(); int i = 0; for (auto column : columns) { columnNameValuePair.append(" and "); columnNameValuePair.append(column.first); columnNameValuePair.append("="); columnNameValuePair.append("'"+column.second+"' "); i++; } return columnNameValuePair; } }; LDBTool* BaseSqliteDao::lDBTool = nullptr; QiaoJiaSystem/DataManagerServer/vss/dao/CamDevSqliteDao.h
@@ -4,6 +4,7 @@ #include "../model/CamDev.h" #include "BaseSqliteDao.h" #include <qsqlfield.h> #define CamDev_TABLE_NAME "cam_dev" @@ -26,6 +27,14 @@ Json::Value responseJsonValue; responseJsonValue["message"] = "添加失败!"; responseJsonValue["success"] = "false"; std::map<std::string, std::string> whereKeyValues; whereKeyValues["cam_dev_id"] = keyValuesToAdd["cam_dev_id"]; if (this->findCamDevList(whereKeyValues)["data"].size() > 0) { responseJsonValue["message"] = "cam_dev_id exist!"; return responseJsonValue; } QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); @@ -71,8 +80,9 @@ QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); pModel.setTable(CamDev_TABLE_NAME); for (auto whereKeyValue : whereKeyValues ) { pModel.setFilter(QObject::tr((string(whereKeyValue.first)+" = '%1'").c_str()).arg(QString::fromUtf8(whereKeyValue.second.c_str()))); if (whereKeyValues.size() > 0) { auto filter = QObject::tr((string(" 1=1 ")+getWhereColumnNameValuePair(whereKeyValues)).c_str()); pModel.setFilter(filter); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); @@ -110,8 +120,9 @@ QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); pModel.setTable(CamDev_TABLE_NAME); for (auto whereKeyValue : whereKeyValues) { pModel.setFilter(QObject::tr((whereKeyValue.first + " = '%1'").c_str()).arg(QString::fromStdString(whereKeyValue.second))); if (whereKeyValues.size() > 0) { auto filter = QObject::tr((string(" 1=1 ")+getWhereColumnNameValuePair(whereKeyValues)).c_str()); pModel.setFilter(filter); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); @@ -172,8 +183,9 @@ std::list<Record_Cut_Video_info> lst; QSqlTableModel pModel(NULL, *m_db); pModel.setTable(CamDev_TABLE_NAME);; for (auto whereKeyValue : whereKeyValues ) { pModel.setFilter(QObject::tr((string(whereKeyValue.first)+" = '%1'").c_str()).arg(QString::fromUtf8(whereKeyValue.second.c_str()))); if (whereKeyValues.size() > 0) { auto filter = QObject::tr((string(" 1=1 ")+getWhereColumnNameValuePair(whereKeyValues)).c_str()); pModel.setFilter(filter); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); QiaoJiaSystem/DataManagerServer/vss/dao/VssDevTblDao.h
@@ -3,7 +3,9 @@ #define VSSDEVTBL_MANAGER_H #include "../model/VssDevTbl.h" #include "VssChannelTblDao.h" #include "BaseDao.h" #include "CamDevSqliteDao.h" #define VSSDevTbl_TABLE_NAME "VSSDevTbl" @@ -37,6 +39,19 @@ /** 删除创建一级设备表 whereColumnNameValues 列名和列值对条件 */ bool deleteVssDevTbl(std::map<std::string, std::string>& whereKeyValues) { QMutexLocker mutexLocker(&m_mutexVisit); vector<map<string, string>> devRowDataList = findList(string("select * from ") + VSSDevTbl_TABLE_NAME + " where 1=1 " + getWhereColumnNameValuePair(whereKeyValues)); if (devRowDataList.size() > 0) { auto DevPubID = devRowDataList.at(0)[VssDevTbl_DevPubID]; vector<map<string, string>> channelRowDataList = findList(string("select * from ") + VSSChannelTbl_TABLE_NAME + " where 1=1 AND DevPubID='"+DevPubID+"'"); for (auto channelRowData : channelRowDataList) { auto ChanPubID = channelRowData[VssChannelTbl_ChanPubID]; CamDevSqliteDao::instance()->deleteByColumn(CamDev_cam_dev_id, ChanPubID); } CamDevSqliteDao::instance()->deleteByColumn(CamDev_cam_dev_id, DevPubID); } return del(VSSDevTbl_TABLE_NAME, whereKeyValues); } QiaoJiaSystem/DataManagerServer/vss/dao/VssLocalSettingTblSqliteDao.h
@@ -73,8 +73,9 @@ QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); pModel.setTable(VSSLocalSettingTbl_Sqlite_TABLE_NAME); for (auto whereKeyValue : whereKeyValues ) { pModel.setFilter(QObject::tr((string(whereKeyValue.first)+" = '%1'").c_str()).arg(QString::fromUtf8(whereKeyValue.second.c_str()))); if (whereKeyValues.size() > 0) { auto filter = QObject::tr((string(" 1=1 ")+getWhereColumnNameValuePair(whereKeyValues)).c_str()); pModel.setFilter(filter); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); @@ -112,8 +113,9 @@ QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); pModel.setTable(VSSLocalSettingTbl_Sqlite_TABLE_NAME); for (auto whereKeyValue : whereKeyValues) { pModel.setFilter(QObject::tr((whereKeyValue.first + " = '%1'").c_str()).arg(QString::fromStdString(whereKeyValue.second))); if (whereKeyValues.size() > 0) { auto filter = QObject::tr((string(" 1=1 ")+getWhereColumnNameValuePair(whereKeyValues)).c_str()); pModel.setFilter(filter); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); @@ -174,8 +176,9 @@ std::list<Record_Cut_Video_info> lst; QSqlTableModel pModel(NULL, *m_db); pModel.setTable(VSSLocalSettingTbl_Sqlite_TABLE_NAME);; for (auto whereKeyValue : whereKeyValues ) { pModel.setFilter(QObject::tr((string(whereKeyValue.first)+" = '%1'").c_str()).arg(QString::fromUtf8(whereKeyValue.second.c_str()))); if (whereKeyValues.size() > 0) { auto filter = QObject::tr((string(" 1=1 ")+getWhereColumnNameValuePair(whereKeyValues)).c_str()); pModel.setFilter(filter); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
@@ -1,4 +1,5 @@ // // 对比报警的基类 // Created by ps on 2/26/18. // @@ -13,6 +14,9 @@ #include <basic/util/thread/MultiThread.h> #include <basic/util/BASE64/Base64.h> /*** * 需要对比的一条记录 */ struct AlarmData { int num; std::string tableName; @@ -20,6 +24,9 @@ float threshold; }; /*** * 数据库中查询的一条记录 */ struct FeatureData { long face_id; std::string uuid; @@ -29,6 +36,11 @@ std::string idcard; }; /*** * 字符串根据符号分割并返回数据 * @param str_list * @return */ static std::vector<std::string> AlarmServerPropertyAnalyseByComma(std::string str_list) { std::vector<std::string> result; char *property_list = const_cast<char *>(str_list.c_str()); @@ -60,6 +72,9 @@ CPU_Number = 1 }; /*** * 报警服务基类 */ class AlarmServer { public: @@ -77,11 +92,19 @@ dataRemoveBuffer.clear(); } /*** * 初始化时使用线程加载数据库 * @param str_config */ void initDB(std::string str_config) { std::thread thd(loadDBCahce, this, str_config); thd.detach(); } /*** * 移除数据 * @param key */ void removeData(std::string key) { std::lock_guard<std::mutex> guard(dataRemoveBufferMtx); dataRemoveBuffer.insert(key); QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
@@ -89,7 +89,6 @@ add_executable(${PROJECT_NAME} main.cpp rpc/FaceSearchServer.cpp FaceSearchServerResources.cpp FaceFeatureSearchServerI.cpp FaceFeatureSearchServerI.h CasiaFaceWrapper/CasiaFaceWrapperN.cpp QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
@@ -54,11 +54,10 @@ static bool getRet(std::string startTime, std::string endTime) { auto crrentTime = AppUtil::getTimeSecString(); if (crrentTime.compare(startTime) > 0 && crrentTime.compare(endTime) < 0) { if (crrentTime.compare(startTime) > 0 && (crrentTime.compare(endTime) < 0 || endTime == "0000-00-00 00:00:00")) { return true; } return false; } #endif //COMPARETEST_FACEDBCOMPARESERVER_H QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp
File was deleted QiaoJiaSystem/FaceSearchServer/main.cpp
@@ -14,7 +14,7 @@ using namespace std; int main(int argc, char **argv) { std::cout<<__DATE__<<" "<<__TIME__<<std::endl; std::cout << __DATE__ << " " << __TIME__ << std::endl; SAVE_APP_ARGS; ENABLEGLOG(GET_STR_CONFIG("logPath").c_str()); auto ich = Ice::initialize(argc, argv); QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -143,135 +143,198 @@ */ void BASICGB28181::FFmpegDecoderJPG::BareFlowDecoderThd(FFmpegDecoderJPG *p_this) { DBG(p_this->m_camIdx << " BareFlowDecoderThd ok ... gpuIdx is " << p_this->m_gpuIdx); p_this->m_running = true; av_register_all(); avformat_network_init(); AVFormatContext *ic = avformat_alloc_context(); while (!p_this->m_running) { unsigned char *iobuffer = (unsigned char *) av_malloc(p_this->m_buf_size); AVIOContext *avio = avio_alloc_context(iobuffer, p_this->m_buf_size, 0, p_this, p_this->read_data, NULL, NULL); ic->pb = avio; p_this->m_running = true; // av_register_all(); // avformat_network_init(); p_this->ic = avformat_alloc_context(); int err = av_probe_input_buffer(ic->pb, &ic->iformat, nullptr, nullptr, 0, p_this->m_buf_size); int err1 = avformat_open_input(&ic, "", NULL, NULL); int err2 = avformat_find_stream_info(ic, nullptr); int vi = -1; for (int i = 0; i < ic->nb_streams; ++i) { if (ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { vi = i; break; p_this->iobuffer = (unsigned char *) av_malloc(p_this->m_buf_size); if (!p_this->iobuffer) { ERR("av_malloc: err======" << p_this->m_camIdx); p_this->m_running = false; continue; } } AVStream *stream = ic->streams[vi]; p_this->video_st = stream; AVCodecContext *ctx = avcodec_alloc_context3(nullptr); int err3 = avcodec_parameters_to_context(ctx, stream->codecpar); p_this->avio = avio_alloc_context(p_this->iobuffer, p_this->m_buf_size, 0, p_this, p_this->read_data, NULL, NULL); if (!p_this->avio) { ERR("avio_alloc_context: err======" << p_this->m_camIdx); p_this->m_running = false; continue; } p_this->ic->pb = p_this->avio; AVCodec *codec = avcodec_find_decoder(ctx->codec_id); //是否启用GPU if (p_this->m_gpuIdx >= 0) { if (codec != NULL) { char cuvidName[40] = {0}; sprintf(cuvidName, "%s_cuvid", codec->name); if (!strcmp(codec->name, "h264") || !strcmp(codec->name, "h265") || !strcmp(codec->name, "hevc")) { AVCodec *codec_cuvid = avcodec_find_decoder_by_name(cuvidName); if (codec_cuvid != NULL) { codec = codec_cuvid; } else { int err = av_probe_input_buffer(p_this->ic->pb, &p_this->ic->iformat, nullptr, nullptr, 0, p_this->m_buf_size); if (err) { ERR("av_probe_input_buffer: err======" << err << p_this->m_camIdx); p_this->m_running = false; continue; } err = avformat_open_input(&p_this->ic, "", NULL, NULL); if (err) { ERR("avformat_open_input: err======" << err << p_this->m_camIdx); p_this->m_running = false; continue; } // int err2 = avformat_find_stream_info(ic, nullptr); err = avformat_find_stream_info(p_this->ic, NULL); if (err) { ERR("avformat_find_stream_info: err======" << err << p_this->m_camIdx); // avformat_close_input(&p_this->ic); // DBG("avformat_close_input(&p_this->ic);"); p_this->m_running = false; continue; } int vi = -1; for (int i = 0; i < p_this->ic->nb_streams; ++i) { if (p_this->ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { vi = i; break; } } p_this->stream = p_this->ic->streams[vi]; p_this->video_st = p_this->stream; p_this->ctx = avcodec_alloc_context3(nullptr); err = avcodec_parameters_to_context(p_this->ctx, p_this->stream->codecpar); if (err) { ERR("avcodec_parameters_to_context: err======" << err << p_this->m_camIdx); // avformat_close_input(&p_this->ic); // DBG("avformat_close_input(&p_this->ic);"); p_this->m_running = false; continue; } p_this->codec = avcodec_find_decoder(p_this->ctx->codec_id); //是否启用GPU if (p_this->m_gpuIdx >= 0) { if (p_this->codec != NULL) { char cuvidName[40] = {0}; sprintf(cuvidName, "%s_cuvid", p_this->codec->name); if (!strcmp(p_this->codec->name, "h264") || !strcmp(p_this->codec->name, "h265") || !strcmp(p_this->codec->name, "hevc")) { p_this->codec_cuvid = avcodec_find_decoder_by_name(cuvidName); if (p_this->codec_cuvid != NULL) { p_this->codec = p_this->codec_cuvid; } else { // return false; ERR("codec_cuvid is NULL"); ERR("codec_cuvid is NULL" << p_this->m_camIdx); } } } } } int err4 = avcodec_open2(ctx, codec, nullptr); AVPacket pkt; av_init_packet(&pkt); AVFrame *frame = av_frame_alloc(); unsigned int usleepTime = (1000 / p_this->m_fps) - 12; usleepTime *= 1000; DBG(" before while <<usleepTime is " << usleepTime); while (p_this->m_running) { #ifdef TestCode ClockTimer Test("while time"); #endif int err5 = av_read_frame(ic, &pkt); //# todo save package p_this->frame_number++; int err6 = avcodec_send_packet(ctx, &pkt); // av_packet_unref(&pkt); int err7 = avcodec_receive_frame(ctx, frame); if ((err7 == AVERROR(EAGAIN)) || (err5 < 0) || (err6 < 0)) { ERR(" error << err7:" << err7 << " err5: " << err5 << " err6: " << err6); usleep(40000); err = avcodec_open2(p_this->ctx, p_this->codec, nullptr); if (err) { ERR("avcodec_open2: err======" << err << p_this->m_camIdx); // avformat_close_input(&p_this->ic); // DBG("avformat_close_input(&p_this->ic);"); // avcodec_free_context(&p_this->ctx); // DBG("avcodec_free_context(&p_this->ctx);"); p_this->m_running = false; continue; } //DBG("GotPicture "<<m_camId<<":"<<frame_number); //放在此处是因为之前放在前面,收到的帧不完成 p_this->SaveToPacketVector(pkt); p_this->CheckSave(); av_init_packet(&p_this->pkt); p_this->frame = av_frame_alloc(); unsigned int usleepTime = (1000 / p_this->m_fps) - 12; usleepTime *= 1000; DBG("===open ok, camid: " << p_this->m_camIdx); while (p_this->m_running) { #ifdef TestCode ClockTimer Test("while time"); #endif av_packet_unref(&p_this->pkt); p_this->pkt.data = NULL; p_this->pkt.size = 0; int err5 = av_read_frame(p_this->ic, &p_this->pkt); //# todo save package p_this->frame_number++; int err6 = avcodec_send_packet(p_this->ctx, &p_this->pkt); int err7 = avcodec_receive_frame(p_this->ctx, p_this->frame); if ((err7 == AVERROR(EAGAIN)) || (err5 < 0) || (err6 < 0)) { ERR(" err======: err7" << err7 << " err5: " << err5 << " err6: " << err6 << p_this->m_camIdx); usleep(40000); continue; } //DBG("GotPicture "<<m_camId<<":"<<frame_number); //放在此处是因为之前放在前面,收到的帧不完成 p_this->SaveToPacketVector(p_this->pkt); p_this->CheckSave(); // BASICGB28181::avframe_to_cvmat(frame).copyTo(p_this->m_image); p_this->m_image = std::move(BASICGB28181::avframe_to_cvmat(frame)); p_this->m_image = std::move(BASICGB28181::avframe_to_cvmat(p_this->frame)); #ifdef TestCode { // TestCode 测试代码保存图片到本地 ClockTimer cl("TestCode"); std::string strNewTime2 = AppUtil::getTimeUSecString(); cv::putText(p_this->m_image, strNewTime2, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 5, cv::Scalar(255, 255, 0), 2); std::thread test([&](cv::Mat img, std::string strThing) { if (p_this->m_SnapshotNotSaveRet && (p_this->pkt.flags & AV_PKT_FLAG_KEY)) { try { std::string strNewTime = "tmpDec/"; strNewTime.append(p_this->m_camIdx + "_").append(strThing).append(".jpg"); // cv::imwrite(strNewTime, p_this->m_image); std::string strNewName = "./"; strNewName.append(p_this->m_camIdx).append(".jpg"); cv::imwrite(strNewName, p_this->m_image); p_this->m_SnapshotNotSaveRet = false; } catch (std::exception ex) { ERR(ex.what()); } }, p_this->m_image, strNewTime2); test.detach(); } } #ifdef TestCode { // TestCode 测试代码保存图片到本地 ClockTimer cl("TestCode"); std::string strNewTime2 = AppUtil::getTimeUSecString(); cv::putText(p_this->m_image, strNewTime2, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 5, cv::Scalar(255, 255, 0), 2); std::thread test([&](cv::Mat img, std::string strThing) { try { std::string strNewTime = "tmpDec/"; strNewTime.append(p_this->m_camIdx + "_").append(strThing).append(".jpg"); // cv::imwrite(strNewTime, p_this->m_image); } catch (std::exception ex) { ERR(ex.what()); } }, p_this->m_image, strNewTime2); test.detach(); } #endif //#todo send to other thd //#todo send to other thd #ifdef TestCode DBG("emitSigal(\"DecoderImageOK\") begin"); DBG("emitSigal(\"DecoderImageOK\") begin"); #endif //触发信号 gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK"); //触发信号 gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK"); //#ifdef TestCode // DBG("emitSigal(\"DecoderImageOK\") after"); //#endif DBG("emitSigal(\"DecoderImageOK\") after"); DBG("p_this->m_camIdx is " << p_this->m_camIdx << " queue size is " << p_this->m_rtpQueue.count_queue()); DBG("emitSigal(\"DecoderImageOK\") after"); DBG("p_this->m_camIdx is " << p_this->m_camIdx << " queue size is " << p_this->m_rtpQueue.count_queue()); #ifdef TestCode { ClockTimer cl("waitTime"); int loop = 0; //#TODO // while ((loop++ < 3000) && !(p_this->m_readData)) { // usleep(10); // } { ClockTimer cl("waitTime"); int loop = 0; //#TODO // while ((loop++ < 3000) && !(p_this->m_readData)) { // usleep(10); // } usleep(30000); DBG("p_this->m_readData is " << p_this->m_readData << " loop is " << loop << " queue size is " << p_this->m_rtpQueue.count_queue()); p_this->m_readData = false; // usleep(12000); } usleep(30000); DBG("p_this->m_readData is " << p_this->m_readData << " loop is " << loop << " queue size is " << p_this->m_rtpQueue.count_queue()); p_this->m_readData = false; // usleep(12000); } #else usleep(usleepTime); // usleep(usleepTime); #endif } DBG(" after while "); av_frame_free(&p_this->frame); } DBG(" after while "); av_frame_free(&frame); } bool BASICGB28181::FFmpegDecoderJPG::startThd(const std::string &camIdx, const int &fps, const int &gpuIdx) { @@ -283,6 +346,7 @@ setenv("CUDA_VISIBLE_DEVICES", std::to_string(gpuIdx).c_str(), 0); } m_camIdx = camIdx; DBG("BareFlowDecoderThd camIdx : " << camIdx); std::thread t_BareFlowDecoder(BareFlowDecoderThd, this); t_BareFlowDecoder.detach(); ); @@ -375,7 +439,7 @@ delete iter->m_packet.data; iter = m_packetsVec.erase(iter); while (!(iter->m_packet.flags & AV_PKT_FLAG_KEY)) { // INFO("DropFrame: " << iter->m_frameId); INFO("DropFrame: " << iter->m_frameId); delete iter->m_packet.data; iter = m_packetsVec.erase(iter); } @@ -386,15 +450,18 @@ bool BASICGB28181::FFmpegDecoderJPG::SaveVideo(std::string path, int64_t lastFrameId) { std::lock_guard<std::mutex> lock(g_mutex); INFO("SaveVideo: " << path); INFO("SaveVideo: " << path << "m_packetsVec.size : " << m_packetsVec.size()); if (!m_packetsVec.empty()) { startWrite(path.c_str()); int64_t firstKeyFramePts = m_packetsVec[0].m_packet.pts; int64_t firstKeyFrameDts = m_packetsVec[0].m_packet.dts; unsigned long int frame_index = 0; for (const auto &item:m_packetsVec) { if (item.m_frameId < lastFrameId) { DBG("item.m_frameId < lastFrameId " << item.m_frameId << " " << lastFrameId); conversion(const_cast<AVPacket *> (&item.m_packet), firstKeyFramePts, firstKeyFrameDts, video_st); conversion(const_cast<AVPacket *> (&item.m_packet), firstKeyFramePts, firstKeyFrameDts, video_st, frame_index); frame_index++; av_write_frame(m_pOutFmtCtx, &item.m_packet); } else { DBG("item.m_frameId > lastFrameId " << item.m_frameId << " " << lastFrameId); @@ -517,11 +584,12 @@ int BASICGB28181::FFmpegDecoderJPG::stopWrite() { if (m_pOutFmtCtx == nullptr) return -1; av_write_trailer(m_pOutFmtCtx); avio_close(m_pOutFmtCtx->pb); avcodec_close(m_pOutFmtCtx->streams[0]->codec); av_freep(&m_pOutFmtCtx->streams[0]->codec); av_freep(&m_pOutFmtCtx->streams[0]); avio_close(m_pOutFmtCtx->pb); av_free(m_pOutFmtCtx); m_pOutFmtCtx = nullptr; m_bstartWrite = false; @@ -530,23 +598,23 @@ void BASICGB28181::FFmpegDecoderJPG::conversion(void *packet, const long int &firstKeyPts, const long int &firstKeyDts, void *inVideoStream) { void *inVideoStream, unsigned long int frame_index) { if ((packet != nullptr) && (inVideoStream != nullptr)) { AVStream *inStream = (AVStream *) inVideoStream; AVPacket *pkg = static_cast<AVPacket *>(packet); // static int a = 0; // pkg->dts = a++; // pkg->pts = a; pkg->pts -= firstKeyPts; pkg->dts -= firstKeyDts; pkg->pts = av_rescale_q_rnd(pkg->pts, inStream->time_base, m_pOutVideo_stream->time_base, (AVRounding) (AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX)); pkg->dts = av_rescale_q_rnd(pkg->dts, inStream->time_base, m_pOutVideo_stream->time_base, (AVRounding) (AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX)); pkg->duration = av_rescale_q(pkg->duration, inStream->time_base, m_pOutVideo_stream->time_base); pkg->pos = -1; DBG("frame_index==%d\n" << frame_index); //Write PTS AVRational time_base1 = inStream->time_base; //Duration between 2 frames (us) int64_t calc_duration = (double) AV_TIME_BASE / av_q2d(inStream->r_frame_rate); //Parameters pkg->pts = (double) (frame_index * calc_duration) / (double) (av_q2d(time_base1) * AV_TIME_BASE); pkg->dts = pkg->pts; pkg->duration = (double) calc_duration / (double) (av_q2d(time_base1) * AV_TIME_BASE); // DBG("pts:" << pkg->pts); // DBG("dts:" << pkg->dts); } } QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h
@@ -166,7 +166,18 @@ //对收到的帧进行计数 int64_t m_frameIndex = 0; //******************************************* AVFormatContext *ic; unsigned char *iobuffer; AVIOContext *avio; AVStream *stream; AVCodecContext *ctx; AVCodec *codec; AVCodec *codec_cuvid; AVPacket pkt; AVFrame *frame; //******************************************* //将帧保存到帧数组 void SaveToPacketVector(AVPacket &packet); @@ -188,7 +199,8 @@ int stopWrite(); //对packet做转换 void conversion(void *packet, const long int &firstKeyPts, const long int &firstKeyDts, void *inVideoStream); void conversion(void *packet, const long int &firstKeyPts, const long int &firstKeyDts, void *inVideoStream, unsigned long int frame_index = 0); bool m_bstartWrite = {false}; bool m_bFirstKeyFrame = {false}; @@ -215,6 +227,7 @@ int m_gpuIdx; int m_fps; bool m_PackageState; bool m_SnapshotNotSaveRet{true}; std::string m_camIdx; MyQueue<frameBuffInfo *> m_rtpQueue; QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -35,6 +35,38 @@ bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) { std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { p_this->m_waitSignal = true; while (p_this->m_waitSignal) { //#TODO wait test #ifdef TestCode DBG("waitSignal(\"DecoderImageOK\") begin"); #endif gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK"); #ifdef TestCode DBG("waitSignal(\"DecoderImageOK\") after"); #endif p_this->m_picCount++; //几张选一张放入Redis if (p_this->m_picCount % m_nPicsPickOne != 0) { continue; } else { p_this->m_picCount.store(0); } p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); { cv::Mat copyMat; std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName(); p_this->m_image.copyTo(copyMat); m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); } p_this->submit(); } INFO("waitSignalAndEmit is exit..."); }, this); waitSignalAndEmit.detach(); TryCath( //--------------国标设备或则国标下级平台必须支持GB28181-2016---------------------------------------------- std::thread videoCaptureElementThd([&](VideoCaptureElementWithRtp *p_this, int streamType) { @@ -69,12 +101,19 @@ p_this->m_running = true; p_this->m_fFmpegDecoderJPG.startThd(p_this->m_chanPubID, p_this->m_fps, p_this->m_gpuIdx); while (p_this->m_running) { usleep(300000); // if(p_this->m_fFmpegDecoderJPG.getRunning()) { usleep(300000); // }else{ // p_this->m_running = false; // break; // } } DBG("videoCaptureElementThd stop ..."); C_RealVideoStop(lrealhandle); p_this->m_waitSignal = false; DBG("videoCaptureElementThd stop ok..."); } else { p_this->m_waitSignal = false; p_this->m_running = false; p_this->m_fFmpegDecoderJPG.stopThd(); ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is " << lrealhandle); @@ -124,42 +163,23 @@ } void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() { if ((!m_running) || (!m_waitSignal)) { if (reopenTime < 0) { stop(); INFO("grabFrame faild, element stopping"); return; } else { usleep(reopenTime * 1000); INFO("grabFrame faild, try reopen video: "); startRtpStream(m_streamTransType); return; } } fireConnectors(); } void BASICGB28181::VideoCaptureElementWithRtp::threadInitial() { std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { p_this->m_waitSignal = true; while (p_this->m_waitSignal) { //#TODO wait test #ifdef TestCode DBG("waitSignal(\"DecoderImageOK\") begin"); #endif gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK"); #ifdef TestCode DBG("waitSignal(\"DecoderImageOK\") after"); #endif p_this->m_picCount++; //几张选一张放入Redis if (p_this->m_picCount % m_nPicsPickOne != 0) { continue; } else { p_this->m_picCount.store(0); } p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); { cv::Mat copyMat; std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName(); p_this->m_image.copyTo(copyMat); m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); } p_this->submit(); } INFO("waitSignalAndEmit is exit..."); }, this); waitSignalAndEmit.detach(); startRtpStream(m_streamTransType); } QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -40,6 +40,7 @@ std::string MakeDir(const std::string &timeStamp); private: int reopenTime{1000}; int m_gpuIdx; int m_fps; int m_streamTransType; QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -139,8 +139,11 @@ Json::Value t_json; t_json["Id"] = str_uuid; //主键 std::string feature_base64; feature_base64 = base64.Encode(feature.data(), feature.size()); //#在对比中添加特征值 t_json["FaceFeature"] = "base64"; t_json["FaceFeature"] = feature_base64; t_json["personId"] = "";//关联底库人员id,人脸id t_json["BaseName"] = "";//关联底库表名 //#end QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h
@@ -61,6 +61,7 @@ str_brand = ""; str_reserved = ""; n_type = -1; type = -1; } int n_id;//自增id @@ -76,6 +77,7 @@ QString str_brand;//摄像机品牌 QString str_reserved;//预留 int n_type;//预留 int type;// 0 rtsp, 1 gb28181 }; struct Record_Cam_Chn { QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp
@@ -332,6 +332,7 @@ rec.setValue("password", channelRec.str_password); rec.setValue("brand", channelRec.str_brand); rec.setValue("reserved", channelRec.str_reserved); rec.setValue("type", channelRec.type); pModel.insertRecord(-1, rec);//TODO @@ -510,6 +511,7 @@ Record_Cam_Dev lChannelRec; QSqlRecord rec = pModel.record(i); lChannelRec.n_id = rec.value("id").toInt(); lChannelRec.type = rec.value("type").toInt(); lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString(); lChannelRec.str_name = rec.value("name").toString(); lChannelRec.str_addr = rec.value("addr").toString(); QiaoJiaSystem/VideoToImage/CMakeLists.txt
@@ -68,7 +68,7 @@ /usr/include/x86_64-linux-gnu/qt5/QtCore/ /usr/include/x86_64-linux-gnu/qt5/QtSql/ ../../BasicPlatForm/libs/hiredis-master/include ../../../BasicPlatForm/libs/hiredis-master/include ../../../BasicPlatForm/basic/timer_counter/ ) QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt
@@ -93,7 +93,7 @@ ../../../BasicPlatForm/libs/hiredis-master/lib ../../../BasicPlatForm/libs/mysqlpp/lib ../../../BasicPlatForm/libs/mysql/lib ../../../BasicPlatForm/libs/mysql/lib ) add_executable(${PROJECT_NAME} QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -58,9 +58,10 @@ // item.str_password.toStdString(), item.str_brand.toStdString()); INFO("cam add is " << item.str_addr.toStdString()); addCamera(t_camIdex, rtsp_url); sleep(1); } } else { ERR("searchCamDevTableAll size is 0"); ERR("searchCamDevTableByType size is 0"); } } else { @@ -115,7 +116,7 @@ // // } } else { ERR("searchCamDevTableAll size is 0"); ERR("searchCamDevTableByType size is 0"); } } } QiaoJiaSystem/build/DataWebServerBinary files differ
QiaoJiaSystem/build/FaceDetectResourcesTestBinary files differ
QiaoJiaSystem/build/FaceDetectServerBinary files differ
QiaoJiaSystem/build/FaceExtractServerBinary files differ
QiaoJiaSystem/build/FaceSearchServerBinary files differ
QiaoJiaSystem/build/TestCilentBinary files differ
QiaoJiaSystem/build/VideoAnalysFromHCBinary files differ
QiaoJiaSystem/build/YoloDetectClientTestBinary files differ
QiaoJiaSystem/build/YoloServerBinary files differ
QiaoJiaSystem/build/runAll.sh
@@ -1,18 +1,17 @@ #!/usr/bin/env bash MYLDPATH="~/Apps" MY3RDLIBSPATH="~/Apps/BasicPlatForm/libs/" MYLOGPATH="~/work/log/" MYLDPATH="/home/basic/Apps" MY3RDLIBSPATH="/home/basic/Apps/BasicPlatForm/libs/" MYLOGPATH="/home/basic/work/log/" #todo #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib/HCNetSDKCom:${MY3RDLIBSPATH}/ffmpeg/lib:${MY3RDLIBSPATH}/opencv/lib:${MY3RDLIBSPATH}/Casia_Face/FaceSdk/lib/gpu:${MY3RDLIBSPATH}/FastDFS/lib:${MY3RDLIBSPATH}/Ice-3.7.0/lib64:${MY3RDLIBSPATH}/DarkNet/lib:${MY3RDLIBSPATH}/libopenssl/lib:${MY3RDLIBSPATH}/uniview/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib/HCNetSDKCom:${MY3RDLIBSPATH}/ffmpeg/lib:${MY3RDLIBSPATH}/opencv/lib:${MY3RDLIBSPATH}/Casia_Face/FaceSdk/lib/gpu:${MY3RDLIBSPATH}/FastDFS/lib:${MY3RDLIBSPATH}/Ice-3.7.0/lib64:${MY3RDLIBSPATH}/DarkNet/lib:${MY3RDLIBSPATH}/libopenssl/lib:${MY3RDLIBSPATH}/uniview/lib:${MY3RDLIBSPATH}/libboost/lib/:${MY3RDLIBSPATH}/sqlite/lib/:${MY3RDLIBSPATH}/glog/lib/:${MY3RDLIBSPATH}/hiredis-master/lib:${MY3RDLIBSPATH}/mysql/lib:${MY3RDLIBSPATH}/mysqlpp/lib:${MY3RDLIBSPATH}/GB28181/libs startFunc() { PROC=`ps aux | grep "$1" | grep -v grep | grep -v tail` if [ -z "${PROC}" ]; then date +%D-%T" $1 start" nohup ./$1 > ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T` & nohup ./$1 1> ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T` 2>&1 & return 1 else echo "$1 is exists" @@ -20,33 +19,137 @@ fi } #start FaceExtractServer startFunc FaceExtractServer #$1:funcName; $2:GB28181_Enable,en:1,dis:0; #$3:gpu.index; $4:CamStartNO; $5:CamEndNO; $6:RpcYOLOPort; #$7:RpcFDPort; $8:RpcFEPort; $9:RpcFSPort $10:RpcVTIMPort; startVAHK() { date +%D-%T" $1 start" nohup ./$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} 1> ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T`_${10} 2>&1 & return 1 } #start FaceDetectServer startFunc FaceDetectServer #$1:funcName; $2:GB28181_Enable,en:1,dis:0; #$3:gpu.index; $4:CamStartNO; $5:CamEndNO; $6:RpcVTIMPort startVTIM() { date +%D-%T" $1 start" nohup ./$1 $2 $3 $4 $5 $6 1> ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T`_$6 2>&1 & return 1 } #start YoloServer startFunc YoloServer #$1:funcName; $2:gpu.index; $3:RpcYOLOPort; $4:thresh.detect; startYOLO() { date +%D-%T" $1 start" nohup ./$1 $2 $3 $4 1> ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T`_$3 2>&1 & return 1 } #start FaceSearchServer startFunc FaceSearchServer #$1:funcName; $2:gpu.index; $3:RpcFDPort; $4:thread.max; startFD() { date +%D-%T" $1 start" nohup ./$1 $2 $3 $4 1> ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T`_$3 2>&1 & return 1 } #start RecordVideo startFunc RecordVideo #$1:funcName; $2:gpu.index; $3:RpcFEPort; $4:thread.max; startFE() { date +%D-%T" $1 start" nohup ./$1 $2 $3 $4 1> ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T`_$3 2>&1 & return 1 } #start DataWebServer #startFunc DataWebServer #$1:funcName; $2:RpcFSPort; $3:thread.max; startFS() { date +%D-%T" $1 start" nohup ./$1 $2 $3 1> ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T`_$2 2>&1 & return 1 } startFunc test_cpu_mem.sh sh runWebSer.sh #start FaceExtractServer #$1:funcName; $2:gpu.index; $3:RpcFEPort; $4:thread.max; FaceExtractServerPROC=`ps aux | grep "FaceExtractServer" | grep -v grep | grep -v tail` if [ -z "${FaceExtractServerPROC}" ]; then startFE FaceExtractServer 0 10021 2 startFE FaceExtractServer 1 10022 2 # startFE FaceExtractServer 0 10023 4 # startFE FaceExtractServer 1 10024 4 else echo "FaceExtractServer is exists" fi #start FaceDetectServer #$1:funcName; $2:gpu.index; $3:RpcFDPort; $4:thread.max; FaceDetectServerPROC=`ps aux | grep "FaceDetectServer" | grep -v grep | grep -v tail` if [ -z "${FaceDetectServerPROC}" ]; then startFD FaceDetectServer 1 10011 2 sleep 3 startFD FaceDetectServer 0 10012 2 # startFD FaceDetectServer 1 10013 4 # startFD FaceDetectServer 0 10014 4 else echo "FaceDetectServer is exists" fi #start YoloServer #$1:funcName; $2:gpu.index; $3:RpcYOLOPort; $4:thresh.detect; YoloServerPROC=`ps aux | grep "YoloServer" | grep -v grep | grep -v tail` if [ -z "${YoloServerPROC}" ]; then startYOLO YoloServer 0 10001 0.85 startYOLO YoloServer 1 10002 0.85 # startYOLO YoloServer 0 10003 0.85 # startYOLO YoloServer 1 10004 0.85 else echo "YoloServer is exists" fi #start FaceSearchServer #$1:funcName; $2:RpcFSPort; $3:thread.max; FaceSearchServerPROC=`ps aux | grep "FaceSearchServer" | grep -v grep | grep -v tail` if [ -z "${FaceSearchServerPROC}" ]; then startFS FaceSearchServer 10031 2 sleep 3 startFS FaceSearchServer 10032 2 # startFS FaceSearchServer 10033 4 # startFS FaceSearchServer 10034 4 else echo "FaceSearchServer is exists" fi #start VideoToImageMulth #$1:funcName; $2:GB28181_Enable,en:1,dis:0; #$3:gpu.index; $4:CamStartNO; $5:CamEndNO; $6:RpcVTIMPort VideoToImageMulthPROC=`ps aux | grep "VideoToImageMulth" | grep -v grep | grep -v tail` if [ -z "${VideoToImageMulthPROC}" ]; then startVTIM VideoToImageMulth 0 0 0 1 10041 startVTIM VideoToImageMulth 0 1 2 3 10042 # startVTIM VideoToImageMulth 0 0 8 11 10043 # startVTIM VideoToImageMulth 0 1 12 15 10044 else echo "VideoToImageMulth is exists" fi #start VideoAnalysFromHC #$1:funcName; $2:GB28181_Enable,en:1,dis:0; #$3:gpu.index; $4:CamStartNO; $5:CamEndNO; $6:RpcYOLOPort; #$7:RpcFDPort; $8:RpcFEPort; $9:RpcFSPort $10:RpcVTIMPort; VideoAnalysPROC=`ps aux | grep "VideoAnalysFromHC" | grep -v grep | grep -v tail` if [ -z "${VideoAnalysPROC}" ]; then date +%D-%T" VideoAnalysFromHC start" nohup ./VideoAnalysFromHC 2> /dev/null > ${MYLOGPATH}/LogVideoAnalysFromHC`date +%Y-%m-%d_%T` & startVAHK VideoAnalysFromHC 0 1 0 1 10001 10011 10021 10031 10041 startVAHK VideoAnalysFromHC 0 0 2 3 10002 10012 10022 10032 10042 # startVAHK VideoAnalysFromHC 0 1 8 11 10003 10013 10023 10033 10043 # startVAHK VideoAnalysFromHC 0 0 12 15 10004 10014 10024 10034 10044 else echo "VideoAnalysFromHC is exists" fi cd /home/basic/Apps/BasicPlatForm/libs/srs nohup ./runRtmpServer.sh & cd /usr/local/redis/bin nohup ./redis-server ../redis.conf & QiaoJiaSystem/build/scpToSer.shold mode 100644 new mode 100755
@@ -10,7 +10,7 @@ des_pass=123 expect -c " # spawn scp -P41100 ${CUR_PATH}"/"$1 basic@58.118.225.79:/home/basic/Apps/QiaoJiaSystem/build spawn scp ${CUR_PATH}"/"$1 basic@192.168.1.203:/home/basic/Apps/QiaoJiaSystem/build spawn scp ${CUR_PATH}"/"$1 basic@192.168.1.182:/home/basic/Apps/QiaoJiaSystem/build expect \"password:\" send \"${des_pass}\r\" expect eof @@ -29,12 +29,13 @@ sendFile FaceExtractServer sendFile FaceSearchServer sendFile syncDBClient sendFile RecordVideo #sendFile RecordVideo sendFile VideoAnalysFromHC sendFile VideoToImageMulth sendFile YoloServer sendFile EncodeServer sendFile killAll.sh #sendFile runAll.sh #sendFile EncodeServer #sendFile killAll.sh sendFile runAll.sh #sendFile runWebSer.sh else SENDFILE=$1 QiaoJiaSystem/build/syncDBClientBinary files differ