From 23bd97eaa5626ad96ca3f5d3e97e93d14705ca6d Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期六, 30 三月 2019 17:50:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/yangwu1.3' into 1.3nsq --- QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h | 8 ++ QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp | 1 QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp | 4 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h | 17 +++ QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h | 3 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | 47 ++++++++++- QiaoJiaSystem/GB28181DecoderModel/GB28181Server.h | 15 +++ syncDBTool/ErlangDbTool.cpp | 1 QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h | 67 ++++++++++------ QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp | 32 +++++-- QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp | 18 ++- 11 files changed, 161 insertions(+), 52 deletions(-) diff --git a/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h b/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h index bfffec3..a1b4f9d 100644 --- a/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h +++ b/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h @@ -16,9 +16,9 @@ public: static QMutex m_mutexVisit; private: - static mysqlpp::Connection* conn; + static mysqlpp::Connection *conn; public: - static mysqlpp::SimpleResult add(std::map<std::string, std::string>& columns, string tableName) { + static mysqlpp::SimpleResult add(std::map<std::string, std::string> &columns, string tableName) { initConnection(); mysqlpp::SimpleResult simpleResult; try { @@ -32,17 +32,20 @@ } return simpleResult; } - static bool del(string tableName, std::map<std::string, std::string>& whereColumns) { + + static bool del(string tableName, std::map<std::string, std::string> &whereColumns) { initConnection(); string sql = "DELETE FROM " + tableName + " where 1=1 " + getWhereColumnNameValuePair(whereColumns); mysqlpp::Query query = conn->query(sql); bool ret = query.exec(); if (!ret) { - cout << "error " <<query.error() << endl; + cout << "error " << query.error() << endl; } return ret; } - static bool update(std::map<std::string, std::string>& columns, string tableName, std::map<std::string, std::string>& whereColumns) { + + static bool update(std::map<std::string, std::string> &columns, string tableName, + std::map<std::string, std::string> &whereColumns) { string updateSql = getUpdateSql(columns, tableName, whereColumns); initConnection(); mysqlpp::Query query = conn->query(updateSql); @@ -62,7 +65,7 @@ map<string, string> rowData; mysqlpp::Row row = *it; auto field_list = row.field_list(); - const mysqlpp::FieldNames* fieldNames = field_list.list; + const mysqlpp::FieldNames *fieldNames = field_list.list; for (int i = 0; i < fieldNames->size(); i++) { string columnValue; row[i].to_string(columnValue); @@ -77,15 +80,17 @@ return rowDataList; } - static Json::Value findJsonArray(string sql, std::map<std::string, std::string>& whereColumns) { + static Json::Value findJsonArray(string sql, std::map<std::string, std::string> &whereColumns) { sql = sql + getWhereColumnNameValuePair(whereColumns); initConnection(); +// conn->query("SET character_set_server = utf8;"); mysqlpp::Query query = conn->query(sql); + std::cout << sql << std::endl; Json::Value rowList; if (auto res = query.store()) { for (auto it = res.begin(); it != res.end(); ++it) { Json::Value row; - const mysqlpp::FieldNames* fieldNames = it->field_list().list; + const mysqlpp::FieldNames *fieldNames = it->field_list().list; for (int i = 0; i < fieldNames->size(); i++) { string columnValue; (*it)[i].to_string(columnValue); @@ -93,12 +98,15 @@ columnValue = ""; } string columnName = fieldNames[0].at(i); +// if (columnName == "Nickname") { +// columnValue = columnValue;//.substr(0, 20); +// } row[columnName] = columnValue; } rowList.append(row); } } else { - cout << "error " <<query.error() << endl; + cout << "error " << query.error() << endl; cout << "query failed" << endl; } return rowList; @@ -109,12 +117,13 @@ mysqlpp::Query query = conn->query(sql); bool ret = query.exec(); if (!ret) { - cout << "error " <<query.error() << endl; + cout << "error " << query.error() << endl; } return ret; } - static string getInsertSql(std::map<std::string, std::string>& columns, string tableName) { - string insertSql = "INSERT INTO "+tableName+" (" + + static string getInsertSql(std::map<std::string, std::string> &columns, string tableName) { + string insertSql = "INSERT INTO " + tableName + " (" + getColumnNames(columns) + " ) values ( " + getColumnValues(columns) + @@ -122,17 +131,20 @@ cout << "insertSql " << insertSql << endl; return insertSql; } - static string getUpdateSql(std::map<std::string, std::string>& columns, string tableName, std::map<std::string, std::string>& whereColumns) { - string updateSql = "update "+tableName+" set " + + static string getUpdateSql(std::map<std::string, std::string> &columns, string tableName, + std::map<std::string, std::string> &whereColumns) { + string updateSql = "update " + tableName + " set " + getColumnNameValuePair(columns) + - " where 1=1 "+ - getWhereColumnNameValuePair(whereColumns) - ; + " where 1=1 " + + getWhereColumnNameValuePair(whereColumns); cout << "updateSql " << updateSql << endl; return updateSql; } + static void doConnect() { cout << "db_host=" << appConfig.getStringProperty("db_host").c_str() << endl; + conn->set_option(new mysqlpp::SetCharsetNameOption("utf8")); if (conn->connect( appConfig.getStringProperty("database").c_str(), appConfig.getStringProperty("db_host").c_str(), @@ -148,22 +160,26 @@ // 3306 // )) { cout << "connect success" << endl; + mysqlpp::Query query = conn->query("SET NAMES UTF8-"); } else { cout << "connect failed" << endl; } } + static void initConnection() { static bool inited = false; if (!inited) { inited = true; conn = new mysqlpp::Connection(false); + doConnect(); } if (!conn->connected() || !conn->ping()) { doConnect(); } } - static string getColumnNames(std::map<std::string, std::string>& columns) { + + static string getColumnNames(std::map<std::string, std::string> &columns) { string columnNames; auto size = columns.size(); int i = 0; @@ -176,12 +192,13 @@ } return columnNames; } - static string getColumnValues(std::map<std::string, std::string>& columns) { + + static string getColumnValues(std::map<std::string, std::string> &columns) { string columnValues; auto size = columns.size(); int i = 0; for (auto column : columns) { - columnValues.append("'"+column.second+"'"); + columnValues.append("'" + column.second + "'"); if (i != columns.size() - 1) { columnValues.append(","); } @@ -189,14 +206,15 @@ } return columnValues; } - static string getColumnNameValuePair(std::map<std::string, std::string>& columns) { + + static string getColumnNameValuePair(std::map<std::string, std::string> &columns) { string columnNameValuePair; auto size = columns.size(); int i = 0; for (auto column : columns) { columnNameValuePair.append(column.first); columnNameValuePair.append("="); - columnNameValuePair.append("'"+column.second+"'"); + columnNameValuePair.append("'" + column.second + "'"); if (i != size - 1) { columnNameValuePair.append(","); @@ -205,7 +223,8 @@ } return columnNameValuePair; } - static string getWhereColumnNameValuePair(std::map<std::string, std::string>& columns) { + + static string getWhereColumnNameValuePair(std::map<std::string, std::string> &columns) { string columnNameValuePair; auto size = columns.size(); int i = 0; @@ -213,7 +232,7 @@ columnNameValuePair.append(" and "); columnNameValuePair.append(column.first); columnNameValuePair.append("="); - columnNameValuePair.append("'"+column.second+"' "); + columnNameValuePair.append("'" + column.second + "' "); i++; } diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp index 385b2e5..27a837d 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp @@ -32,7 +32,8 @@ dst.data, dst.linesize); sws_freeContext(convert_ctx); - DBG("m.size is " << m.size()); +// DBG("m.size is " << m.size()); +// LOG_IF(); return m; } @@ -44,7 +45,9 @@ } BASICGB28181::FFmpegDecoderJPG::~FFmpegDecoderJPG() { + //娓呯┖闃熷垪 while (m_rtpQueue.count_queue()) { + //#todo delete frameBuffInfo* m_rtpQueue.popNotWait(); } @@ -74,7 +77,7 @@ } #ifdef TestCode - DBG(" m_rtpQueue.push before "); + DBG(" m_rtpQueue.push befores "); #endif m_rtpQueue.push(info); #ifdef TestCode @@ -94,10 +97,11 @@ do { // DBG(" m_rtpQueue.pop before "); + //浠庣紦瀛樹腑鑾峰彇buffinfo frameBuffInfo *buffinfo = fFmpegDecoderJPG->m_rtpQueue.pop(); // DBG(" m_rtpQueue.pop after "); diff = len - buffinfo->buffLen; -// printf("bufsize is :%ld,len is :%ld, datalen:%d \n", bufsize, len, buffinfo->buffLen); + //甯ч暱澶т簬bufsize if (diff < 0) { // DBG("/甯ч暱澶т簬bufsize" << diff); @@ -128,7 +132,7 @@ delete[] buffinfo->buff; delete buffinfo; } while (diff > 0); - //#todo 瑙﹀彂淇″彿 + // DBG("emitSigal(\"read_dataOk\") begin"); // gSignalLock.emitSigal("read_dataOk"); fFmpegDecoderJPG->m_readData = true; @@ -149,12 +153,14 @@ // avformat_network_init(); p_this->ic = avformat_alloc_context(); + //鍒涘缓ffmpeg浣跨敤鐨勫唴瀛樼┖闂� p_this->iobuffer = (unsigned char *) av_malloc(p_this->m_buf_size); if (!p_this->iobuffer) { ERR("av_malloc: err======" << p_this->m_camIdx); p_this->m_running = false; continue; } +// 浣跨敤鍥炶皟鍑芥暟鍜屽唴瀛樺潡鍒涘缓 AVIOContext p_this->avio = avio_alloc_context(p_this->iobuffer, p_this->m_buf_size, 0, p_this, p_this->read_data, NULL, NULL); if (!p_this->avio) { @@ -191,6 +197,12 @@ vi = i; break; } + } + if(vi == -1)//鏃犺棰戝寘 + { + ERR("no video packet!!"); + p_this->m_running = false; + continue; } p_this->stream = p_this->ic->streams[vi]; p_this->video_st = p_this->stream; @@ -265,7 +277,7 @@ // BASICGB28181::avframe_to_cvmat(frame).copyTo(p_this->m_image); p_this->m_image = std::move(BASICGB28181::avframe_to_cvmat(p_this->frame)); - +// 灏唅甯т繚瀛樹负蹇収 if (p_this->m_SnapshotNotSaveRet && (p_this->pkt.flags & AV_PKT_FLAG_KEY)) { try { std::string strNewName = "./"; @@ -302,14 +314,15 @@ #ifdef TestCode DBG("emitSigal(\"DecoderImageOK\") begin"); #endif - //瑙﹀彂淇″彿 + //瑙﹀彂涓婂眰淇″彿 gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK"); //#ifdef TestCode // DBG("emitSigal(\"DecoderImageOK\") after"); //#endif - DBG("emitSigal(\"DecoderImageOK\") after"); - DBG("p_this->m_camIdx is " << p_this->m_camIdx << " queue size is " << p_this->m_rtpQueue.count_queue()); +// DBG("emitSigal(\"DecoderImageOK\") after"); + +// DBG("p_this->m_camIdx is " << p_this->m_camIdx << " queue size is " << p_this->m_rtpQueue.count_queue()); #ifdef TestCode { @@ -346,6 +359,7 @@ } m_camIdx = camIdx; DBG("BareFlowDecoderThd camIdx : " << camIdx); +// 鍚姩瑙g爜绾跨▼ std::thread t_BareFlowDecoder(BareFlowDecoderThd, this); t_BareFlowDecoder.detach(); ); @@ -438,7 +452,7 @@ delete iter->m_packet.data; iter = m_packetsVec.erase(iter); while (!(iter->m_packet.flags & AV_PKT_FLAG_KEY)) { - INFO("DropFrame: " << iter->m_frameId); +// INFO("DropFrame: " << iter->m_frameId); delete iter->m_packet.data; iter = m_packetsVec.erase(iter); } diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h index dcfa1d2..a7dbb3f 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h +++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h @@ -37,6 +37,7 @@ } #include <mutex> +#include <basic/pipe/TimerElement.h> namespace BASICGB28181 { @@ -48,6 +49,11 @@ static void initFFmpeg(); + /*** + * AVframe杞琧vmat + * @param frame + * @return + */ static cv::Mat avframe_to_cvmat(AVFrame *frame); typedef struct _buffInfo { @@ -56,6 +62,7 @@ std::string camIdx; } frameBuffInfo; + //************褰曞儚妯″潡浣跨敤鐨勭粨鏋勪綋********************// struct FrameIdPackage_s_t { int64_t m_frameId; AVPacket m_packet; @@ -82,6 +89,7 @@ RECORDING_VIDEO, STOP_RECORD, }; + //********************************// // std::map<std::string, MyQueue<frameBuffInfo *> > MapMyQueue; static std::mutex g_mutex; diff --git a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp index 44378a5..d10530a 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp @@ -52,6 +52,7 @@ bool iRet = C_InitSDK(&GBServerParam, &MysqlConnParam, NULL, enventcallback); DBG("iRet is " << iRet); +// 绛夊緟璁惧娉ㄥ唽 sleep(90); return iRet; diff --git a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.h b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.h index ee5e6fd..515d716 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.h +++ b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.h @@ -17,6 +17,7 @@ #include <stdlib.h> #include <time.h> #include <string.h> +#include <VideoToImageMulth/RtspAnalysManager.h> #include "28181SDK.h" #include "SpinLock.hpp" @@ -80,10 +81,20 @@ //鎵撳嵃浜嬩欢鍥炶皟淇℃伅 static void enventcallback(int eventtype, int eventparam, int datalen, char *data) { printf("eventtype:%d, eventparam:%d, datalen:%d, data:%s\n", eventtype, eventparam, datalen, data); - if (eventtype == 2) { + if (eventtype == EVENT_DEVICE_CATALOG) { // GB28181Server::bGetLoaclRes = true; - } else if (eventtype == 1 && eventparam == 1) { + } else if (eventtype == EVENT_REGISTER_STATUS && eventparam == 1) { C_GetResource(NULL); + } else if (eventtype == EVENT_VIDEO_EXCEPTION){ + if(gRtspAnalysManagerCamera) { + auto cameraHandlePtr = (RtspAnalysManager *) gRtspAnalysManagerCamera; + ERR("gRtspAnalysManagerCamera ADDR:" << gRtspAnalysManagerCamera); + string camID(data, datalen); + ERR("EVENT_VIDEO_EXCEPTION reopen camID:" << camID); + cameraHandlePtr->addCamera(camID, camID); + }else{ + ERR("gRtspAnalysManagerCamera is nullptr"); + } } } diff --git a/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp b/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp index e6e74f8..7737af6 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp +++ b/QiaoJiaSystem/GB28181DecoderModel/SpinLock.hpp @@ -6,7 +6,9 @@ #define GB28181SDK_SPINLOCK_H #include <atomic> - +/*** + * 鑷棆閿侊紝鍙兘浼氭湁娌¢攣涓婄殑bug + */ class SpinLock { public: SpinLock() : m_lock(ATOMIC_FLAG_INIT) {} diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp index 8a1d652..8859d91 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp @@ -35,17 +35,21 @@ bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) { + //绛夊緟涓嬪眰ffmpeg灏唕tp鍖呰В鐮佹垚涓哄浘鐗囧悗瑙﹀彂淇″彿,鐒跺悗瑙﹀彂褰撳墠绫荤殑submit 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 + /****褰曞儚妯″潡浠g爜*****/ p_this->m_picCount++; //鍑犲紶閫変竴寮犳斁鍏edis if (p_this->m_picCount % m_nPicsPickOne != 0) { @@ -54,6 +58,7 @@ p_this->m_picCount.store(0); } +// 浠巉fmpeg瑙g爜绫讳腑鑾峰彇鍥剧墖 p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); { cv::Mat copyMat; @@ -61,6 +66,8 @@ p_this->m_image.copyTo(copyMat); m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); } + /*********/ + p_this->submit(); } INFO("waitSignalAndEmit is exit..."); @@ -69,6 +76,7 @@ TryCath( //--------------鍥芥爣璁惧鎴栧垯鍥芥爣涓嬬骇骞冲彴蹇呴』鏀寔GB28181-2016---------------------------------------------- + //瑙g爜绾跨▼锛屽彂璧风偣鎾姹傦紝鍚姩ffmpeg瑙g爜妯″潡 std::thread videoCaptureElementThd([&](VideoCaptureElementWithRtp *p_this, int streamType) { DBG("videoCaptureElementThd start..."); StreamTransType_E etype; @@ -93,28 +101,52 @@ } DBG("C_RealVideoStart start... m_chanPubID is " << p_this->m_chanPubID << " etype is " << etype << " m_userdata is " << m_userdata); + //寮�濮嬬偣鎾棰� long lrealhandle = C_RealVideoStart(const_cast<char *>(p_this->m_chanPubID.c_str()), etype, p_this->streamcallback, m_userdata); if (lrealhandle != -1) { + //鐐规挱鎴愬姛 DBG(p_this->m_chanPubID << " C_RealVideoStart ok ... type is " << etype); p_this->m_running = true; + //鍚姩ffmpeg瑙g爜妯″潡 p_this->m_fFmpegDecoderJPG.startThd(p_this->m_chanPubID, p_this->m_fps, p_this->m_gpuIdx); + usleep(1000000); + //闃诲绾跨▼锛岀瓑寰呭閮ㄨЕ鍙戝叧闂偣鎾� while (p_this->m_running) { -// if(p_this->m_fFmpegDecoderJPG.getRunning()) { + if(p_this->m_fFmpegDecoderJPG.getRunning()) { usleep(300000); -// }else{ -// p_this->m_running = false; -// break; -// } + } else { + + // 鏍规嵁reopenTime鍒ゆ柇鏄惁闇�瑕侀噸鍚� + if (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: "); + + //鍏抽棴ffmpeg瑙g爜妯″潡 + p_this->m_fFmpegDecoderJPG.stopThd(); + //鍚姩ffmpeg瑙g爜妯″潡 + p_this->m_fFmpegDecoderJPG.startThd(p_this->m_chanPubID, p_this->m_fps, p_this->m_gpuIdx); + continue; + } + } } DBG("videoCaptureElementThd stop ..."); + //鍋滄鐐规挱 C_RealVideoStop(lrealhandle); + //灏唚aitSignalAndEmit 绾跨▼閫�鍑� p_this->m_waitSignal = false; DBG("videoCaptureElementThd stop ok..."); } else { + //鐐规挱澶辫触 p_this->m_waitSignal = false; p_this->m_running = false; + //鍏抽棴ffmpeg瑙g爜妯″潡 p_this->m_fFmpegDecoderJPG.stopThd(); ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is " << lrealhandle); } @@ -157,18 +189,21 @@ // fwrite(data, sizeof(char), datalen, fp11); } #endif - + //灏嗗簳灞傜粍濂界殑rtp鍖咃紝瀛樺叆ffmpeg涓殑缂撳瓨闃熷垪 CHKDBG(p_this->m_fFmpegDecoderJPG.pushInfo(data, datalen, p_this->m_chanPubID), true, "pushInfo is error !! handle is " << handle << " datatype is " << datatype << " frametype is " << frametype); } 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); diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h index cc6b4b9..5f98e6a 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h +++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h @@ -17,6 +17,14 @@ class VideoCaptureElementWithRtp : public basic::PipeElement { public: + /*** + * VideoCaptureElementWithRtp 瑙嗛瑙g爜 + * @param chanPubID 閫氶亾鍦�(鎽勫儚鏈篿d) + * @param fps + * @param streamTransType 璇锋眰鐨勮棰戞祦绫诲瀷 + * @param gpuIdx gpuindex + * @param manager 涓婂眰绫荤殑鎸囬拡 + */ explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1, RtspAnalysManager *manager = nullptr); @@ -28,6 +36,11 @@ */ bool getRunning(); + + /*** + * 鑾峰彇鍥剧墖 + * @return + */ cv::Mat getImage(); //淇濆瓨瑙嗛鎺ュ彛,浠嶳tspAnalysManager鍙戣捣璋冪敤 @@ -40,7 +53,7 @@ std::string MakeDir(const std::string &timeStamp); private: - int reopenTime{1000}; + int reopenTime{10}; int m_gpuIdx; int m_fps; int m_streamTransType; @@ -74,7 +87,7 @@ /*** - * rtp缁勫寘鍥炶皟鍑芥暟 + * GB28181 SDK rtp缁勫寘鍥炶皟鍑芥暟 * @param handle * @param datatype * @param frametype diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp index d786f47..9d0d2e3 100644 --- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp +++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp @@ -7,10 +7,11 @@ using std::string; +void *gRtspAnalysManagerCamera = nullptr; RtspAnalysManager::RtspAnalysManager(LDBTool *_dbTool) : m_lDBTool(nullptr), m_maxCount(50), m_currentCount(0) { - DBG("MYH DEBUG HERE"); - m_lDBTool = new LDBTool; +// INFO("MYH DEBUG HERE"); + m_lDBTool = _dbTool; init(); //nsq set callback func @@ -134,7 +135,10 @@ //鍒濆鍖栧嚱鏁� void RtspAnalysManager::init() { - INFO("MYH DEBUG HERE") +// INFO("MYH DEBUG HERE") + + gRtspAnalysManagerCamera = this; + DBG("gRtspAnalysManagerCamera ADDR:" << gRtspAnalysManagerCamera); m_GB28181_Enable = appPref.getIntData("GB28181_Enable"); //#todo GB28181 @@ -267,7 +271,7 @@ //#todo end if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end()) { - INFO("MYH DEBUG HERE"); +// INFO("MYH DEBUG HERE"); if (m_currentCount >= m_maxCount) { ERR("addCamera faild, camera's num is full!") return -1; @@ -369,7 +373,7 @@ * @return */ int RtspAnalysManager::removeAll() { - INFO("MYH DEBUG HERE"); +// INFO("MYH DEBUG HERE"); if (m_GB28181_Enable) { for (auto controller: m_controllers_videoCapElem) { @@ -390,7 +394,7 @@ } m_controllers.clear(); } - INFO("MYH DEBUG HERE"); +// INFO("MYH DEBUG HERE"); m_imgRedisCRwLock.wrlock(); for (auto controller: m_imgRedisControllers) { @@ -405,7 +409,7 @@ m_currentCount = 0; - INFO("MYH DEBUG HERE"); +// INFO("MYH DEBUG HERE"); return 0; } diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h index 94f3750..c17270a 100644 --- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h +++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h @@ -21,7 +21,8 @@ //#include <VideoToImageMulth/rpc/RtspAnalysServer.h> //using BASICGB28181::VideoCaptureElementWithRtp; - +//澶栭儴浣跨敤鐨勫叏灞�鎸囬拡 +extern void *gRtspAnalysManagerCamera; //鐢ㄦ潵瀹炵幇recordVideo鐨凴PC鐨勬帴鍙g被 class RtspAnalysManager : public ::RtspAnalys::RtspAnalysServer { diff --git a/syncDBTool/ErlangDbTool.cpp b/syncDBTool/ErlangDbTool.cpp index 85ea1bb..b3cdeea 100755 --- a/syncDBTool/ErlangDbTool.cpp +++ b/syncDBTool/ErlangDbTool.cpp @@ -13,6 +13,7 @@ #include <QtCore/QVariantList> #include <basic/util/app/AppPreference.hpp> + using ErlangTool::map_DevDataCache; using ErlangTool::map_TabDataCache; using ErlangTool::map_BwDataCache; -- Gitblit v1.8.0