From 6540a2a9d69432c4cc475e3b32eae11e9e0ace73 Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期四, 11 四月 2019 20:28:10 +0800
Subject: [PATCH] 1.srs的分辨率在config.json配置 2.单播推流控制,国标摄像机差一个关闭测试 3. 底库字段添加

---
 QiaoJiaSystem/DataManagerServer/demo.cpp                         |    4 
 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h             |    2 
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h   |    4 
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp |   70 ++++++++++++++++++----
 QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp                      |    7 ++
 QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp            |    4 
 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp           |   57 ++++++++++++------
 7 files changed, 108 insertions(+), 40 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/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
index 9b7b775..40b3a8c 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -53,6 +53,36 @@
 #ifdef TestCode
                 DBG("waitSignal(\"DecoderImageOK\") after");
 #endif
+                {
+                    if (p_this->m_publishVideoRet) {
+                        if (p_this->videoPublishElement == nullptr) {
+                            string path = appConfig.getStringProperty("srsAddr") + "cam" + p_this->m_chanPubID + ".flv";
+                            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->start();
+                        } else {
+                            DBG("videoPublishElement->setImage() : " << p_this->m_chanPubID);
+                            if (!p_this->m_image.empty()) {
+                                p_this->videoPublishElement->setImage(p_this->m_image);
+                            } else {
+                                ERR("m_image.empty()");
+                            }
+                        }
+                    } else {
+                        if (p_this->videoPublishElement != nullptr) {
+                            DBG("videoPublishElement->stop() :"  << p_this->m_chanPubID);
+                            p_this->videoPublishElement->stop();
+                            p_this->videoPublishElement->wait();
+                            delete p_this->videoPublishElement;
+                            p_this->videoPublishElement = nullptr;
+                        }else{
+                            DBG("videoPublishElement null :" << p_this->m_chanPubID);
+                        }
+                    }
+                }
+
                 /****褰曞儚妯″潡浠g爜*****/
                 p_this->m_picCount++;
                 //鍑犲紶閫変竴寮犳斁鍏edis
@@ -204,20 +234,32 @@
 }
 
 void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() {
-
-    if (m_publishVideoRet) {
-        if (videoPublishElement == nullptr) {
-            string path = appConfig.getStringProperty("srsAddr") + "cam" + m_chanPubID + ".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);
-        } else {
-            videoPublishElement->stop();
-            videoPublishElement->wait();
-            delete videoPublishElement;
-            videoPublishElement = nullptr;
-        }
-    }
+//    {
+//        if (m_publishVideoRet) {
+//            if (videoPublishElement == nullptr) {
+//                string path = appConfig.getStringProperty("srsAddr") + "cam" + m_chanPubID + ".flv";
+//                cv::Size size_(appConfig.getIntProperty("pulish.width"), appConfig.getIntProperty("pulish.height"));
+//                int gupIdx = appPref.getIntData("gpu.index");
+//                DBG("videoPublishpath:" << path << " h:" << size_.height << " w:" << size_.width);
+//                videoPublishElement = new ffmpeg::VideoPublishElement(path, size_, "flv", 25, gupIdx);
+//                videoPublishElement->start();
+//            } else {
+//                if (!m_image.empty()) {
+//                    videoPublishElement->setImage(m_image);
+//                } else {
+//                    ERR("m_image.empty()");
+//                }
+//            }
+//        } else {
+//            if (videoPublishElement != nullptr) {
+//                DBG("videoPublishElement->stop()");
+//                videoPublishElement->stop();
+//                videoPublishElement->wait();
+//                delete videoPublishElement;
+//                videoPublishElement = nullptr;
+//            }
+//        }
+//    }
 
     fireConnectors();
 }
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
index 0ca39eb..8e0a92c 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -73,12 +73,12 @@
 
         std::atomic<bool> m_running;
         std::atomic<bool> m_waitSignal;
-        std::atomic<bool> m_waitSignalrunning;
+        std::atomic<bool> m_waitSignalrunning{false};
 
         //鐢ㄦ潵淇濆瓨褰曞儚瑙嗛鐨勮矾寰�
         std::string m_cutPath;
         std::atomic<bool> m_publishVideoRet{false};
-        ffmpeg::VideoPublishElement * videoPublishElement;
+        ffmpeg::VideoPublishElement * videoPublishElement{nullptr};
     private:
         /***
          * 鍚姩瀹炴椂娴佹帴鏀舵暟鎹嚎绋�
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
index 9c893a7..a3b7e75 100644
--- a/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
+++ b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
@@ -241,6 +241,11 @@
 //        %%      ALTER TABLE sys_o_tables ADD COLUMN uploadFlag varchar(255) DEFAULT 0;
 //        %%      ALTER TABLE sys_o_tables ADD COLUMN cmpThreshold varchar(255) DEFAULT 60;
 //        %%      ALTER TABLE sys_o_tables ADD COLUMN enabled varchar(255) DEFAULT 1;
+
+//        %%      ALTER TABLE "0cd82a8b-5285-5737-ab19-8c07247c797e" ADD COLUMN uploadFlag varchar(255) DEFAULT 0;
+//        %%      ALTER TABLE "0cd82a8b-5285-5737-ab19-8c07247c797e" ADD COLUMN cmpThreshold varchar(255) DEFAULT 60;
+//        %%      ALTER TABLE "0cd82a8b-5285-5737-ab19-8c07247c797e" ADD COLUMN enabled varchar(255) DEFAULT 1;
+
         std::string sql = "CREATE TABLE \"main\".\"sys_o_tables\" (";
         sql.append(" uuid        varchar(255) PRIMARY KEY, ");
 //        sql.append(" ClusterName varchar(255) DEFAULT NULL,");//鏈湴搴撲笉闇�瑕�
@@ -286,6 +291,8 @@
         sql.append("create_by   varchar(255) DEFAULT NULL,");
         sql.append("del_flag    INTEGER      DEFAULT 0,");
         sql.append("monitorLevel    varchar(255)      DEFAULT 0,");
+        sql.append("uploadFlag  varchar(255) DEFAULT 0,");
+        sql.append("cmpThreshold    varchar(255) DEFAULT 60,");
         sql.append("enabled     varchar(255) DEFAULT 1");
         sql.append(");");
         // 浜鸿劯鐗瑰緛琛�
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
index 36b2df4..b281268 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -115,12 +115,12 @@
                     if (pthis->m_GB28181_Enable) {
                         if (pthis->m_controllers_videoCapElem.find(cam_idx) !=
                             pthis->m_controllers_videoCapElem.end()) {
-                            INFO("cam add is " << cfg_val["str_addr"].asString());
+                            INFO("cam add is " << cam_idx);
                             pthis->m_controllers_videoCapElem[cam_idx]->startPublishVideo();
                         }
                     } else {
                         if (pthis->m_controllers.find(cam_idx) != pthis->m_controllers.end()) {
-                            INFO("cam add is " << cfg_val["str_addr"].asString());
+                            INFO("cam add is " << cam_idx);
                             pthis->m_controllers[cam_idx]->startPublishVideo();
                         }
                     }
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
index 374529b..33a73fc 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
@@ -39,39 +39,58 @@
         }
     }
 
-    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");
+            DBG("size_:" << size_.width << "X" << size_.height);
             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/VideoToImageMulth/RtspCaptureElement.h b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
index 36fa3ea..af806a5 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
@@ -56,7 +56,7 @@
 
 
     std::atomic<bool> m_publishVideoRet{false};
-    ffmpeg::VideoPublishElement *videoPublishElement;
+    ffmpeg::VideoPublishElement *videoPublishElement{nullptr};
     // Redis鐨勫伐鍏风被
 //        HiredisTool m_redisTool;
 

--
Gitblit v1.8.0