From d8cfbb5980817d904e305acee4a3d7b36d78c656 Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期五, 15 三月 2019 11:20:23 +0800 Subject: [PATCH] GB28181集成完成。录像bug暂未解决,已注释 --- QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | 84 ++++++++++++++++++++++++++---------------- 1 files changed, 52 insertions(+), 32 deletions(-) diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp index bf433a6..8a1d652 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp @@ -35,6 +35,38 @@ bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) { + std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { + p_this->m_waitSignal = true; + while (p_this->m_waitSignal) { +//#TODO wait test +#ifdef TestCode + DBG("waitSignal(\"DecoderImageOK\") begin"); +#endif + gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK"); +#ifdef TestCode + DBG("waitSignal(\"DecoderImageOK\") after"); +#endif + p_this->m_picCount++; + //鍑犲紶閫変竴寮犳斁鍏edis + if (p_this->m_picCount % m_nPicsPickOne != 0) { + continue; + } else { + p_this->m_picCount.store(0); + } + + p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); + { + 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->submit(); + } + INFO("waitSignalAndEmit is exit..."); + }, this); + waitSignalAndEmit.detach(); + TryCath( //--------------鍥芥爣璁惧鎴栧垯鍥芥爣涓嬬骇骞冲彴蹇呴』鏀寔GB28181-2016---------------------------------------------- std::thread videoCaptureElementThd([&](VideoCaptureElementWithRtp *p_this, int streamType) { @@ -69,12 +101,19 @@ p_this->m_running = true; p_this->m_fFmpegDecoderJPG.startThd(p_this->m_chanPubID, p_this->m_fps, p_this->m_gpuIdx); while (p_this->m_running) { - usleep(300000); +// if(p_this->m_fFmpegDecoderJPG.getRunning()) { + usleep(300000); +// }else{ +// p_this->m_running = false; +// break; +// } } DBG("videoCaptureElementThd stop ..."); C_RealVideoStop(lrealhandle); + p_this->m_waitSignal = false; DBG("videoCaptureElementThd stop ok..."); } else { + p_this->m_waitSignal = false; p_this->m_running = false; p_this->m_fFmpegDecoderJPG.stopThd(); ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is " << lrealhandle); @@ -124,42 +163,23 @@ } void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() { + if ((!m_running) || (!m_waitSignal)) { + if (reopenTime < 0) { + stop(); + INFO("grabFrame faild, element stopping"); + return; + } else { + usleep(reopenTime * 1000); + INFO("grabFrame faild, try reopen video: "); + startRtpStream(m_streamTransType); + return; + } + } fireConnectors(); } void BASICGB28181::VideoCaptureElementWithRtp::threadInitial() { - std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { - p_this->m_waitSignal = true; - while (p_this->m_waitSignal) { -//#TODO wait test -#ifdef TestCode - DBG("waitSignal(\"DecoderImageOK\") begin"); -#endif - gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK"); -#ifdef TestCode - DBG("waitSignal(\"DecoderImageOK\") after"); -#endif - p_this->m_picCount++; - //鍑犲紶閫変竴寮犳斁鍏edis - if (p_this->m_picCount % m_nPicsPickOne != 0) { - continue; - } else { - p_this->m_picCount.store(0); - } - - p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); - { - 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->submit(); - } - INFO("waitSignalAndEmit is exit..."); - }, this); - waitSignalAndEmit.detach(); startRtpStream(m_streamTransType); } -- Gitblit v1.8.0