| | |
| | | #include <basic/debug/Debug.h> |
| | | #include <opencv2/opencv.hpp> |
| | | #include <basic/timer_counter/Clocktimer.h> |
| | | #include <basic/pipe_element/ffmpeg/cap_ffmpeg_impl.hpp> |
| | | #include <thread> |
| | | #include <basic/util/app/AppPreference.hpp> |
| | | #include <QString> |
| | | #include <QDateTime> |
| | | #include "RtspAnalysManager.h" |
| | | RtspCaptureElement::RtspCaptureElement(const std::string &path, const std::string& camId,int fps, int reopenTime, int gpuIndex,RtspAnalysManager* manager): |
| | | TimerElement(10),m_path(path),m_gpuIndex(gpuIndex), |
| | | m_reopenTime(reopenTime),m_camId(camId),m_pManager(manager){ |
| | | m_cutPath= appPref.getStringData("user.loop.absolute.path"); |
| | | //#include <basic/pipe_element/ffmpeg/cap_ffmpeg_impl.hpp> |
| | | #include "../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp" |
| | | |
| | | RtspCaptureElement::RtspCaptureElement(const std::string &path, const std::string &camId, int fps, int reopenTime, |
| | | int gpuIndex, RtspAnalysManager *manager) : |
| | | TimerElement(10), m_path(path), m_gpuIndex(gpuIndex), |
| | | m_reopenTime(reopenTime), m_camId(camId), m_pManager(manager) { |
| | | m_cutPath = appPref.getStringData("user.loop.absolute.path"); |
| | | |
| | | assert(!m_cutPath.empty()); |
| | | m_capture = new CvCapture_FFMPEG(m_camId); |
| | | } |
| | | |
| | | //定时抓取图片,通过将图片放入RtspImageRedisElement的队列中,来减少视频的丢帧 |
| | | void RtspCaptureElement::timerFunc() |
| | | { |
| | | void RtspCaptureElement::timerFunc() { |
| | | |
| | | bool ret = m_capture->grabFrame(); |
| | | if (!ret) { |
| | |
| | | cv::Mat copyMat; |
| | | img.copyTo(copyMat); |
| | | std::string imageName = m_capture->GetImageName(); |
| | | m_pManager->SaveImageToRedis(m_camId,imageName,copyMat); |
| | | m_pManager->SaveImageToRedis(m_camId, imageName, copyMat); |
| | | } |
| | | fireConnectors(); |
| | | } |
| | | |
| | | std::string RtspCaptureElement::MakeDir(const std::string &timeStamp) |
| | | { |
| | | std::string RtspCaptureElement::MakeDir(const std::string &timeStamp) { |
| | | std::string t_FilePath = m_cutPath; |
| | | |
| | | if (t_FilePath.back() != '/') { |
| | |
| | | char buf[24]; |
| | | QDateTime dt = QDateTime::fromString(QString::fromStdString(timeStamp), "yyyy-MM-dd hh:mm:ss:zzz"); |
| | | |
| | | std::string t_strTime=dt.toString("yyyyMMddhh").toStdString(); |
| | | std::string t_strTime = dt.toString("yyyyMMddhh").toStdString(); |
| | | // DBG("t_strTime="<<t_strTime); |
| | | t_FilePath.append(m_camId + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/"); |
| | | t_FilePath.append(m_camId + "/" + t_strTime.substr(0, 6) + "/" + t_strTime.substr(6, 2) + "/"); |
| | | //YYYYMMDDHH |
| | | t_FilePath.append(t_strTime.substr(0,10)+ "/"); |
| | | t_FilePath.append(t_strTime.substr(0, 10) + "/"); |
| | | std::string t_cmd = "mkdir -p '"; |
| | | t_cmd.append(t_FilePath + "'"); |
| | | //#get path mkdir path |
| | |
| | | |
| | | return t_FilePath; |
| | | } |
| | | void RtspCaptureElement::SaveVideo(const std::string &strImageName) |
| | | { |
| | | INFO("SaveVideo: "<<strImageName); |
| | | std::string strTimeStamp= AppUtil::getTimeUSecString(); |
| | | std::string strPath=MakeDir(strTimeStamp); |
| | | m_capture->SaveVideoByImageName(strPath,strImageName); |
| | | |
| | | void RtspCaptureElement::SaveVideo(const std::string &strImageName) { |
| | | INFO("SaveVideo: " << strImageName); |
| | | std::string strTimeStamp = AppUtil::getTimeUSecString(); |
| | | std::string strPath = MakeDir(strTimeStamp); |
| | | m_capture->SaveVideoByImageName(strPath, strImageName); |
| | | } |
| | | |
| | | |
| | | void RtspCaptureElement::openVideo() |
| | | { |
| | | if(m_gpuIndex>=0){ |
| | | setenv("CUDA_VISIBLE_DEVICES", std::to_string(m_gpuIndex).c_str(),0); |
| | | void RtspCaptureElement::openVideo() { |
| | | if (m_gpuIndex >= 0) { |
| | | setenv("CUDA_VISIBLE_DEVICES", std::to_string(m_gpuIndex).c_str(), 0); |
| | | } |
| | | INFO("Open Video "<<m_path<<" GPU_Index: "<<m_gpuIndex); |
| | | m_capture->open(m_path.c_str(),m_gpuIndex>=0); |
| | | INFO("Open Video " << m_path << " GPU_Index: " << m_gpuIndex); |
| | | m_capture->open(m_path.c_str(), m_gpuIndex >= 0); |
| | | } |
| | | |
| | | void RtspCaptureElement::threadInitial() |
| | | { |
| | | void RtspCaptureElement::threadInitial() { |
| | | INFO("MYH DEBUG"); |
| | | openVideo(); |
| | | } |
| | | |
| | | void RtspCaptureElement::threadClosing() |
| | | { |
| | | void RtspCaptureElement::threadClosing() { |
| | | INFO("MYH DEBUG"); |
| | | m_capture->close(); |
| | | delete m_capture; |
| | | m_capture = nullptr; |
| | | } |
| | | |
| | | void RtspCaptureElement::SetVideoMinMaxSeconds(const int minSeconds, const int maxSeconds) |
| | | { |
| | | m_capture->SetMinMaxVideoSeconds(minSeconds,maxSeconds); |
| | | void RtspCaptureElement::SetVideoMinMaxSeconds(const int minSeconds, const int maxSeconds) { |
| | | m_capture->SetMinMaxVideoSeconds(minSeconds, maxSeconds); |
| | | } |
| | | |