From a2673edc68a502f9a88ddf8e42f4aded9a8d94ef Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期二, 02 四月 2019 18:48:31 +0800
Subject: [PATCH] 修改信息结构

---
 QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp |  437 +++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 347 insertions(+), 90 deletions(-)

diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
index 7d6a0af..ae0cd84 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -7,14 +7,127 @@
 
 
 using std::string;
+void *gRtspAnalysManagerCamera = nullptr;
 
 RtspAnalysManager::RtspAnalysManager(LDBTool *_dbTool) : m_lDBTool(nullptr), m_maxCount(50), m_currentCount(0) {
-    m_lDBTool=new LDBTool;
+//    INFO("MYH DEBUG HERE");
+    m_lDBTool = _dbTool;
     init();
+
+    //nsq   set callback func
+    DBG("NsqMsgConsumer Init");
+    nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", "cut_dura_edit",
+                                                       to_string(appPref.getIntData("RpcVTIMPort")));
+    nsqMsgConsumer->setMessageCallback(std::bind(&OnMsgFunc, std::placeholders::_1, this));
+    nsqMsgConsumer->init();
+    DBG("NsqMsgConsumer Init END!!");
 
 }
 
+void RtspAnalysManager::OnMsgFunc(void *msgPtr, void *pThisPtr) {
+    evnsq::Message *msg = (evnsq::Message *) msgPtr;
+    DBG("Received a message, id=" << msg->id << " message=[" << msg->body.ToString() << "]");
+    RtspAnalysManager *pthis = (RtspAnalysManager *) pThisPtr;
+    Json::Reader reader;
+    Json::Value value;
+    if (reader.parse(msg->body.ToString(), value)) {
+        auto itor_json_end = value.end();
+        Json::Value cfg_val;
+        for (auto itor_json = value.begin(); itor_json != itor_json_end; ++itor_json) {
+            if (itor_json->isString() && reader.parse(itor_json->asString(), cfg_val)) {
+                if (itor_json.name() == "cut_dura_edit") {
+                    int cut_max_duration = cfg_val["cut_max_duration"].asInt();
+                    int cut_min_duration = cfg_val["cut_min_duration"].asInt();
+                    DBG("cut_max_duration: " << cut_max_duration << "   cut_min_duration: " << cut_min_duration);
+                    appPref.setIntData("n_cut_max_duration", cut_max_duration);
+                    appPref.setIntData("n_cut_min_duration", cut_min_duration);
 
+                    DBG("cut_max_duration: " << cut_max_duration << "   cut_min_duration: " << cut_min_duration);
+//        m_GB28181_Enable = appPref.getIntData("GB28181_Enable");
+//*****************************#todo extract to func ************************************
+                    //#todo GB28181
+                    if (pthis->m_GB28181_Enable) {
+                        DBG("searchCamDevTableByType before");
+                        auto lst = pthis->m_lDBTool->searchCamDevTableByType(1);
+                        DBG("searchCamDevTableByType size:" << lst.size());
+                        if (lst.size() > 0) {
+                            int startCamNO = appPref.getIntData("CamStartNO");
+                            int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1;
+                            INFO("StartCamNO: " << startCamNO << " CamCount: " << CamCount);
+                            auto itor = lst.begin();
+
+                            if (startCamNO >= lst.size()) {
+                                ERR("startCamNO > lst.size()");
+                                return;
+                            }
+
+                            for (int i = 0; i < startCamNO; i++) {
+                                itor++;
+                            }
+                            for (int i = 0; i < CamCount; i++) {
+                                if (itor == lst.end()) {
+                                    ERR("itor == lst.end()");
+                                    return;
+                                }
+                                std::string t_camIdex = itor->str_cam_dev_id.toStdString();
+                                DBG("-----camID:" << t_camIdex << "min:" << cut_min_duration << "max:"
+                                                  << cut_max_duration);
+                                pthis->m_controllers_videoCapElem[t_camIdex]->SetVideoMinMaxSeconds(cut_min_duration,
+                                                                                                    cut_max_duration);
+                                itor++;
+                            }
+                        } else {
+                            ERR("searchCamDevTableByType size is 0");
+                        }
+                    } else {
+                        auto lst = pthis->m_lDBTool->searchCamDevTableByType(0);
+                        if (lst.size() > 0) {
+                            int startCamNO = appPref.getIntData("CamStartNO");
+                            int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1;
+                            INFO("StartCamNO: " << startCamNO << " CamCount: " << CamCount);
+                            auto itor = lst.begin();
+
+                            if (startCamNO >= lst.size()) {
+                                ERR("startCamNO > lst.size()");
+                                return;
+                            }
+
+                            for (int i = 0; i < startCamNO; i++) {
+                                itor++;
+                            }
+
+                            for (int i = 0; i < CamCount; i++) {
+                                if (itor == lst.end()) {
+                                    ERR("itor == lst.end()");
+                                    return;
+                                }
+                                std::string t_camIdex = itor->str_cam_dev_id.toStdString();
+                                DBG("-----camID:" << t_camIdex << "min:" << cut_min_duration << "max:"
+                                                  << cut_max_duration);
+                                pthis->m_controllers[t_camIdex]->SetVideoMinMaxSeconds(cut_min_duration,
+                                                                                       cut_max_duration);
+                                itor++;
+                            }
+
+                        } else {
+                            ERR("searchCamDevTableByType size is 0");
+                        }
+                    }
+//***************************************************************************************
+                }
+
+            } else {
+
+                DBG("itor value is not string ");
+                continue;
+            }
+        }
+
+
+    } else {
+        ERR("Error Message!!");
+    }
+}
 
 static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
                                  std::string passwd, std::string brand) {
@@ -39,43 +152,93 @@
 
 //鍒濆鍖栧嚱鏁�
 void RtspAnalysManager::init() {
+//    INFO("MYH DEBUG HERE")
 
-    auto lst = m_lDBTool->searchCamDevTableAll();
-    Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
+    gRtspAnalysManagerCamera = this;
+    DBG("gRtspAnalysManagerCamera ADDR:" << gRtspAnalysManagerCamera);
 
-    //璁剧疆瑙嗛鐨勬渶闀垮拰鏈�鐭椂闂撮棿闅�
-    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) {
+    m_GB28181_Enable = appPref.getIntData("GB28181_Enable");
+    //#todo GB28181
+    if (m_GB28181_Enable) {
+        auto lst = m_lDBTool->searchCamDevTableByType(1);
+        Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
 
-        int startCamNO = appPref.getIntData("CamStart") * appPref.getIntData("CamStep");
-        int CamCount = appPref.getIntData("CamStep");
-        auto itor = lst.begin();
+        //璁剧疆瑙嗛鐨勬渶闀垮拰鏈�鐭椂闂撮棿闅�
+        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("CamStartNO");
+            int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1;
+            INFO("StartCamNO: " << startCamNO << " CamCount: " << CamCount);
+            auto itor = lst.begin();
 
-        if(startCamNO >= lst.size())
-        {
-            ERR("startCamNO > lst.size()");
-            return;
-        }
-
-        for(int i=0; i < startCamNO; i++){
-            itor++;
-        }
-
-        for (int i = 0; i < CamCount; i++) {
-            if (itor == lst.end())
-            {
-                ERR("itor == lst.end()");
+            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++) {
+                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 = "GB28181";
+
+                INFO("cam add is " << itor->str_addr.toStdString());
+
+                addCamera(t_camIdex, rtsp_url);
+                sleep(1);
+                itor++;
+            }
+        } else {
+            ERR("searchCamDevTableByType size is 0");
         }
+
+    } else {
+        auto lst = m_lDBTool->searchCamDevTableByType(0);
+        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("CamStartNO");
+            int CamCount = appPref.getIntData("CamEndNO") - appPref.getIntData("CamStartNO") + 1;
+            INFO("StartCamNO: " << startCamNO << " CamCount: " << CamCount);
+            auto itor = lst.begin();
+
+            if (startCamNO >= lst.size()) {
+                ERR("startCamNO > lst.size()");
+                return;
+            }
+
+            for (int i = 0; i < startCamNO; i++) {
+
+                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)
 //        {
@@ -87,17 +250,24 @@
 //            addCamera(t_camIdex, rtsp_url);
 //
 //        }
-    } else {
-        ERR("searchCamDevTableAll size is 0");
+        } else {
+            ERR("searchCamDevTableByType size is 0");
+        }
     }
-
 }
 
 RtspAnalysManager::~RtspAnalysManager() {
+    INFO("Program Exit");
     for (auto controller: m_controllers) {
+        INFO("Delete Controller: " << controller.first);
         delete controller.second;
     }
     m_controllers.clear();
+    for (auto controller: m_controllers_videoCapElem) {
+        INFO("Delete Controller: " << controller.first);
+        delete controller.second;
+    }
+    m_controllers_videoCapElem.clear();
 }
 
 /**
@@ -108,30 +278,76 @@
  * @param rtsp 涓婇潰鐨勬憚鍍忔満瀵瑰簲鐨勮棰戣矾寰�
  * @return -1 娣诲姞澶辫触,0 娣诲姞鎴愬姛
  */
-int RtspAnalysManager::addCamera(const std::string &index, const std::string& rtsp) {
-    auto lst = m_lDBTool->searchCamDevTableAll();
-    Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
+int RtspAnalysManager::addCamera(const std::string &index, const std::string &rtsp) {
 
-    if (m_controllers.find(index) == m_controllers.end()) {
-        if (m_currentCount >= m_maxCount) {
-            ERR("addCamera faild, camera's num is full!")
-            return -1;
+    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] = new PushStreamAppPipeController(const_cast<string &>(index),
+                                                                                25, 0, appPref.getIntData("gpu.index"),
+                                                                                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);
         }
-        DBG("RTSP: "<<rtsp<<"  INDEX:"<<index);
-        m_imgRedisControllers[index] = new RtspImageRedisElement(index);
-        m_imgRedisControllers[index]->start();
-
-        m_controllers[index] = new RtspCaptureElement(rtsp,index, 25,3000,0,this);
-        m_controllers[index]->start();
-        m_controllers[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration,lst_dev.n_cut_max_duration);
-        m_currentCount++;
-        return 0;
-
     } else {
-        removeCamera(index);
-        DBG("removeCamera " << index);
-        return addCamera(index, rtsp);
+        //    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");
+            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();
+
+            m_controllers[index] = new RtspCaptureElement(rtsp, index, 25, 3000, appPref.getIntData("gpu.index"), this);
+            m_controllers[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration, lst_dev.n_cut_max_duration);
+            m_controllers[index]->start();
+            m_currentCount++;
+            return 0;
+
+        } else {
+            removeCamera(index);
+            INFO("removeCamera " << index);
+            //DBG("removeCamera " << index);
+            return addCamera(index, rtsp);
+        }
     }
+
 }
 
 /**
@@ -140,19 +356,33 @@
  * @return 鎬绘槸0
  */
 int RtspAnalysManager::removeCamera(const std::string &index) {
-    if (m_controllers.find(index) == m_controllers.end())return -1;
-    auto controller = m_controllers[index];
-    controller->stop();
-    controller->wait();
-    delete controller;
-    m_controllers.erase(index);
-    m_currentCount--;
+    INFO("MYH DEBUG HERE");
+    if (m_GB28181_Enable) {
+        if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end())return -1;
+        auto controller = m_controllers_videoCapElem[index];
+        controller->stop();
+        controller->wait();
+        delete controller;
+        m_controllers_videoCapElem.erase(index);
+        m_currentCount--;
+    } else {
+        if (m_controllers.find(index) == m_controllers.end())return -1;
+        auto controller = m_controllers[index];
+        controller->stop();
+        controller->wait();
+        delete controller;
+        m_controllers.erase(index);
+        m_currentCount--;
+    }
 
+    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;
 }
 
@@ -161,16 +391,30 @@
  * @return
  */
 int RtspAnalysManager::removeAll() {
-    for (auto controller: m_controllers) {
-        controller.second->stop();
-    }
-    for (auto controller: m_controllers) {
-        controller.second->wait();
-        delete controller.second;
-    }
-    m_controllers.clear();
+//    INFO("MYH DEBUG HERE");
 
+    if (m_GB28181_Enable) {
+        for (auto controller: m_controllers_videoCapElem) {
+            controller.second->stop();
+        }
+        for (auto controller: m_controllers_videoCapElem) {
+            controller.second->wait();
+            delete controller.second;
+        }
+        m_controllers_videoCapElem.clear();
+    } else {
+        for (auto controller: m_controllers) {
+            controller.second->stop();
+        }
+        for (auto controller: m_controllers) {
+            controller.second->wait();
+            delete controller.second;
+        }
+        m_controllers.clear();
+    }
+//    INFO("MYH DEBUG HERE");
 
+    m_imgRedisCRwLock.wrlock();
     for (auto controller: m_imgRedisControllers) {
         controller.second->stop();
     }
@@ -178,10 +422,12 @@
         controller.second->wait();
         delete controller.second;
     }
-    m_controllers.clear();
+    m_imgRedisControllers.clear();
+    m_imgRedisCRwLock.unlock();
 
 
     m_currentCount = 0;
+//    INFO("MYH DEBUG HERE");
     return 0;
 }
 
@@ -195,36 +441,47 @@
     return m_currentCount;
 }
 
-
 //褰曞彇瑙嗛鐨凴PC鐨勬帴鍙e嚱鏁�
-::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);
-        } else{
-            ERR("Can not Find CamId "<<nameSt.m_camId);
+::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()) {
+        if (m_GB28181_Enable) {
+            auto pCaptureElem = m_controllers_videoCapElem.find(nameSt.m_camId);
+            if (pCaptureElem != m_controllers_videoCapElem.end()) {
+//#todo ~~~~~~!!!!!!! 杩欓噷鏈塨ug 闇�瑕佹斁寮�璋冭瘯
+                pCaptureElem->second->SaveVideo(name);
+            } else {
+                ERR("Can not Find CamId " << nameSt.m_camId);
+            }
+        } else {
+            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);
+    } else {
+        ERR("Record Video Failed:Name Not Valid  Name:  " << name);
     }
     return name;
 }
 
 //淇濆瓨瑙嗛鍒癛tspImageRedis鐨勯槦鍒�,鐢盧tspCaptureElement璋冪敤
-bool RtspAnalysManager::SaveImageToRedis(const std::string& camId,const std::string& imageName,const cv::Mat& img)
-{
+bool RtspAnalysManager::SaveImageToRedis(const std::string &camId, const std::string &imageName, const cv::Mat &img) {
+//    INFO("MYH DEBUG HERE  " << camId);
+
+//    m_imgRedisCRwLock.rdlock();
     auto item = m_imgRedisControllers.find(camId);
-    if(item!=m_imgRedisControllers.end())
-    {
-        item->second->SaveImage(imageName,img);
+    if (item != m_imgRedisControllers.end()) {
+//        INFO("Save Succeed Cam: " << camId << " ImageKey: " << imageName);
+        item->second->SaveImage(imageName, img);
+    } else {
+        ERR("Save Failed Cam: " << camId << " ImageKey: " << imageName);
     }
+//    m_imgRedisCRwLock.unlock();
+//    INFO("MYH DEBUG HERE");
     return true;
 }
 

--
Gitblit v1.8.0