From 049e00dc49439d82f72d5f7c1b6cae6b9023686e Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期二, 16 四月 2019 18:34:37 +0800
Subject: [PATCH] 解决修改参数和推流画面跳跃问题
---
QiaoJiaSystem/DataManagerServer/demo.cpp | 4
QiaoJiaSystem/VptServer/VptDetectWrapper.cpp | 2
QiaoJiaSystem/DataManagerServer/http_configserver.cpp | 2
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp | 20 ++++++
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | 6 +-
QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h | 33 +++++++++++
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp | 2
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp | 12 ++--
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp | 15 ++++
QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp | 56 ++++++++++++------
10 files changed, 117 insertions(+), 35 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/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
index 4c462e4..5761756 100644
--- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -262,6 +262,8 @@
VssDomainUnitTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
VssLocalSettingTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
CamDevController::instance()->registerHttpServices(_HttpSrvRetRecieve);
+ //todo
+ CamDevController::instance()->nsqMsgProducerSet(nsqMsgProducer);
VssUpperSvrTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
diff --git a/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h b/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
index 22aa644..2656b88 100755
--- a/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
+++ b/QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
@@ -8,6 +8,7 @@
#include "vss/model/CamDev.h"
#include "VssBaseController.h"
#include <mysql++.h>
+#include <NsqMsgTool.hpp>
using namespace std;
@@ -24,6 +25,14 @@
static CamDevController *instance() {
static CamDevController instance;
return &instance;
+ }
+
+private:
+ //shared_ptr
+ BasicMsg::Nsq::NsqMsgProducer *_nsqMsgProducer;
+public:
+ void nsqMsgProducerSet(BasicMsg::Nsq::NsqMsgProducer *nsqMsgProducer){
+ _nsqMsgProducer = nsqMsgProducer;
}
public:
@@ -163,6 +172,18 @@
}
}
+
+ {
+ std::string topic = "VideoToImageMulth";
+ std::string topic1 = "VideoAnalysFromHC";
+ Json::Value json_cfg;
+ json_cfg["cam_del"] = content;
+ std::string msg = json_cfg.toStyledString();
+ DBG("msg:" << msg);
+ _nsqMsgProducer->Publish(topic, (void *) (&msg));
+ _nsqMsgProducer->Publish(topic1, (void *) (&msg));
+ }
+
return responseJsonValue.toStyledString();
}
@@ -245,6 +266,18 @@
idJsonValue.asString());
}
}
+
+ {
+ std::string topic = "VideoToImageMulth";
+ std::string topic1 = "VideoAnalysFromHC";
+ Json::Value json_cfg;
+ json_cfg["cam_edit"] = content;
+ std::string msg = json_cfg.toStyledString();
+ DBG("msg:" << msg);
+ _nsqMsgProducer->Publish(topic, (void *) (&msg));
+ _nsqMsgProducer->Publish(topic1, (void *) (&msg));
+ }
+
return responseJsonValue.toStyledString();
}
diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
index 299ec03..7787821 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -373,7 +373,7 @@
bool BASICGB28181::FFmpegDecoderJPG::stopThd() {
TryCath(
- DBG(m_camIdx << " FFmpegDecoderJPG stopThd ... " << m_camIdx);
+ DBG("FFmpegDecoderJPG stopThd ... " << m_camIdx);
m_running = false;
);
return true;
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
index 9712880..cedc675 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -154,14 +154,14 @@
} 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, reopenTime:" << reopenTime);
+ usleep((6 - p_this->reopenTime--) * 1000000);
+ INFO("grabFrame faild, try reopen video, reopenTime:" << p_this->reopenTime);
//鍏抽棴ffmpeg瑙g爜妯″潡
p_this->m_fFmpegDecoderJPG.stopThd();
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
index f965ded..4a49548 100644
--- a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -61,12 +61,12 @@
}
void FaceExtractElement::timerFunc() {
- INFO("MYH Run Here");
+// INFO("MYH Run Here");
std::vector<FaceToExtract> faceExtractQueueTmp;
{
std::lock_guard<std::mutex> lg(imageQueueMutex);
if (faceExtractQueue.empty()) {
- ERR("faceExtractQueue.empty ");
+// ERR("faceExtractQueue.empty ");
return;
}
faceExtractQueueTmp.swap(faceExtractQueue);
@@ -78,7 +78,7 @@
float t_com_sc = m_sdkRule.nThreshold == 0 ? 75 : m_sdkRule.nThreshold;
- DBG(" TESTCODE getValue" << t_camIdex << " " << t_com_sc << " " << t_com_sc / 100);
+// DBG(" TESTCODE getValue" << t_camIdex << " " << t_com_sc << " " << t_com_sc / 100);
t_com_sc = t_com_sc / 100;
@@ -108,7 +108,7 @@
unsigned long size = faceExtractQueueTmp[i].facesPos.size();
for (int j = 0; j < size; j++) {
- auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
+ auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
sharedMemory->key().toStdString());
// {
// //#todo
@@ -118,7 +118,7 @@
// cv::imwrite(string1, image);
// }
if (feature.empty()) {
- INFO("No Face Find: " << getProperty("imgKey"));
+// INFO("No Face Find: " << getProperty("imgKey"));
continue;
}
features.clear();
@@ -131,7 +131,7 @@
std::string strImgUrlTmp = "";
fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
// strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
- DBG("strImgUrlTmp=" << strImgUrlTmp);
+// DBG("strImgUrlTmp=" << strImgUrlTmp);
strImgUrl.clear();
strImgUrl = strImgUrlTmp;
// strImgUrl.append("/").append(strImgUrlTmp);
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
index c54cf32..9900ab5 100644
--- a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
+++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -102,7 +102,17 @@
//#todo 浣跨敤绛栫暐妯″紡?鍙戦�佺澶氫釜鎸囦护绱Н鍚庡彂閫�?
if (itor_json->isString() && reader.parse(itor_json->asString(), cfg_val)) {
if (itor_json.name() == "cam_edit" || itor_json.name() == "editSdkRule") {
- string cam_idx = cfg_val["str_cam_dev_id"].asString();
+ string cam_idx = "";
+ if(itor_json.name() == "cam_edit"){
+ if (pthis->m_GB28181_Enable){
+ cam_idx = cfg_val["equipCode"].asString();
+ }else{
+ cam_idx = cfg_val["str_cam_dev_id"].asString();
+ }
+ } else {
+ cam_idx = cfg_val["strCamId"].asString();
+ }
+
if (pthis->controllers.find(cam_idx) != pthis->controllers.end()) {
if (pthis->m_GB28181_Enable) {
auto lst = pthis->m_lDBTool->searchCamDevTableByType(1);
@@ -126,7 +136,13 @@
}
}
} else if (itor_json.name() == "cam_del") {
- string cam_idx = cfg_val["str_cam_dev_id"].asString();
+// string cam_idx = cfg_val["str_cam_dev_id"].asString();
+ string cam_idx = "";
+ if(cfg_val["equipCode"].asString().size()){
+ cam_idx = cfg_val["equipCode"].asString();
+ }else if(cfg_val["str_cam_dev_id"].asString().size()){
+ cam_idx = cfg_val["str_cam_dev_id"].asString();
+ }
pthis->removeCamera(cam_idx);
}
} else {
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
index fa3087a..295ad0b 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -90,7 +90,13 @@
}
}
} else if (itor_json.name() == "cam_edit") {
- string cam_idx = cfg_val["str_cam_dev_id"].asString();
+ string cam_idx = "";
+ if(pthis->m_GB28181_Enable){
+ cam_idx = cfg_val["equipCode"].asString();
+ }else{
+ cam_idx = cfg_val["str_cam_dev_id"].asString();
+ }
+
if (pthis->m_GB28181_Enable) {
if (pthis->m_controllers_videoCapElem.find(cam_idx) !=
pthis->m_controllers_videoCapElem.end()) {
@@ -108,7 +114,12 @@
}
}
} else if (itor_json.name() == "cam_del") {
- string cam_idx = cfg_val["str_cam_dev_id"].asString();
+ string cam_idx = "";
+ if(pthis->m_GB28181_Enable){
+ cam_idx = cfg_val["equipCode"].asString();
+ }else{
+ cam_idx = cfg_val["str_cam_dev_id"].asString();
+ }
pthis->removeCamera(cam_idx);
} else if (itor_json.name() == "cam_startPublish") {
string cam_idx = cfg_val["id"].asString();
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
index 374529b..38fcecb 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
@@ -39,39 +39,57 @@
}
}
- 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");
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/VptServer/VptDetectWrapper.cpp b/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
index 04e886c..f49d7cf 100644
--- a/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
+++ b/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
@@ -64,6 +64,8 @@
if (colorIndex < 0 || colorIndex >= 9)continue;
if(colorIndex==4) DBG("detect a car, score =" << result.info[i].obj_score);
+ if(colorIndex==1) DBG("detect a bike, score =" << result.info[i].obj_score);
+ if(colorIndex==2) DBG("detect a moto, score =" << result.info[i].obj_score);
// sprintf(str_i, "%s:%.2f", type[colorIndex].c_str(), result.info[i].obj_score);
// rectangle(process_image,
--
Gitblit v1.8.0