QiaoJiaSystem/EncodeServer/CMakeLists.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoToImageMulth/main.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
QiaoJiaSystem/EncodeServer/CMakeLists.txt
@@ -56,12 +56,10 @@ ../../../BasicPlatForm/basic/pipe/ ../../../BasicPlatForm/libs/opencv/include ../../../BasicPlatForm/libs/ffmpeg/include ../../../BasicPlatForm/libs/jsoncpp/include /usr/include/x86_64-linux-gnu/qt5 @@ -79,22 +77,23 @@ ../../../BasicPlatForm/libs/ffmpeg/lib ../../../BasicPlatForm/libs/jsoncpp/lib # ../../../BasicPlatForm/libs/libuuid/lib # ../../../BasicPlatForm/libs/libuuid/lib ../../../BasicPlatForm/libs/hiredis-master/lib ) add_executable(${PROJECT_NAME} ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp ../StructureApp/NewRecordVideoElement.cpp ../../../BasicPlatForm/basic/timer_counter/TimerRecorder.cpp ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp ../StructureApp/NewRecordVideoElement.cpp ../../../BasicPlatForm/basic/timer_counter/TimerRecorder.cpp ../../../BasicPlatForm/basic/util/BASE64/Base64.cpp EncodeVideoManager.cpp EncodeVideo.cpp ../StructureApp/HiredisTool.cpp main.cpp EncodeVideoManager.cpp EncodeVideo.cpp ../StructureApp/HiredisTool.cpp main.cpp ) target_link_libraries(${PROJECT_NAME} ${LIBS} QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -128,6 +128,10 @@ return bufsize; } /*** * 解码线程 * @param p_this */ 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; @@ -188,11 +192,6 @@ //# todo save package p_this->frame_number++; //DBG("GotPicture "<<m_camId<<":"<<frame_number); //放在此处是因为之前放在前面,收到的帧不完成 p_this->SaveToPacketVector(pkt); p_this->CheckSave(); int err6 = avcodec_send_packet(ctx, &pkt); av_packet_unref(&pkt); int err7 = avcodec_receive_frame(ctx, frame); @@ -201,12 +200,17 @@ usleep(40000); continue; } //DBG("GotPicture "<<m_camId<<":"<<frame_number); //放在此处是因为之前放在前面,收到的帧不完成 p_this->SaveToPacketVector(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)); #ifdef TestCode { // 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, @@ -228,7 +232,7 @@ #ifdef TestCode DBG("emitSigal(\"DecoderImageOK\") begin"); #endif //触发信号 gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK"); //#ifdef TestCode // DBG("emitSigal(\"DecoderImageOK\") after"); @@ -278,7 +282,7 @@ bool BASICGB28181::FFmpegDecoderJPG::stopThd() { TryCath( DBG(m_camIdx << " FFmpegDecoderJPG stopThd ... "); DBG(m_camIdx << " FFmpegDecoderJPG stopThd ... " << m_camIdx); m_running = false; ); return true; @@ -380,9 +384,11 @@ int64_t firstKeyFrameDts = m_packetsVec[0].m_packet.dts; 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); av_write_frame(m_pOutFmtCtx, &item.m_packet); } else { DBG("item.m_frameId > lastFrameId " << item.m_frameId << " " << lastFrameId); break; } } QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp
@@ -2,6 +2,7 @@ // Created by ps on 19-3-1. // #include <basic/debug/Debug.h> #include "GB28181Server.h" bool bGetLoaclRes = {false}; @@ -50,6 +51,7 @@ bool GB28181Server::initServer() { bool iRet = C_InitSDK(&GBServerParam, &MysqlConnParam, NULL, enventcallback); DBG("iRet is " << iRet); sleep(90); return iRet; QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -13,12 +13,10 @@ BASICGB28181::VideoCaptureElementWithRtp::VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx) : m_chanPubID(chanPubID), m_fps(fps), m_running(false), m_waitSignal(false), m_streamTransType(streamTransType), m_gpuIdx(gpuIdx), m_userdata((long) this) { int gpuIdx, RtspAnalysManager *manager) : m_chanPubID(chanPubID), m_fps(fps), m_running(false), m_waitSignal(false), m_streamTransType(streamTransType), m_gpuIdx(gpuIdx), m_userdata((long) this), m_pManager(manager) { // m_chanPubID = chanPubID; m_cutPath = appPref.getStringData("user.loop.absolute.path"); QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -17,7 +17,8 @@ class VideoCaptureElementWithRtp : public basic::PipeElement { public: explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1); explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1, RtspAnalysManager *manager = nullptr); virtual ~VideoCaptureElementWithRtp(); QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -123,6 +123,9 @@ strImgUrl = strImgUrlTmp; // strImgUrl.append("/").append(strImgUrlTmp); fdfsClient->rwLock.unlock(); } else { strImgUrl = ""; ERR("fdfsClient is nullptr ???"); } //拼接json QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -10,24 +10,24 @@ //RtspAnalysElement::RtspAnalysElement() {} //std::string RtspAnalysElement::resetFdfs(std::string ip, unsigned int port, std::string content) { // // std::thread reset([&]() { // fdfsClient.rwLock.rdlock(); // if (fdfsClient.fastFds != nullptr) { // delete fdfsClient.fastFds; // } // fdfsClient.fastFds = new FastFds("fastDfsClient.conf"); // fdfsClient.rwLock.unlock(); // }); // reset.detach(); // // return ""; //} std::string RtspAnalysElement::resetFdfs(std::string ip, unsigned int port, std::string content) { std::thread reset([&]() { fdfsClient.rwLock.rdlock(); if (fdfsClient.fastFds != nullptr) { delete fdfsClient.fastFds; } fdfsClient.fastFds = new FastFds("fastDfsClient.conf"); fdfsClient.rwLock.unlock(); }); reset.detach(); return ""; } RtspAnalysElement::RtspAnalysElement(LDBTool *_dbTool) : m_lDBTool(_dbTool), maxCount(50), currentCount(0) { init(); // resetFdfs(); resetFdfs(); { // std::thread httpServer([&]() { // //#todo port QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h
@@ -21,7 +21,7 @@ virtual ~RtspAnalysElement(); int addCamera(const std::string &, const std::map<int, SdkRule>& sdkRuleMap); int addCamera(const std::string &, const std::map<int, SdkRule> &sdkRuleMap); int removeCamera(const std::string &); @@ -36,7 +36,7 @@ private: void init(); // std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = ""); std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = ""); static std::vector<int> chnString2Vec(std::string str_list); QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -40,47 +40,69 @@ //初始化函数 void RtspAnalysManager::init() { INFO("MYH DEBUG HERE") m_GB28181_Enable = appPref.getIntData("GB28181_Enable"); //#todo GB28181 #ifndef GB28181 auto lst = m_lDBTool->searchCamDevTableAll(); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); if (m_GB28181_Enable) { auto lst = m_lDBTool->searchCamDevTableByType(1); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); //设置视频的最长和最短时间间隔 appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); if (lst.size() > 0) { int startCamNO = appPref.getIntData("CamStart") * appPref.getIntData("CamStep"); int CamCount = appPref.getIntData("CamStep"); INFO("StartCamNO: " << startCamNO << " CamStep: " << CamCount); auto itor = lst.begin(); if (startCamNO >= lst.size()) { ERR("startCamNO > lst.size()"); return; //设置视频的最长和最短时间间隔 appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); if (lst.size() > 0) { for (auto item : lst) { std::string t_camIdex = item.str_cam_dev_id.toStdString(); std::string rtsp_url = "GB28181"; // rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(), // item.str_password.toStdString(), item.str_brand.toStdString()); INFO("cam add is " << item.str_addr.toStdString()); addCamera(t_camIdex, rtsp_url); } } else { ERR("searchCamDevTableAll size is 0"); } for (int i = 0; i < startCamNO; i++) { } else { auto lst = m_lDBTool->searchCamDevTableAll(); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); std::string t_camIdex = itor->str_cam_dev_id.toStdString(); std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), itor->str_password.toStdString(), itor->str_brand.toStdString()); INFO("JumpCam: " << t_camIdex << " URL: " << rtsp_url); itor++; } //设置视频的最长和最短时间间隔 appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); if (lst.size() > 0) { int startCamNO = appPref.getIntData("CamStart") * appPref.getIntData("CamStep"); int CamCount = appPref.getIntData("CamStep"); INFO("StartCamNO: " << startCamNO << " CamStep: " << CamCount); auto itor = lst.begin(); for (int i = 0; i < CamCount; i++) { if (itor == lst.end()) { ERR("itor == lst.end()"); if (startCamNO >= lst.size()) { ERR("startCamNO > lst.size()"); return; } std::string t_camIdex = itor->str_cam_dev_id.toStdString(); std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), itor->str_password.toStdString(), itor->str_brand.toStdString()); INFO("cam add is " << itor->str_addr.toStdString()); addCamera(t_camIdex, rtsp_url); itor++; } for (int i = 0; i < startCamNO; i++) { std::string t_camIdex = itor->str_cam_dev_id.toStdString(); std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), itor->str_password.toStdString(), itor->str_brand.toStdString()); INFO("JumpCam: " << t_camIdex << " URL: " << rtsp_url); itor++; } for (int i = 0; i < CamCount; i++) { if (itor == lst.end()) { ERR("itor == lst.end()"); return; } std::string t_camIdex = itor->str_cam_dev_id.toStdString(); std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), itor->str_password.toStdString(), itor->str_brand.toStdString()); INFO("cam add is " << itor->str_addr.toStdString()); addCamera(t_camIdex, rtsp_url); itor++; } // for (auto item : lst) // { @@ -92,65 +114,10 @@ // addCamera(t_camIdex, rtsp_url); // // } } else { ERR("searchCamDevTableAll size is 0"); } #else auto lst = m_lDBTool->searchCamDevTableByType(1); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); //设置视频的最长和最短时间间隔 appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); if (lst.size() > 0) { // int startCamNO = appPref.getIntData("CamStart") * appPref.getIntData("CamStep"); // int CamCount = appPref.getIntData("CamStep"); // INFO("StartCamNO: " << startCamNO << " CamStep: " << CamCount); // auto itor = lst.begin(); // // if (startCamNO >= lst.size()) { // ERR("startCamNO > lst.size()"); // return; // } // for (int i = 0; i < startCamNO; i++) { // // std::string t_camIdex = itor->str_cam_dev_id.toStdString(); // std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), // itor->str_password.toStdString(), itor->str_brand.toStdString()); // INFO("JumpCam: " << t_camIdex << " URL: " << rtsp_url); // itor++; // } // // for (int i = 0; i < CamCount; i++) { // if (itor == lst.end()) { // ERR("itor == lst.end()"); // return; // } // std::string t_camIdex = itor->str_cam_dev_id.toStdString(); // std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), // itor->str_password.toStdString(), itor->str_brand.toStdString()); // INFO("cam add is " << itor->str_addr.toStdString()); // // addCamera(t_camIdex, rtsp_url); // itor++; // } for (auto item : lst) { std::string t_camIdex = item.str_cam_dev_id.toStdString(); std::string rtsp_url = "GB28181"; // rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(), // item.str_password.toStdString(), item.str_brand.toStdString()); INFO("cam add is " << item.str_addr.toStdString()); addCamera(t_camIdex, rtsp_url); } else { ERR("searchCamDevTableAll size is 0"); } } else { ERR("searchCamDevTableAll size is 0"); } #endif } RtspAnalysManager::~RtspAnalysManager() { @@ -160,6 +127,11 @@ delete controller.second; } m_controllers.clear(); for (auto controller: m_controllers_videoCapElem) { INFO("Delete Controller: " << controller.first); delete controller.second; } m_controllers_videoCapElem.clear(); } /** @@ -171,9 +143,46 @@ * @return -1 添加失败,0 添加成功 */ int RtspAnalysManager::addCamera(const std::string &index, const std::string &rtsp) { #ifndef GB28181 // why search lst ? // auto lst = m_lDBTool->searchCamDevTableAll(); if (m_GB28181_Enable) { //#todo // why search lst ? // auto lst = m_lDBTool->searchCamDevTableAll(); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); //#todo end if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end()) { INFO("MYH DEBUG HERE"); if (m_currentCount >= m_maxCount) { ERR("addCamera faild, camera's num is full!") return -1; } INFO("RTSP: " << rtsp << " INDEX:" << index); m_imgRedisCRwLock.wrlock(); m_imgRedisControllers[index] = new RtspImageRedisElement(index); m_imgRedisControllers[index]->start(); m_imgRedisCRwLock.unlock(); //VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1) m_controllers_videoCapElem[index] = new BASICGB28181::VideoCaptureElementWithRtp( const_cast<string &>(index), 25, 0, 0, this); m_controllers_videoCapElem[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration, lst_dev.n_cut_max_duration); m_controllers_videoCapElem[index]->start(); m_currentCount++; return 0; } else { removeCamera(index); INFO("removeCamera " << index); //DBG("removeCamera " << index); return addCamera(index, rtsp); } } else { // why search lst ? // auto lst = m_lDBTool->searchCamDevTableAll(); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); if (m_controllers.find(index) == m_controllers.end()) { INFO("MYH DEBUG HERE"); @@ -197,38 +206,12 @@ //DBG("removeCamera " << index); return addCamera(index, rtsp); } #else //#todo // why search lst ? // auto lst = m_lDBTool->searchCamDevTableAll(); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); //#todo end if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end()) { INFO("MYH DEBUG HERE"); if (m_currentCount >= m_maxCount) { ERR("addCamera faild, camera's num is full!") return -1; } INFO("RTSP: " << rtsp << " INDEX:" << index); m_imgRedisControllers[index] = new RtspImageRedisElement(index); m_imgRedisControllers[index]->start(); //VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1) m_controllers_videoCapElem[index] = new BASICGB28181::VideoCaptureElementWithRtp(const_cast<string &>(index), 25, 1, 0); m_controllers_videoCapElem[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration, lst_dev.n_cut_max_duration); m_controllers_videoCapElem[index]->start(); m_currentCount++; return 0; } else { removeCamera(index); INFO("removeCamera " << index); //DBG("removeCamera " << index); return addCamera(index, rtsp); } #ifndef GB28181 #else #endif } @@ -258,11 +241,13 @@ m_currentCount--; #endif m_imgRedisCRwLock.wrlock(); auto imgRedis = m_imgRedisControllers[index]; imgRedis->stop(); imgRedis->wait(); delete imgRedis; m_imgRedisControllers.erase(index); m_imgRedisCRwLock.unlock(); INFO("MYH DEBUG HERE"); return 0; } @@ -294,6 +279,7 @@ #endif INFO("MYH DEBUG HERE"); m_imgRedisCRwLock.wrlock(); for (auto controller: m_imgRedisControllers) { controller.second->stop(); } @@ -302,6 +288,7 @@ delete controller.second; } m_imgRedisControllers.clear(); m_imgRedisCRwLock.unlock(); m_currentCount = 0; @@ -319,17 +306,26 @@ return m_currentCount; } //录取视频的RPC的接口函数 ::std::string RtspAnalysManager::recordVideo(const ::std::string &name, const ::Ice::Current &) { INFO("Record Video For: " << name); ImageName_s_t nameSt = ImageName_s_t::fromString(name); if (nameSt.Valid()) { auto pCaptureElem = m_controllers.find(nameSt.m_camId); if (pCaptureElem != m_controllers.end()) { pCaptureElem->second->SaveVideo(name); if (GB28181_Enable) { auto pCaptureElem = m_controllers_videoCapElem.find(nameSt.m_camId); if (pCaptureElem != m_controllers_videoCapElem.end()) { //#todo ~~~~~~!!!!!!! 这里有bug 需要放开调试 // pCaptureElem->second->SaveVideo(name); } else { ERR("Can not Find CamId " << nameSt.m_camId); } } else { ERR("Can not Find CamId " << nameSt.m_camId); auto pCaptureElem = m_controllers.find(nameSt.m_camId); if (pCaptureElem != m_controllers.end()) { pCaptureElem->second->SaveVideo(name); } else { ERR("Can not Find CamId " << nameSt.m_camId); } } } else { ERR("Record Video Failed:Name Not Valid Name: " << name); @@ -339,7 +335,9 @@ //保存视频到RtspImageRedis的队列,由RtspCaptureElement调用 bool RtspAnalysManager::SaveImageToRedis(const std::string &camId, const std::string &imageName, const cv::Mat &img) { INFO("MYH DEBUG HERE"); INFO("MYH DEBUG HERE " << camId); // m_imgRedisCRwLock.rdlock(); auto item = m_imgRedisControllers.find(camId); if (item != m_imgRedisControllers.end()) { INFO("Save Succeed Cam: " << camId << " ImageKey: " << imageName); @@ -347,6 +345,7 @@ } else { ERR("Save Failed Cam: " << camId << " ImageKey: " << imageName); } // m_imgRedisCRwLock.unlock(); INFO("MYH DEBUG HERE"); return true; } QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h
@@ -53,8 +53,12 @@ private: RWLock m_imgRedisCRwLock; LDBTool *m_lDBTool; int m_GB28181_Enable; //保存CamID和RtspCaptureElement的映射关系 std::map<std::string, RtspCaptureElement *> m_controllers; QiaoJiaSystem/VideoToImageMulth/main.cpp
@@ -45,6 +45,12 @@ return std::move(str_ip); } /*** * arg1 为-1时启用gb28181 * @param argc * @param argv * @return */ int main(int argc, char **argv) { std::cout << __DATE__ << " " << __TIME__ << std::endl; SAVE_APP_ARGS @@ -53,77 +59,87 @@ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str()); #endif int gindx = atoi(argv[1]) % 2; if (argc < 4) { assert("t_value.size()"); } int arg1 = atoi(argv[1]); int gindx = abs(arg1) % 2; int GB28181_Enable = abs(arg1) % 2; DBG(gindx); appPref.setIntData("GB28181_Enable", GB28181_Enable); appPref.setLongData("gpu.index", gindx); appPref.setIntData("show.image", 0); //todo appPref.setIntData("CamStart", atoi(argv[1])); appPref.setIntData("CamStart", arg1); appPref.setIntData("CamStep", atoi(argv[2])); appPref.setIntData("RpcServerPort", atoi(argv[3])); if (GB28181_Enable) { //#todo search from db MysqlDBServerCfg mysqlDBServerCfg; mysqlDBServerCfg.Host = getLocalIp(); mysqlDBServerCfg.Port = 3306; mysqlDBServerCfg.UserName = "root"; mysqlDBServerCfg.Passwd = "123456"; mysqlDBServerCfg.DBName = "EGEyesForVSS"; mysqlDBServerCfg.DBConnCount = 5; //#todo search from db MysqlDBServerCfg mysqlDBServerCfg; mysqlDBServerCfg.Host = getLocalIp(); mysqlDBServerCfg.Port = 3306; mysqlDBServerCfg.UserName = "root"; mysqlDBServerCfg.Passwd = "123456"; mysqlDBServerCfg.DBName = "EGEyesForVSS"; mysqlDBServerCfg.DBConnCount = 5; LDBTool ldbTool; BaseSqliteDao::setLDBTool(&ldbTool); //#todo search from db Json::Value t_value; { LDBTool ldbTool; BaseSqliteDao::setLDBTool(&ldbTool); t_value = VssLocalSettingTblSqliteDao::instance()->findAllVssLocalSettingTblList(); } if (t_value.size() == 1 && t_value["data"].size() > 1) { assert("t_value.size()"); } DBG(t_value["data"].begin()->toStyledString()); auto &t_cfg = *t_value["data"].begin(); GBServerCfg gbServerCfg; gbServerCfg.SvrIp = t_cfg["ServerIp"].asString(); // 国标服务的ip地址 (本机的ip地址) gbServerCfg.SvrPort = atoi(t_cfg["ServerPort"].asString().c_str());// 7060; // 国标服务监听的端口 gbServerCfg.SvrPubID = t_cfg["ServerId"].asString();// "44120000002000000001"; // 国标服务器的ID gbServerCfg.bMD5Auth = false; // 是否需要MD5加密 gbServerCfg.UserName = t_cfg["UserAuthId"].asString();// "44120100002000000002"; // 国标服务的用户名 (下级设备注册的用户名) gbServerCfg.Passwd = t_cfg["Password"].asString();// "123456"; // 国标服务的密码 (下级设备注册的密码) gbServerCfg.SubScribeTime = 3600; // 订阅时间 如果为0 表示不订阅 SpinLock spinLock; bool running = false; bool serinit = false; auto func = [&] { spinLock.lock(); GB28181Server m_gbs; m_gbs.setMysqlConnParam(mysqlDBServerCfg); m_gbs.setGBServerParam(gbServerCfg); DBG("initServer start before"); running = m_gbs.initServer(); DBG("initServer start after"); spinLock.unlock(); while (running) { usleep(4000); //#todo search from db Json::Value t_value; { LDBTool ldbTool; BaseSqliteDao::setLDBTool(&ldbTool); t_value = VssLocalSettingTblSqliteDao::instance()->findAllVssLocalSettingTblList(); } if (t_value.size() == 1 && t_value["data"].size() > 1) { assert("t_value.size()"); } DBG(t_value["data"].begin()->toStyledString()); auto &t_cfg = *t_value["data"].begin(); GBServerCfg gbServerCfg; gbServerCfg.SvrIp = t_cfg["ServerIp"].asString(); // 国标服务的ip地址 (本机的ip地址) gbServerCfg.SvrPort = atoi(t_cfg["ServerPort"].asString().c_str());// 7060; // 国标服务监听的端口 gbServerCfg.SvrPubID = t_cfg["ServerId"].asString();// "44120000002000000001"; // 国标服务器的ID gbServerCfg.bMD5Auth = false; // 是否需要MD5加密 gbServerCfg.UserName = t_cfg["UserAuthId"].asString();// "44120100002000000002"; // 国标服务的用户名 (下级设备注册的用户名) gbServerCfg.Passwd = t_cfg["Password"].asString();// "123456"; // 国标服务的密码 (下级设备注册的密码) gbServerCfg.SubScribeTime = 3600; // 订阅时间 如果为0 表示不订阅 }; SpinLock spinLock; std::thread thd(func); bool running = false; bool serinit = false; auto func = [&] { spinLock.lock(); GB28181Server m_gbs; m_gbs.setMysqlConnParam(mysqlDBServerCfg); m_gbs.setGBServerParam(gbServerCfg); DBG("initServer start before"); running = true; m_gbs.initServer(); DBG("initServer start after"); usleep(400); // ---------------------测试------------------------ spinLock.lock(); if (!running) { ERR("running is false << DB init error"); exit(0); spinLock.unlock(); while (running) { usleep(4000); } }; std::thread thd(func); thd.detach(); usleep(400); // ---------------------测试------------------------ spinLock.lock(); // if (!running) { // ERR("running is false << DB init error"); // exit(0); // } } DBG("test start");