//
|
// Created by ps on 18-9-26.
|
//
|
|
#ifndef RTSPANALYSMANAGER
|
#define RTSPANALYSMANAGER
|
|
#include <iostream>
|
#include <map>
|
#include "RtspCaptureElement.h"
|
#include "RtspImageRedis.h"
|
//#include "../GB28181DecoderModel/VideoCaptureElementWithRtp.h"
|
#include "pushStream/PushStreamAppPipeController.h"
|
//#include <VideoCaptureElementWithRtp.h>
|
#include <QiaoJia/DB/LDBTool.h>
|
#include <basic/util/app/AppPreference.hpp>
|
#include "RtspAnalysServer.h"
|
|
#include "NsqMsgTool.hpp"
|
//#include <GB28181DecoderModel/VideoCaptureElementWithRtp.h>
|
//#include <VideoToImageMulth/rpc/RtspAnalysServer.h>
|
|
//using BASICGB28181::VideoCaptureElementWithRtp;
|
//外部使用的全局指针
|
extern void *gRtspAnalysManagerCamera;
|
|
//用来实现recordVideo的RPC的接口类
|
class RtspAnalysManager : public ::RtspAnalys::RtspAnalysServer {
|
|
public:
|
|
RtspAnalysManager() : m_maxCount(50), m_currentCount(0) {
|
m_lDBTool = new LDBTool;
|
init();
|
IMPORT_APP_ARGS;
|
//nsq set callback func
|
DBG("NsqMsgConsumer Init");
|
DBG("argv[0]:" << argv[0]);
|
if(argv[0][0] == '.' && argv[0][1] == '/'){
|
string pName(argv[0]+2, argv[0]+strlen(argv[0]));
|
DBG("pName:" << pName);
|
nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", pName,
|
to_string(appPref.getIntData("RpcVTIMPort")));
|
}else{
|
string pName(argv[0]);
|
DBG("pName:" << pName);
|
nsqMsgConsumer = new BasicMsg::Nsq::NsqMsgConsumer("127.0.0.1", "4150", pName,
|
to_string(appPref.getIntData("RpcVTIMPort")));
|
}
|
|
nsqMsgConsumer->setMessageCallback(std::bind(&OnMsgFunc, std::placeholders::_1, this));
|
nsqMsgConsumer->init();
|
DBG("NsqMsgConsumer Init END!!");
|
}
|
|
RtspAnalysManager(LDBTool *_dbTool);
|
|
virtual ::std::string recordVideo(const ::std::string &, const ::Ice::Current & = ::Ice::emptyCurrent);
|
|
virtual ~RtspAnalysManager();
|
|
int addCamera(const std::string &, const std::string &rtsp);
|
|
int removeCamera(const std::string &);
|
|
int removeAll();
|
|
int getMaxCamCount();
|
|
int getCurrentCamCount();
|
|
// 根据camId保存img到Redis,img的Key为imageName
|
bool SaveImageToRedis(const std::string &camId, const std::string &imageName, const cv::Mat &img);
|
|
private:
|
void init();
|
|
static void OnMsgFunc(void *msgPtr, void *pThisPtr);
|
|
private:
|
|
//nsq
|
BasicMsg::Nsq::NsqMsgConsumer *nsqMsgConsumer;
|
|
RWLock m_imgRedisCRwLock;
|
|
LDBTool *m_lDBTool;
|
|
int m_GB28181_Enable;
|
|
//保存CamID和RtspCaptureElement的映射关系
|
std::map<std::string, RtspCaptureElement *> m_controllers;
|
|
//保存CamID和VideoCaptureElementWithRtp的映射关系
|
// std::map<std::string, BASICGB28181::VideoCaptureElementWithRtp *> m_controllers_videoCapElem;
|
std::map<std::string, PushStreamAppPipeController *> m_controllers_videoCapElem;
|
|
//保存CamID和RtspImageRedisElement的映射关系
|
std::map<std::string, RtspImageRedisElement *> m_imgRedisControllers;
|
//当前摄像头的数量
|
int m_currentCount;
|
// 摄像头的最大数量
|
int m_maxCount;
|
|
};
|
|
|
#endif //VIDEOANALYSFROMHC_RTSPANALYSELEMENT_H
|