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

---
 QiaoJiaSystem/DataManagerServer/demo.cpp                          |    4 
 QiaoJiaSystem/VptServer/VptDetectWrapper.cpp                      |    2 
 QiaoJiaSystem/DataManagerServer/http_configserver.cpp             |    2 
 QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp             |   20 ++++++
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp  |    6 +-
 QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h |   33 +++++++++++
 QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp            |    2 
 QiaoJiaSystem/StructureApp/FaceExtractElement.cpp                 |   12 ++--
 QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp             |   15 ++++
 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp            |   56 ++++++++++++------
 10 files changed, 117 insertions(+), 35 deletions(-)

diff --git a/QiaoJiaSystem/DataManagerServer/demo.cpp b/QiaoJiaSystem/DataManagerServer/demo.cpp
index 6a83272..1a0073b 100644
--- a/QiaoJiaSystem/DataManagerServer/demo.cpp
+++ b/QiaoJiaSystem/DataManagerServer/demo.cpp
@@ -14,8 +14,8 @@
     std::string publish_basepath = "rtmp://localhost:1934/live/cam" + std::to_string(554);
     appPref.setIntData("gpu.index", 0);
     appPref.setStringData("publish.basepath", publish_basepath);
-    appPref.setIntData("pulish.width", 640);
-    appPref.setIntData("pulish.height", 360);
+//    appPref.setIntData("pulish.width", 640);
+//    appPref.setIntData("pulish.height", 360);
 
     AppPipeController a(0, json);
     a.start();
diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
index 4c462e4..5761756 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..cedc675 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -154,14 +154,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/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
index f965ded..4a49548 100644
--- a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -61,12 +61,12 @@
 }
 
 void FaceExtractElement::timerFunc() {
-    INFO("MYH Run Here");
+//    INFO("MYH Run Here");
     std::vector<FaceToExtract> faceExtractQueueTmp;
     {
         std::lock_guard<std::mutex> lg(imageQueueMutex);
         if (faceExtractQueue.empty()) {
-            ERR("faceExtractQueue.empty ");
+//            ERR("faceExtractQueue.empty ");
             return;
         }
         faceExtractQueueTmp.swap(faceExtractQueue);
@@ -78,7 +78,7 @@
         float t_com_sc = m_sdkRule.nThreshold == 0 ? 75 : m_sdkRule.nThreshold;
 
 
-        DBG(" TESTCODE getValue" << t_camIdex << "  " << t_com_sc << "  " << t_com_sc / 100);
+//        DBG(" TESTCODE getValue" << t_camIdex << "  " << t_com_sc << "  " << t_com_sc / 100);
 
         t_com_sc = t_com_sc / 100;
 
@@ -108,7 +108,7 @@
 
             unsigned long size = faceExtractQueueTmp[i].facesPos.size();
             for (int j = 0; j < size; j++) {
-                auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
+				auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
                                                           sharedMemory->key().toStdString());
 //                {
 //                    //#todo
@@ -118,7 +118,7 @@
 //                    cv::imwrite(string1, image);
 //                }
                 if (feature.empty()) {
-                    INFO("No Face Find: " << getProperty("imgKey"));
+//                    INFO("No Face Find: " << getProperty("imgKey"));
                     continue;
                 }
                 features.clear();
@@ -131,7 +131,7 @@
                     std::string strImgUrlTmp = "";
                     fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
                     //  strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
-                    DBG("strImgUrlTmp=" << strImgUrlTmp);
+//                    DBG("strImgUrlTmp=" << strImgUrlTmp);
                     strImgUrl.clear();
                     strImgUrl = strImgUrlTmp;
 //                    strImgUrl.append("/").append(strImgUrlTmp);
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
index c54cf32..9900ab5 100644
--- a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
+++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -102,7 +102,17 @@
             //#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 = cfg_val["str_cam_dev_id"].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) {
                             auto lst = pthis->m_lDBTool->searchCamDevTableByType(1);
@@ -126,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 {
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 374529b..38fcecb 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
@@ -39,39 +39,57 @@
         }
     }
 
-    m_picCount++;
-    //鍑犲紶閫変竴寮犳斁鍏edis
-    if (m_picCount % m_nPicsPickOne != 0) {
-        return;
-    } else {
-        m_picCount.store(0);
-    }
+    u_char *data;
+    int width = 0, height = 0, step = 0, cn = 0;
+    cv::Mat copyMat;
 
-    {
-        u_char *data;
-        int width = 0, height = 0, step = 0, cn = 0;
-        m_capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
-
-        cv::Mat img(height, width, CV_8UC3, data, step);
-        cv::Mat copyMat;
-        img.copyTo(copyMat);
-        std::string imageName = m_capture->GetImageName();
-        m_pManager->SaveImageToRedis(m_camId, imageName, copyMat);
-    }
-    //#todo publish Video
+    //#publish Video
     if (m_publishVideoRet) {
         if (videoPublishElement == nullptr) {
             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");
             videoPublishElement = new ffmpeg::VideoPublishElement(path, size_, "flv", 25, gupIdx);
+            videoPublishElement->start();
         } else {
+//            DBG("videoPublishElement->setImage()");
+            m_capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
+            cv::Mat img(height, width, CV_8UC3, data, step);
+            img.copyTo(copyMat);
+
+            if (!copyMat.empty()) {
+                videoPublishElement->setImage(copyMat);
+            } else {
+                DBG("copyMat.empty()");
+            }
+        }
+    } else {
+        if (videoPublishElement != nullptr) {
+            DBG("videoPublishElement->stop()");
             videoPublishElement->stop();
             videoPublishElement->wait();
             delete videoPublishElement;
             videoPublishElement = nullptr;
         }
     }
+
+    //鍑犲紶閫変竴寮犳斁鍏edis
+    m_picCount++;
+    if (m_picCount % m_nPicsPickOne != 0) {
+//        return;
+    } else {
+        m_picCount.store(0);
+
+        if (copyMat.empty()) {
+//        ERR("copyMat.empty()");
+            m_capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
+            cv::Mat img(height, width, CV_8UC3, data, step);
+            img.copyTo(copyMat);
+        }
+        std::string imageName = m_capture->GetImageName();
+        m_pManager->SaveImageToRedis(m_camId, imageName, copyMat);
+    }
+
     fireConnectors();
 }
 
diff --git a/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp b/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
index 04e886c..f49d7cf 100644
--- a/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
+++ b/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
@@ -64,6 +64,8 @@
 
         if (colorIndex < 0 || colorIndex >= 9)continue;
         if(colorIndex==4) DBG("detect a car, score =" << result.info[i].obj_score);
+        if(colorIndex==1) DBG("detect a bike, score =" << result.info[i].obj_score);
+        if(colorIndex==2) DBG("detect a moto, score =" << result.info[i].obj_score);
 //        sprintf(str_i, "%s:%.2f", type[colorIndex].c_str(), result.info[i].obj_score);
 
 //        rectangle(process_image,

--
Gitblit v1.8.0