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