QiaoJiaSystem/DataManagerServer/http_configserver.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -1272,26 +1272,35 @@ Json::Reader reader; Json::Value value_reader; std::string out; if (!reader.parse(content, value_reader)) { return "{\"ret_status\": \"传输错误,请检查!\"}"; } Json::Value value; if (value_reader.isMember("id")) { if (value_reader["id"].isNull()) return "{\"ret_status\": \"id内容有误,请检查!\"}"; value["connect_status"] = "True"; std::string rtmp_url = appConfig.getStringProperty("srsAddr"); rtmp_url.append("cam").append(value_reader["id"].asCString()); value["video_url"] = rtmp_url; out = value.toStyledString(); //TODO //调用rtsp流rtsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream } else { //TODO //调用rtsp流rtsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream // std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + "/h264/ch1/main/av_stream"; bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \ bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \ value_reader["str_username"].asString(), value_reader["str_password"].asString(), \ value_reader["str_brand"].asString()); if (!ret) { return "{\"ret_status\": \"内容有误,请检查!\"}"; } if (!ret) { return "{\"ret_status\": \"内容有误,请检查!\"}"; } std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp(); Json::Value value; value["connect_status"] = "True"; value["video_url"] = rtmp_url; std::string out = value.toStyledString(); std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp(); value["connect_status"] = "True"; value["video_url"] = rtmp_url; out = value.toStyledString(); } return out; } QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -35,6 +35,38 @@ bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) { std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { p_this->m_waitSignal = true; while (p_this->m_waitSignal) { //#TODO wait test #ifdef TestCode DBG("waitSignal(\"DecoderImageOK\") begin"); #endif gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK"); #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); } p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); { 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->submit(); } INFO("waitSignalAndEmit is exit..."); }, this); waitSignalAndEmit.detach(); TryCath( //--------------国标设备或则国标下级平台必须支持GB28181-2016---------------------------------------------- std::thread videoCaptureElementThd([&](VideoCaptureElementWithRtp *p_this, int streamType) { @@ -73,8 +105,10 @@ } DBG("videoCaptureElementThd stop ..."); C_RealVideoStop(lrealhandle); p_this->m_waitSignal = false; DBG("videoCaptureElementThd stop ok..."); } else { p_this->m_waitSignal = false; p_this->m_running = false; p_this->m_fFmpegDecoderJPG.stopThd(); ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is " << lrealhandle); @@ -124,42 +158,23 @@ } void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() { if ((!m_running) || (!m_waitSignal)) { if (reopenTime < 0) { stop(); INFO("grabFrame faild, element stopping"); return; } else { usleep(reopenTime * 1000); INFO("grabFrame faild, try reopen video: "); startRtpStream(m_streamTransType); return; } } fireConnectors(); } void BASICGB28181::VideoCaptureElementWithRtp::threadInitial() { std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { p_this->m_waitSignal = true; while (p_this->m_waitSignal) { //#TODO wait test #ifdef TestCode DBG("waitSignal(\"DecoderImageOK\") begin"); #endif gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK"); #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); } p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image); { 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->submit(); } INFO("waitSignalAndEmit is exit..."); }, this); waitSignalAndEmit.detach(); startRtpStream(m_streamTransType); } QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -40,6 +40,7 @@ std::string MakeDir(const std::string &timeStamp); private: int reopenTime{1000}; int m_gpuIdx; int m_fps; int m_streamTransType; QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -117,7 +117,8 @@ } else { auto lst = m_lDBTool->searchCamDevTableAll(); auto lst = m_lDBTool->searchCamDevTableByType(0); // auto lst = m_lDBTool->searchCamDevTableAll(); appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration);