From f946a62d3921e86b44ff8e2973138304b9cd53cd Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期二, 16 四月 2019 16:36:32 +0800
Subject: [PATCH] 解决修改参数和推流画面跳跃问题

---
 QiaoJiaSystem/DataManagerServer/http_configserver.cpp             |    2 
 QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp             |   45 +++++++++------
 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h              |    2 
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h    |    3 
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp  |   16 +++--
 QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h |   33 +++++++++++
 QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp            |    2 
 QiaoJiaSystem/StructureApp/FaceExtractElement.cpp                 |    2 
 QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp             |   15 ++++
 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp            |    4 
 10 files changed, 90 insertions(+), 34 deletions(-)

diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
index bfb927c..85d8485 100644
--- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -262,6 +262,8 @@
     VssDomainUnitTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     VssLocalSettingTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     CamDevController::instance()->registerHttpServices(_HttpSrvRetRecieve);
+    //todo
+    CamDevController::instance()->nsqMsgProducerSet(nsqMsgProducer);
     VssUpperSvrTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
 
 
diff --git a/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h b/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
index 22aa644..2656b88 100755
--- a/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
+++ b/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
@@ -8,6 +8,7 @@
 #include "vss/model/CamDev.h"
 #include "VssBaseController.h"
 #include <mysql++.h>
+#include <NsqMsgTool.hpp>
 
 using namespace std;
 
@@ -24,6 +25,14 @@
     static CamDevController *instance() {
         static CamDevController instance;
         return &instance;
+    }
+
+private:
+    //shared_ptr
+    BasicMsg::Nsq::NsqMsgProducer  *_nsqMsgProducer;
+public:
+    void nsqMsgProducerSet(BasicMsg::Nsq::NsqMsgProducer *nsqMsgProducer){
+        _nsqMsgProducer = nsqMsgProducer;
     }
 
 public:
@@ -163,6 +172,18 @@
             }
 
         }
+
+        {
+            std::string topic = "VideoToImageMulth";
+            std::string topic1 = "VideoAnalysFromHC";
+            Json::Value json_cfg;
+            json_cfg["cam_del"] = content;
+            std::string msg = json_cfg.toStyledString();
+            DBG("msg:" << msg);
+            _nsqMsgProducer->Publish(topic, (void *) (&msg));
+            _nsqMsgProducer->Publish(topic1, (void *) (&msg));
+        }
+
         return responseJsonValue.toStyledString();
     }
 
@@ -245,6 +266,18 @@
                                                                               idJsonValue.asString());
             }
         }
+
+        {
+            std::string topic = "VideoToImageMulth";
+            std::string topic1 = "VideoAnalysFromHC";
+            Json::Value json_cfg;
+            json_cfg["cam_edit"] = content;
+            std::string msg = json_cfg.toStyledString();
+            DBG("msg:" << msg);
+            _nsqMsgProducer->Publish(topic, (void *) (&msg));
+            _nsqMsgProducer->Publish(topic1, (void *) (&msg));
+        }
+
         return responseJsonValue.toStyledString();
     }
 
diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
index 299ec03..7787821 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -373,7 +373,7 @@
 
 bool BASICGB28181::FFmpegDecoderJPG::stopThd() {
     TryCath(
-        DBG(m_camIdx << "  FFmpegDecoderJPG stopThd ... " << m_camIdx);
+        DBG("FFmpegDecoderJPG stopThd ... " << m_camIdx);
         m_running = false;
     );
     return true;
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
index 9712880..fb01c4d 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -53,6 +53,9 @@
 #ifdef TestCode
                 DBG("waitSignal(\"DecoderImageOK\") after");
 #endif
+                //            浠巉fmpeg瑙g爜绫讳腑鑾峰彇鍥剧墖
+                p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image);
+
                 {
                     if (p_this->m_publishVideoRet) {
                         if (p_this->videoPublishElement == nullptr) {
@@ -60,12 +63,13 @@
                             cv::Size size_(appConfig.getIntProperty("pulish.width"), appConfig.getIntProperty("pulish.height"));
                             int gupIdx = appPref.getIntData("gpu.index");
                             DBG("videoPublishpath: "  << p_this->m_chanPubID << path << " h:" << size_.height);
-                            p_this->videoPublishElement = new ffmpeg::VideoPublishElement(path, size_, "flv", 25, gupIdx);
+                            p_this->videoPublishElement = new ffmpeg::PipeVideoPublishElement(path, size_, "flv", 25, gupIdx);
                             p_this->videoPublishElement->start();
                         } else {
-//                            DBG("videoPublishElement->setImage() : " << p_this->m_chanPubID);
                             if (!p_this->m_image.empty()) {
+//                                DBG("videoPublishElement->setImage() : " << p_this->m_chanPubID);
                                 p_this->videoPublishElement->setImage(p_this->m_image);
+                                p_this->videoPublishElement->submit();
                             } else {
                                 ERR("m_image.empty()");
                             }
@@ -92,8 +96,6 @@
                     p_this->m_picCount.store(0);
                 }
 
-//            浠巉fmpeg瑙g爜绫讳腑鑾峰彇鍥剧墖
-                p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image);
                 {
                     cv::Mat copyMat;
                     std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName();
@@ -154,14 +156,14 @@
                     } else {
 
                         // 鏍规嵁reopenTime鍒ゆ柇鏄惁闇�瑕侀噸鍚�
-                        if (reopenTime < 0) {
+                        if (p_this->reopenTime < 0) {
                             p_this->m_running = false;
                             stop();
                             INFO("grabFrame faild, element stopping");
                         } else {
                             //todo 涓氬姟姝婚攣
-                            usleep((6 - reopenTime--) * 1000000);
-                            INFO("grabFrame faild, try reopen video, reopenTime:" << reopenTime);
+                            usleep((6 - p_this->reopenTime--) * 1000000);
+                            INFO("grabFrame faild, try reopen video, reopenTime:" << p_this->reopenTime);
 
                             //鍏抽棴ffmpeg瑙g爜妯″潡
                             p_this->m_fFmpegDecoderJPG.stopThd();
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
index 8e0a92c..b77d67f 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -37,7 +37,6 @@
          */
         bool getRunning();
 
-
         /***
          * 鑾峰彇鍥剧墖
          * @return
@@ -78,7 +77,7 @@
         //鐢ㄦ潵淇濆瓨褰曞儚瑙嗛鐨勮矾寰�
         std::string m_cutPath;
         std::atomic<bool> m_publishVideoRet{false};
-        ffmpeg::VideoPublishElement * videoPublishElement{nullptr};
+        ffmpeg::PipeVideoPublishElement * videoPublishElement{nullptr};
     private:
         /***
          * 鍚姩瀹炴椂娴佹帴鏀舵暟鎹嚎绋�
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
index 88e51e8..4a49548 100644
--- a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -54,7 +54,7 @@
 void FaceExtractElement::submitFaceExtract(FaceToExtract faceToExtract) {
     std::lock_guard<std::mutex> lg(imageQueueMutex);
     if (faceExtractQueue.size() >= VECTOR_MAX) {
-        ERR("FaceExtractElement::submitFaceExtract too fast, imageQueue.size()>=QUEUE_MAX : " << faceExtractQueue.size())
+        ERR("FaceExtractElement::submitFaceExtract too fast, imageQueue.size()>=QUEUE_MAX")
         return;
     }
     faceExtractQueue.push_back(faceToExtract);
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
index a0bac2a..9900ab5 100644
--- a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
+++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -32,20 +32,18 @@
         IMPORT_APP_ARGS;
         //nsq   set callback func
         DBG("NsqMsgConsumer Init");
-        string pName(argv[0]);
-        if(argv[0][0] == '.' && argv[0][1] == '/')
-        {
+        DBG("argv[0]:" << argv[0]);
+        if(argv[0][0] == '.' && argv[0][1] == '/'){
             string pName(argv[0]+2, argv[0]+strlen(argv[0]));
-            DBG("pName(argv[0]) :" << pName);
+            DBG("pName:" << pName);
             nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", pName,
                                                                to_string(appPref.getIntData("RpcVTIMPort")));
         }else{
             string pName(argv[0]);
-            DBG("pName(argv[0]) :" << pName);
+            DBG("pName:" << pName);
             nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", pName,
                                                                to_string(appPref.getIntData("RpcVTIMPort")));
         }
-
         nsqMsgConsumer->setMessageCallback(std::bind(&OnMsgFunc, std::placeholders::_1, this));
         nsqMsgConsumer->init();
         DBG("NsqMsgConsumer Init END!!");
@@ -104,12 +102,16 @@
             //#todo 浣跨敤绛栫暐妯″紡?鍙戦�佺澶氫釜鎸囦护绱Н鍚庡彂閫�?
             if (itor_json->isString() && reader.parse(itor_json->asString(), cfg_val)) {
                 if (itor_json.name() == "cam_edit" || itor_json.name() == "editSdkRule") {
-                    string cam_idx = "";
-                    if(itor_json.name() == "cam_edit"){
-                        cam_idx = cfg_val["str_cam_dev_id"].asString();
-                    } else {
-                        cam_idx = cfg_val["strCamId"].asString();
-                    }
+					string cam_idx = "";
+					if(itor_json.name() == "cam_edit"){
+                        if (pthis->m_GB28181_Enable){
+	                        cam_idx = cfg_val["equipCode"].asString();
+	                    }else{
+	                        cam_idx = cfg_val["str_cam_dev_id"].asString();
+	                    }
+					} else {
+						cam_idx = cfg_val["strCamId"].asString();
+					}
 
                     if (pthis->controllers.find(cam_idx) != pthis->controllers.end()) {
                         if (pthis->m_GB28181_Enable) {
@@ -134,7 +136,13 @@
                         }
                     }
                 } else if (itor_json.name() == "cam_del") {
-                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
+//                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
+                    string cam_idx = "";
+                    if(cfg_val["equipCode"].asString().size()){
+                        cam_idx = cfg_val["equipCode"].asString();
+                    }else if(cfg_val["str_cam_dev_id"].asString().size()){
+                        cam_idx = cfg_val["str_cam_dev_id"].asString();
+                    }
                     pthis->removeCamera(cam_idx);
                 }
             } else {
@@ -262,15 +270,16 @@
         rule.second.strAddr = item.str_addr;
         rule.second.weekRuleVec = m_lDBTool->searchCameraWeekRuleByCamId(item.str_cam_dev_id, rule.first);
 
-        if (rule.second.nSdkType == PerStaticSdk) {
+//        if (rule.second.nSdkType == PerStaticSdk || rule.second.nSdkType == PerimeterSdk
+//            || rule.second.nSdkType == KeepRightSdk || rule.second.nSdkType == KeepRightSdk) {
             float temp = (float)1 - (float) (rule.second.nThreshold) / 100;
             rule.second.fSensitivity = (temp * 50 + 50) / 100;
 //            rule.second.fSensitivity = (temp * 25 + 75) / 100;
 
-        } else if (rule.second.nSdkType != FaceSdk) {
-            float temp = 1 - (float) (rule.second.nThreshold) / 100;
-            rule.second.fSensitivity = (5 + 90 * temp) / 100;
-        }
+//        } else if (rule.second.nSdkType != FaceSdk) {
+//            float temp = (float)1 - (float) (rule.second.nThreshold) / 100;
+//            rule.second.fSensitivity = (temp * 90 + 5) / 100;
+//        }
         DBG("fSensitivity" << rule.second.fSensitivity);
     }
     appPref.setStringData(t_camIdex + "rtsp", rtsp_url);
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
index fa3087a..295ad0b 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -90,7 +90,13 @@
                         }
                     }
                 } else if (itor_json.name() == "cam_edit") {
-                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
+                    string cam_idx = "";
+                    if(pthis->m_GB28181_Enable){
+                        cam_idx = cfg_val["equipCode"].asString();
+                    }else{
+                        cam_idx = cfg_val["str_cam_dev_id"].asString();
+                    }
+
                     if (pthis->m_GB28181_Enable) {
                         if (pthis->m_controllers_videoCapElem.find(cam_idx) !=
                             pthis->m_controllers_videoCapElem.end()) {
@@ -108,7 +114,12 @@
                         }
                     }
                 } else if (itor_json.name() == "cam_del") {
-                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
+                    string cam_idx = "";
+                    if(pthis->m_GB28181_Enable){
+                        cam_idx = cfg_val["equipCode"].asString();
+                    }else{
+                        cam_idx = cfg_val["str_cam_dev_id"].asString();
+                    }
                     pthis->removeCamera(cam_idx);
                 } else if (itor_json.name() == "cam_startPublish") {
                     string cam_idx = cfg_val["id"].asString();
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
index 33a73fc..7316f37 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
@@ -49,8 +49,7 @@
             string path = appConfig.getStringProperty("srsAddr") + "cam" + m_camId + ".flv";
             cv::Size size_(appConfig.getIntProperty("pulish.width"), appConfig.getIntProperty("pulish.height"));
             int gupIdx = appPref.getIntData("gpu.index");
-            DBG("size_:" << size_.width << "X" << size_.height);
-            videoPublishElement = new ffmpeg::VideoPublishElement(path, size_, "flv", 25, gupIdx);
+            videoPublishElement = new ffmpeg::PipeVideoPublishElement(path, size_, "flv", 25, gupIdx);
             videoPublishElement->start();
         } else {
 //            DBG("videoPublishElement->setImage()");
@@ -60,6 +59,7 @@
 
             if (!copyMat.empty()) {
                 videoPublishElement->setImage(copyMat);
+                videoPublishElement->submit();
             } else {
                 DBG("copyMat.empty()");
             }
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
index af806a5..da3d6c3 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
@@ -56,7 +56,7 @@
 
 
     std::atomic<bool> m_publishVideoRet{false};
-    ffmpeg::VideoPublishElement *videoPublishElement{nullptr};
+    ffmpeg::PipeVideoPublishElement *videoPublishElement{nullptr};
     // Redis鐨勫伐鍏风被
 //        HiredisTool m_redisTool;
 

--
Gitblit v1.8.0