派生自 development/c++

chenshijun
2019-03-15 684b55231257011c11caacc5ae72b0f0977c6114
整合代码
1个文件已删除
38个文件已修改
910 ■■■■ 已修改文件
QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/http_configserver.cpp 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/controller/VssChannelTblController.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/controller/VssDevTblController.h 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/controller/VssDomainUnitTblController.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/controller/VssUpperSvrTblController.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/dao/BaseSqliteDao.h 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/dao/CamDevSqliteDao.h 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/dao/VssDevTblDao.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/dao/VssLocalSettingTblSqliteDao.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/CMakeLists.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/main.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp 300 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImage/CMakeLists.txt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/DataWebServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceDetectResourcesTest 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceDetectServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceExtractServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceSearchServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/TestCilent 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/VideoAnalysFromHC 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/YoloDetectClientTest 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/YoloServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/runAll.sh 143 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/scpToSer.sh 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/syncDBClient 补丁 | 查看 | 原始文档 | blame | 历史
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/DataWebServer
Binary files differ
QiaoJiaSystem/build/FaceDetectResourcesTest
Binary files differ
QiaoJiaSystem/build/FaceDetectServer
Binary files differ
QiaoJiaSystem/build/FaceExtractServer
Binary files differ
QiaoJiaSystem/build/FaceSearchServer
Binary files differ
QiaoJiaSystem/build/TestCilent
Binary files differ
QiaoJiaSystem/build/VideoAnalysFromHC
Binary files differ
QiaoJiaSystem/build/YoloDetectClientTest
Binary files differ
QiaoJiaSystem/build/YoloServer
Binary 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.sh
old 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/syncDBClient
Binary files differ