From 051c6863dd418c9cfbca787e449fbdeadde977c7 Mon Sep 17 00:00:00 2001 From: pans <pansen626@sina.com> Date: 星期二, 16 四月 2019 17:17:26 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/1.3nsq' into 1.3nsq --- QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | 65 ++++++++++++++++++++++---------- 1 files changed, 45 insertions(+), 20 deletions(-) diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp index 2f7010f..9712880 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp @@ -5,6 +5,7 @@ #include <opencv2/imgproc.hpp> #include <qt5/QtCore/QDateTime> #include <basic/util/app/AppPreference.hpp> +#include <basic/util/app/AppConfig.h> #include "VideoCaptureElementWithRtp.h" #include <VideoToImageMulth/RtspAnalysManager.h> @@ -35,7 +36,7 @@ bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) { - if(!m_waitSignalrunning) { + if (!m_waitSignalrunning) { DBG("std::thread waitSignalAndEmit create New!!"); //绛夊緟涓嬪眰ffmpeg灏唕tp鍖呰В鐮佹垚涓哄浘鐗囧悗瑙﹀彂淇″彿,鐒跺悗瑙﹀彂褰撳墠绫荤殑submit std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { @@ -52,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 @@ -67,9 +98,8 @@ cv::Mat copyMat; std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName(); p_this->m_image.copyTo(copyMat); - m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); + p_this->m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); } - /*********/ p_this->submit(); } @@ -119,7 +149,7 @@ usleep(1000000); //闃诲绾跨▼锛岀瓑寰呭閮ㄨЕ鍙戝叧闂偣鎾� while (p_this->m_running) { - if(p_this->m_fFmpegDecoderJPG.getRunning()) { + if (p_this->m_fFmpegDecoderJPG.getRunning()) { usleep(300000); } else { @@ -131,11 +161,12 @@ } else { //todo 涓氬姟姝婚攣 usleep((6 - reopenTime--) * 1000000); - INFO("grabFrame faild, try reopen video: "); + INFO("grabFrame faild, try reopen video, reopenTime:" << reopenTime); //鍏抽棴ffmpeg瑙g爜妯″潡 p_this->m_fFmpegDecoderJPG.stopThd(); //鍚姩ffmpeg瑙g爜妯″潡 + DBG("m_chanPubID:"<<p_this->m_chanPubID << " m_fps:" << p_this->m_fps); p_this->m_fFmpegDecoderJPG.startThd(p_this->m_chanPubID, p_this->m_fps, p_this->m_gpuIdx); continue; } @@ -204,20 +235,6 @@ void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() { -// if ((!m_running) || (!m_waitSignal)) { -//// 鏍规嵁reopenTime鍒ゆ柇鏄惁闇�瑕侀噸鍚� -// if (reopenTime < 0) { -// stop(); -// INFO("grabFrame faild, element stopping"); -// return; -// } else { -// //todo 涓氬姟姝婚攣 -// usleep(reopenTime * 1000); -// INFO("grabFrame faild, try reopen video: "); -// startRtpStream(m_streamTransType); -// return; -// } -// } fireConnectors(); } @@ -242,7 +259,7 @@ void BASICGB28181::VideoCaptureElementWithRtp::SaveVideo(const std::string &strImageName) { - INFO("SaveVideo: " << strImageName); +// INFO("SaveVideo: " << strImageName); std::string strTimeStamp = AppUtil::getTimeUSecString(); std::string strPath = MakeDir(strTimeStamp); m_fFmpegDecoderJPG.SaveVideoByImageName(strPath, strImageName); @@ -270,3 +287,11 @@ return t_FilePath; } + +void BASICGB28181::VideoCaptureElementWithRtp::startPublishVideo() { + m_publishVideoRet = true; +} + +void BASICGB28181::VideoCaptureElementWithRtp::stopPublishVideo() { + m_publishVideoRet = false; +} -- Gitblit v1.8.0