From f946a62d3921e86b44ff8e2973138304b9cd53cd Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期二, 16 四月 2019 16:36:32 +0800 Subject: [PATCH] 解决修改参数和推流画面跳跃问题 --- QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | 50 +++++++++++++------------------------------------- 1 files changed, 13 insertions(+), 37 deletions(-) diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp index 40b3a8c..fb01c4d 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,13 @@ 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()) { +// DBG("videoPublishElement->setImage() : " << p_this->m_chanPubID); p_this->videoPublishElement->setImage(p_this->m_image); + p_this->videoPublishElement->submit(); } else { ERR("m_image.empty()"); } @@ -78,7 +82,7 @@ delete p_this->videoPublishElement; p_this->videoPublishElement = nullptr; }else{ - DBG("videoPublishElement null :" << p_this->m_chanPubID); +// DBG("videoPublishElement null :" << p_this->m_chanPubID); } } } @@ -92,15 +96,12 @@ 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(); 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(); } @@ -155,18 +156,19 @@ } 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: "); + usleep((6 - p_this->reopenTime--) * 1000000); + INFO("grabFrame faild, try reopen video, reopenTime:" << p_this->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; } @@ -234,32 +236,6 @@ } 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"); -// 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(); } @@ -285,7 +261,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); -- Gitblit v1.8.0