From 26458587182bf9a2bc10a5fa8e5ab6e41211da74 Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期一, 22 四月 2019 13:46:02 +0800
Subject: [PATCH] 推流按cap的时间来

---
 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h             |    2 +-
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h   |    2 +-
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp |    9 +++++----
 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp           |   23 ++++++++++++-----------
 4 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
index cedc675..9aedc2d 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,12 @@
                             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()) {
                                 p_this->videoPublishElement->setImage(p_this->m_image);
+                                p_this->videoPublishElement->submit();
                             } else {
                                 ERR("m_image.empty()");
                             }
@@ -92,8 +95,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();
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
index 8e0a92c..2924b96 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -78,7 +78,7 @@
         //鐢ㄦ潵淇濆瓨褰曞儚瑙嗛鐨勮矾寰�
         std::string m_cutPath;
         std::atomic<bool> m_publishVideoRet{false};
-        ffmpeg::VideoPublishElement * videoPublishElement{nullptr};
+        ffmpeg::PipeVideoPublishElement * videoPublishElement{nullptr};
     private:
         /***
          * 鍚姩瀹炴椂娴佹帴鏀舵暟鎹嚎绋�
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
index 38fcecb..7316f37 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
@@ -49,7 +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");
-            videoPublishElement = new ffmpeg::VideoPublishElement(path, size_, "flv", 25, gupIdx);
+            videoPublishElement = new ffmpeg::PipeVideoPublishElement(path, size_, "flv", 25, gupIdx);
             videoPublishElement->start();
         } else {
 //            DBG("videoPublishElement->setImage()");
@@ -59,6 +59,7 @@
 
             if (!copyMat.empty()) {
                 videoPublishElement->setImage(copyMat);
+                videoPublishElement->submit();
             } else {
                 DBG("copyMat.empty()");
             }
@@ -76,20 +77,20 @@
     //鍑犲紶閫変竴寮犳斁鍏edis
     m_picCount++;
     if (m_picCount % m_nPicsPickOne != 0) {
-//        return;
+        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);
     }
 
+    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 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