| | |
| | | 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) + |
| | |
| | | #include <zconf.h> |
| | | #include <opencv2/opencv.hpp> |
| | | #include "FFmpegDecoderJPG.h" |
| | | #include <cstring> |
| | | |
| | | void BASICGB28181::initFFmpeg() { |
| | | av_register_all(); |
| | |
| | | |
| | | // 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 << "frame.data.len" << strlen(p_this->frame->data[0])); |
| | | continue; |
| | | } |
| | | // else { |
| | | // static int count =0; |
| | | // count ++; |
| | | // if(count > 100){ |
| | | // ERR("camID:" << p_this->m_camIdx << " cols:" << p_this->m_image.cols <<\ |
| | | // " rows:" << p_this->m_image.rows << " channels:" << p_this->m_image.channels()); |
| | | // count = 0; |
| | | // } |
| | | // |
| | | // } |
| | | // 将i帧保存为快照 |
| | | if (p_this->m_SnapshotNotSaveRet && (p_this->pkt.flags & AV_PKT_FLAG_KEY)) { |
| | | try { |
| | |
| | | #endif |
| | | //触发上层信号 |
| | | gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK"); |
| | | // DBG("emitSigal: " << p_this->m_camIdx); |
| | | //#ifdef TestCode |
| | | // DBG("emitSigal(\"DecoderImageOK\") after"); |
| | | //#endif |
| | |
| | | m_frameIndex++; |
| | | m_packetsVec.push_back({m_frameIndex, newPacket}); |
| | | if (newPacket.flags & AV_PKT_FLAG_KEY) { |
| | | DBG("newPacket.flags & AV_PKT_FLAG_KEY "); |
| | | // DBG("newPacket.flags & AV_PKT_FLAG_KEY "); |
| | | m_last_I_FrameId = m_frameIndex; |
| | | } |
| | | } |
| | |
| | | DBG("waitSignal(\"DecoderImageOK\") begin"); |
| | | #endif |
| | | //等待信号触发 |
| | | // DBG("waitSignal before: " << p_this->m_chanPubID); |
| | | gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK"); |
| | | // DBG("waitSignal: " << p_this->m_chanPubID); |
| | | #ifdef TestCode |
| | | DBG("waitSignal(\"DecoderImageOK\") after"); |
| | | #endif |
| | | /****录像模块代码*****/ |
| | | p_this->m_picCount++; |
| | | //几张选一张放入Redis |
| | | if (p_this->m_picCount % m_nPicsPickOne != 0) { |
| | | continue; |
| | | } else { |
| | | p_this->m_picCount.store(0); |
| | | } |
| | | |
| | | |
| | | // 从ffmpeg解码类中获取图片 |
| | | p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); |
| | | /****debug*****///todo |
| | | if(p_this->m_image.empty()) { |
| | | ERR("camID:" << p_this->m_chanPubID); |
| | | continue; |
| | | } |
| | | // else { |
| | | // static int count =0; |
| | | // count ++; |
| | | // if(count > 100){ |
| | | // ERR("camID:" << p_this->m_chanPubID << " cols:" << p_this->m_image.cols <<\ |
| | | // " rows:" << p_this->m_image.rows << " channels:" << p_this->m_image.channels()); |
| | | // count = 0; |
| | | // } |
| | | // } |
| | | |
| | | { |
| | | /****录像模块代码*****/ |
| | | p_this->m_picCount++; |
| | | //几张选一张放入Redis |
| | | if (p_this->m_picCount % m_nPicsPickOne != 0) { |
| | | continue; |
| | | } else { |
| | | p_this->m_picCount.store(0); |
| | | } |
| | | 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); |
| | | } |
| | | /*********/ |
| | | |
| | | p_this->submit(); |
| | | } |
| | |
| | | p_this->m_running = false; |
| | | stop(); |
| | | INFO("grabFrame faild, element stopping"); |
| | | break; |
| | | } else { |
| | | //todo 业务死锁 |
| | | usleep((6 - reopenTime--) * 1000000); |
| | |
| | | |
| | | std::atomic<bool> m_running; |
| | | std::atomic<bool> m_waitSignal; |
| | | std::atomic<bool> m_waitSignalrunning; |
| | | std::atomic<bool> m_waitSignalrunning{false}; |
| | | |
| | | //用来保存录像视频的路径 |
| | | std::string m_cutPath; |
| | |
| | | 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); |
| | |
| | | } |
| | | |
| | | void FaceRpcElement::threadFunc() { |
| | | INFO("MYH Run Here"); |
| | | // INFO("MYH Run Here"); |
| | | // ClockTimer ct("FaceRpcElement::threadFunc"); |
| | | // { |
| | | // |
| | |
| | | CvUtil::zoomRectEqual(scoredRect.rect, 1.5, 1.5) & cv::Rect(0, 0, image.cols, image.rows)).clone()); |
| | | triggerScoredRects.push_back(trackingTrigger->getLastRect()); |
| | | } else { |
| | | INFO("No Face Find: " << getProperty("imgKey")); |
| | | INFO("Face " << getProperty("imgKey") << " quality is too low: " << scoredRect.score); |
| | | // DBG("trackingTrigger->triggerOnce(scoredRect) is false "); |
| | | } |
| | | } |
| | |
| | | // 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; |
| | | } |
| | | |
| | |
| | | //继承自父类,线程初始化的一些工作 |
| | | 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; |
| | | } |