#include "LoopRecordVideoI.h"
|
#include <basic/util/app/AppPreference.hpp>
|
#include <QtCore/QDateTime>
|
#include <uuid/uuid.h>
|
#include "jsoncpp/json/json.h"
|
|
LoopRecordVideoI::LoopRecordVideoI(int interval) : TimerElement(interval),db_c(nullptr){
|
start();
|
|
}
|
|
LoopRecordVideoI::~LoopRecordVideoI() {
|
qDeleteAll(m_mapRecorders);
|
if(db_c)
|
{
|
delete db_c;
|
db_c=nullptr;
|
}
|
}
|
|
::std::string
|
LoopRecordVideoI::addCamera(const ::std::string &index, const std::string &t_str_json, const Ice::Current &) {
|
DBG(t_str_json);
|
Json::Reader reader;
|
Json::Value value;
|
//"192.168.1.188/group1/M00/04/6C/wKgBvFuWLgeAJrdNAACdFDKB-U8853.jpg"
|
if (reader.parse(t_str_json, value)) {
|
// std::string filePathName = value["path"].asString();
|
// appPref.setStringData("user.loop.absolute.path", filePathName);
|
std::string t_rtsp = value["rtsp"].asString();
|
|
if (m_mapRecorders.find(index) == m_mapRecorders.end()) {
|
INFO("addCamera << " << index << " time " << AppUtil::getTimeSecString());
|
uuid_t t_uuid;
|
uuid_generate(t_uuid);
|
char str[36] = {0};
|
uuid_unparse(t_uuid, str);
|
if(db_c==nullptr )
|
{
|
db_c=new LDBTool;
|
}
|
LoopVideoRecorder *pRecorder = new LoopVideoRecorder(appPref.getLongData("user.interval.duration"), index,
|
t_rtsp,std::string(str),db_c);
|
//da yin luzhi wenjian ming
|
std::lock_guard<std::mutex> lock(m_map_mutex);
|
m_mapRecorders[index] = pRecorder;
|
return std::string(str);
|
} else {
|
INFO("re addCamera << " << index);
|
removeCamera(index);
|
return addCamera(index, t_str_json);
|
}
|
|
} else {
|
ERR("Json error :: " << t_str_json);
|
|
}
|
return "";
|
}
|
|
void LoopRecordVideoI::removeCamera(const ::std::string &index, const Ice::Current &) {
|
if (m_mapRecorders.find(index) != m_mapRecorders.end()) {
|
INFO("removeCamera << " << index);
|
m_mapRecorders[index]->stopTimer();
|
std::lock_guard<std::mutex> lock(m_map_mutex);
|
if (m_mapRecorders[index] != NULL) {
|
delete m_mapRecorders.value(index);
|
}
|
m_mapRecorders[index] = NULL;
|
m_mapRecorders.remove(index);
|
}
|
}
|
|
void LoopRecordVideoI::clearCamera(const Ice::Current &) {
|
auto iter = m_mapRecorders.begin();
|
while (iter != m_mapRecorders.end()) {
|
iter.value()->stopTimer();
|
delete iter.value();
|
iter.value() = NULL;
|
m_mapRecorders.remove(iter.key());
|
++iter;
|
}
|
}
|
|
void LoopRecordVideoI::feedDog(const ::std::string &index, const Ice::Current &) {
|
// INFO("feedDog");
|
std::lock_guard<std::mutex> lock(m_mutex);
|
m_mapFeedDogTime[index] = QDateTime::currentDateTime();
|
}
|
|
void LoopRecordVideoI::timerFunc() {
|
m_mutex.lock();
|
auto mapFeedDogTime = m_mapFeedDogTime;
|
m_mutex.unlock();
|
auto iter = mapFeedDogTime.begin();
|
while (iter != mapFeedDogTime.end()) {
|
qint64 current = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
qint64 feedDog = iter.value().toMSecsSinceEpoch();
|
qint64 sub = current - feedDog;
|
if (sub > 3000) {
|
removeCamera(iter.key());
|
}
|
++iter;
|
}
|
}
|