| | |
| | | std::string brand) const { |
| | | |
| | | if (brand == "haikang") { |
| | | bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str()); |
| | | if (!ret) { |
| | | ERR("getHKDevSerialNumber ERR"); |
| | | return false; |
| | | } |
| | | // bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str()); |
| | | // if (!ret) { |
| | | // ERR("getHKDevSerialNumber ERR"); |
| | | // return false; |
| | | // } |
| | | //调用rtsp流rtsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream |
| | | port = 554;//TODO |
| | | // std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + |
| | |
| | | return false;//TODO |
| | | } else if (brand == "yushi") { |
| | | // rtsp://admin:admin@192.168.8.8:554/video1 |
| | | bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str()); |
| | | if (!ret) { |
| | | ERR("getUVDevSerialNumber ERR"); |
| | | return false; |
| | | } |
| | | // bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str()); |
| | | // if (!ret) { |
| | | // ERR("getUVDevSerialNumber ERR"); |
| | | // return false; |
| | | // } |
| | | |
| | | port = 554; |
| | | // std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + |
| | |
| | | ERR("shareMemory attach faild"); |
| | | // throw std::runtime_error("shareMemory attach faild"); |
| | | } |
| | | return feature; |
| | | |
| | | } |
| | |
| | | IceRpcServer<FaceDetectServerI> server("faceServer", appPref.getIntData("RpcFDPort"), "tcp"); |
| | | server.setMessageSizeMax(1024 * 1024 * 50); |
| | | server.setPoolInitSize(appPref.getIntData("thread.max")); |
| | | server.setPoolMaxSize(appPref.getIntData("thread.max")); |
| | | DBG("MaxPoolSize: " << std::max(appPref.getIntData("thread.max")*2, 32)); |
| | | server.setPoolMaxSize(std::max(appPref.getIntData("thread.max")*2, 32)); |
| | | server.runWaitShutDown(); |
| | | return 0; |
| | | } |
| | |
| | | IceRpcServer<FaceExtractServerI> server("faceExtractServer", appPref.getIntData("RpcFEPort"), "tcp"); |
| | | server.setMessageSizeMax(1024 * 1024 * 50); |
| | | server.setPoolInitSize(appPref.getIntData("thread.max")); |
| | | server.setPoolMaxSize(appPref.getIntData("thread.max")); |
| | | DBG("MaxPoolSize: " << std::max(appPref.getIntData("thread.max")*2, 32)); |
| | | server.setPoolMaxSize(std::max(appPref.getIntData("thread.max")*2, 32)); |
| | | server.runWaitShutDown(); |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // 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_image.empty()) { |
| | | ERR("camID:" << p_this->m_camIdx << " frameW:" << p_this->frame->width); |
| | | continue; |
| | | } |
| | | // 将i帧保存为快照 |
| | | if (p_this->m_SnapshotNotSaveRet && (p_this->pkt.flags & AV_PKT_FLAG_KEY)) { |
| | | try { |
| | |
| | | if (!m_packetsVec.empty()) { |
| | | auto iter = m_packetsVec.begin(); |
| | | while (iter->m_frameId < lastFrameId) { |
| | | INFO("DropFrame: " << iter->m_frameId); |
| | | // INFO("DropFrame: " << iter->m_frameId); |
| | | delete iter->m_packet.data; |
| | | iter = m_packetsVec.erase(iter); |
| | | } |
| | |
| | | |
| | | bool BASICGB28181::FFmpegDecoderJPG::SaveVideo(std::string path, int64_t lastFrameId) { |
| | | std::lock_guard<std::mutex> lock(g_mutex); |
| | | INFO("SaveVideo: " << path << "m_packetsVec.size : " << m_packetsVec.size()); |
| | | // INFO("SaveVideo: " << path << "m_packetsVec.size : " << m_packetsVec.size()); |
| | | if (!m_packetsVec.empty()) { |
| | | startWrite(path.c_str()); |
| | | int64_t firstKeyFramePts = m_packetsVec[0].m_packet.pts; |
| | |
| | | unsigned long int frame_index = 0; |
| | | for (const auto &item:m_packetsVec) { |
| | | if (item.m_frameId < lastFrameId) { |
| | | DBG("item.m_frameId < lastFrameId " << item.m_frameId << " " << lastFrameId); |
| | | // DBG("item.m_frameId < lastFrameId " << item.m_frameId << " " << lastFrameId); |
| | | conversion(const_cast<AVPacket *> (&item.m_packet), firstKeyFramePts, firstKeyFrameDts, video_st, |
| | | frame_index); |
| | | frame_index++; |
| | |
| | | AVPacket *pkg = static_cast<AVPacket *>(packet); |
| | | |
| | | |
| | | DBG("frame_index==%d\n" << frame_index); |
| | | // DBG("frame_index==\n" << frame_index); |
| | | //Write PTS |
| | | AVRational time_base1 = inStream->time_base; |
| | | //Duration between 2 frames (us) |
| | |
| | | p_this->videoPublishElement = new ffmpeg::VideoPublishElement(path, size_, "flv", 25, gupIdx); |
| | | p_this->videoPublishElement->start(); |
| | | } else { |
| | | DBG("videoPublishElement->setImage() : " << p_this->m_chanPubID); |
| | | // DBG("videoPublishElement->setImage() : " << p_this->m_chanPubID); |
| | | if (!p_this->m_image.empty()) { |
| | | p_this->videoPublishElement->setImage(p_this->m_image); |
| | | } else { |
| | |
| | | delete p_this->videoPublishElement; |
| | | p_this->videoPublishElement = nullptr; |
| | | }else{ |
| | | DBG("videoPublishElement null :" << p_this->m_chanPubID); |
| | | // DBG("videoPublishElement null :" << p_this->m_chanPubID); |
| | | } |
| | | } |
| | | } |
| | |
| | | cv::Mat copyMat; |
| | | std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName(); |
| | | p_this->m_image.copyTo(copyMat); |
| | | m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); |
| | | p_this->m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); |
| | | } |
| | | /*********/ |
| | | |
| | |
| | | } else { |
| | | //todo 业务死锁 |
| | | usleep((6 - reopenTime--) * 1000000); |
| | | INFO("grabFrame faild, try reopen video: "); |
| | | INFO("grabFrame faild, try reopen video, reopenTime:" << reopenTime); |
| | | |
| | | //关闭ffmpeg解码模块 |
| | | p_this->m_fFmpegDecoderJPG.stopThd(); |
| | |
| | | |
| | | void BASICGB28181::VideoCaptureElementWithRtp::SaveVideo(const std::string &strImageName) { |
| | | |
| | | INFO("SaveVideo: " << strImageName); |
| | | // INFO("SaveVideo: " << strImageName); |
| | | std::string strTimeStamp = AppUtil::getTimeUSecString(); |
| | | std::string strPath = MakeDir(strTimeStamp); |
| | | m_fFmpegDecoderJPG.SaveVideoByImageName(strPath, strImageName); |
| | |
| | | // %% 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,");//本地库不需要 |
| | |
| | | return "tableName is NULL"; |
| | | } |
| | | // 人员信息表 |
| | | //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; |
| | | //ALTER TABLE '0cd82a8b-5285-5737-ab19-8c07247c797e' ADD COLUMN monitorLevel varchar(255) DEFAULT 0; |
| | | std::string sql = "CREATE TABLE " + g_dbName + ".'"; |
| | | sql.append(tableName); |
| | | sql.append("' ( uuid varchar(255) PRIMARY KEY,"); |
| | |
| | | void FaceExtractElement::submitFaceExtract(FaceToExtract faceToExtract) { |
| | | std::lock_guard<std::mutex> lg(imageQueueMutex); |
| | | if (faceExtractQueue.size() >= VECTOR_MAX) { |
| | | ERR("FaceExtractElement::submitFaceExtract too fast, imageQueue.size()>=QUEUE_MAX") |
| | | ERR("FaceExtractElement::submitFaceExtract too fast, imageQueue.size()>=QUEUE_MAX : " << faceExtractQueue.size()) |
| | | return; |
| | | } |
| | | faceExtractQueue.push_back(faceToExtract); |
| | |
| | | { |
| | | std::lock_guard<std::mutex> lg(imageQueueMutex); |
| | | if (faceExtractQueue.empty()) { |
| | | ERR("faceExtractQueue.empty "); |
| | | // ERR("faceExtractQueue.empty "); |
| | | return; |
| | | } |
| | | faceExtractQueueTmp.swap(faceExtractQueue); |
| | |
| | | //state = num > 0 ; |
| | | state =( num !=mRealNum); |
| | | // DBG("num="<<num<< "time="<< picDate); |
| | | INFO("SDK Type: PerimeterSdk"); |
| | | // INFO("SDK Type: PerimeterSdk"); |
| | | |
| | | break; |
| | | case CrowdSdk: |
| | | state = num > m_sdkRule.nAlarmNumLowerLimit && num !=mRealNum; |
| | | INFO("SDK Type: CrowdSdk"); |
| | | // INFO("SDK Type: CrowdSdk"); |
| | | |
| | | break; |
| | | case PerHubSdk: |
| | | state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num !=mRealNum; |
| | | INFO("SDK Type: PerHubSdk"); |
| | | // INFO("SDK Type: PerHubSdk"); |
| | | |
| | | // if(m_sdkRule.nAlarmNumLowerLimit>=0) |
| | | // { |
| | |
| | | default: |
| | | break; |
| | | } |
| | | INFO("State:"<<state<<" Num:"<<num<<" mRealNum:"<<mRealNum<<" LowerLimit :"<<m_sdkRule.nAlarmNumLowerLimit<<" HightLimit: "<<m_sdkRule.nAlarmNumUpperLimit); |
| | | // INFO("State:"<<state<<" Num:"<<num<<" mRealNum:"<<mRealNum<<" LowerLimit :"<<m_sdkRule.nAlarmNumLowerLimit<<" HightLimit: "<<m_sdkRule.nAlarmNumUpperLimit); |
| | | m_triggerElement.setState(state); |
| | | m_triggerElement.triggerOnce(); |
| | | if (m_triggerElement.getTriggerState()) |
| | |
| | | std::string imgUrl = uploadImgToFdfs(image); |
| | | saveInfoToEs(imgUrl, picDate,imgKey); |
| | | } |
| | | DBG("num=" << num << " lastnum=" << mRealNum); |
| | | // DBG("num=" << num << " lastnum=" << mRealNum); |
| | | mRealNum = num; |
| | | |
| | | //todo 重置报警trigger |
| | |
| | | { |
| | | mPolygon << (QPoint(x, y)); |
| | | } |
| | | DBG("width="<<sizeW); |
| | | DBG("height="<<sizeH); |
| | | // DBG("width="<<sizeW); |
| | | // DBG("height="<<sizeH); |
| | | |
| | | |
| | | } |
| | |
| | | QJsonArray PerimeterElement::getJsonArrayFromQString(const QString &strJson) { |
| | | QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit()); |
| | | if (jsonDocument.isNull()) { |
| | | DBG("please check the string" << strJson.toStdString()); |
| | | ERR("please check the string" << strJson.toStdString()); |
| | | return QJsonArray(); |
| | | } |
| | | QJsonArray jsonArray = jsonDocument.array(); |
| | |
| | | // auto lst = m_lDBTool->searchCamDevTableAll(); |
| | | Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); |
| | | if (m_controllers.find(index) == m_controllers.end()) { |
| | | INFO("MYH DEBUG HERE"); |
| | | // INFO("MYH DEBUG HERE"); |
| | | if (m_currentCount >= m_maxCount) { |
| | | ERR("addCamera faild, camera's num is full!") |
| | | return -1; |
| | |
| | | * @return 总是0 |
| | | */ |
| | | int RtspAnalysManager::removeCamera(const std::string &index) { |
| | | INFO("MYH DEBUG HERE"); |
| | | // INFO("MYH DEBUG HERE"); |
| | | if (m_GB28181_Enable) { |
| | | if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end())return -1; |
| | | auto controller = m_controllers_videoCapElem[index]; |
| | |
| | | delete imgRedis; |
| | | m_imgRedisControllers.erase(index); |
| | | m_imgRedisCRwLock.unlock(); |
| | | INFO("MYH DEBUG HERE"); |
| | | // INFO("MYH DEBUG HERE"); |
| | | return 0; |
| | | } |
| | | |
| | |
| | | |
| | | //录取视频的RPC的接口函数 |
| | | ::std::string RtspAnalysManager::recordVideo(const ::std::string &name, const ::Ice::Current &) { |
| | | INFO("Record Video For: " << name); |
| | | // INFO("Record Video For: " << name); |
| | | ImageName_s_t nameSt = ImageName_s_t::fromString(name); |
| | | if (nameSt.Valid()) { |
| | | if (m_GB28181_Enable) { |
| | |
| | | //继承自父类,线程初始化的一些工作 |
| | | void RtspImageRedisElement::threadInitial() |
| | | { |
| | | INFO("MYH DEBUG HERE"); |
| | | // INFO("MYH DEBUG HERE"); |
| | | } |
| | | |
| | | //继承自父类,线程结束的时候调用 |
| | | void RtspImageRedisElement::threadClosing() |
| | | { |
| | | INFO("MYH DEBUG HERE"); |
| | | // INFO("MYH DEBUG HERE"); |
| | | } |
| | | |
| | | //保存图片到队列中, |
| | |
| | | m_imageQueue.push(NameImagePair_s_t(imageName,img)); |
| | | } |
| | | else{ |
| | | ERR("SaveImage Failed ImgName:"<<imageName); |
| | | // ERR("SaveImage Failed ImgName:"<<imageName); |
| | | } |
| | | return true; |
| | | } |