chenshijun
2019-04-16 049e00dc49439d82f72d5f7c1b6cae6b9023686e
解决修改参数和推流画面跳跃问题
10个文件已修改
152 ■■■■ 已修改文件
QiaoJiaSystem/DataManagerServer/demo.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/http_configserver.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VptServer/VptDetectWrapper.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/demo.cpp
@@ -14,8 +14,8 @@
    std::string publish_basepath = "rtmp://localhost:1934/live/cam" + std::to_string(554);
    appPref.setIntData("gpu.index", 0);
    appPref.setStringData("publish.basepath", publish_basepath);
    appPref.setIntData("pulish.width", 640);
    appPref.setIntData("pulish.height", 360);
//    appPref.setIntData("pulish.width", 640);
//    appPref.setIntData("pulish.height", 360);
    AppPipeController a(0, json);
    a.start();
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -262,6 +262,8 @@
    VssDomainUnitTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
    VssLocalSettingTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
    CamDevController::instance()->registerHttpServices(_HttpSrvRetRecieve);
    //todo
    CamDevController::instance()->nsqMsgProducerSet(nsqMsgProducer);
    VssUpperSvrTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
QiaoJiaSystem/DataManagerServer/vss/controller/CamDevController.h
@@ -8,6 +8,7 @@
#include "vss/model/CamDev.h"
#include "VssBaseController.h"
#include <mysql++.h>
#include <NsqMsgTool.hpp>
using namespace std;
@@ -24,6 +25,14 @@
    static CamDevController *instance() {
        static CamDevController instance;
        return &instance;
    }
private:
    //shared_ptr
    BasicMsg::Nsq::NsqMsgProducer  *_nsqMsgProducer;
public:
    void nsqMsgProducerSet(BasicMsg::Nsq::NsqMsgProducer *nsqMsgProducer){
        _nsqMsgProducer = nsqMsgProducer;
    }
public:
@@ -163,6 +172,18 @@
            }
        }
        {
            std::string topic = "VideoToImageMulth";
            std::string topic1 = "VideoAnalysFromHC";
            Json::Value json_cfg;
            json_cfg["cam_del"] = content;
            std::string msg = json_cfg.toStyledString();
            DBG("msg:" << msg);
            _nsqMsgProducer->Publish(topic, (void *) (&msg));
            _nsqMsgProducer->Publish(topic1, (void *) (&msg));
        }
        return responseJsonValue.toStyledString();
    }
@@ -245,6 +266,18 @@
                                                                              idJsonValue.asString());
            }
        }
        {
            std::string topic = "VideoToImageMulth";
            std::string topic1 = "VideoAnalysFromHC";
            Json::Value json_cfg;
            json_cfg["cam_edit"] = content;
            std::string msg = json_cfg.toStyledString();
            DBG("msg:" << msg);
            _nsqMsgProducer->Publish(topic, (void *) (&msg));
            _nsqMsgProducer->Publish(topic1, (void *) (&msg));
        }
        return responseJsonValue.toStyledString();
    }
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -373,7 +373,7 @@
bool BASICGB28181::FFmpegDecoderJPG::stopThd() {
    TryCath(
        DBG(m_camIdx << "  FFmpegDecoderJPG stopThd ... " << m_camIdx);
        DBG("FFmpegDecoderJPG stopThd ... " << m_camIdx);
        m_running = false;
    );
    return true;
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -154,14 +154,14 @@
                    } else {
                        // 根据reopenTime判断是否需要重启
                        if (reopenTime < 0) {
                        if (p_this->reopenTime < 0) {
                            p_this->m_running = false;
                            stop();
                            INFO("grabFrame faild, element stopping");
                        } else {
                            //todo 业务死锁
                            usleep((6 - reopenTime--) * 1000000);
                            INFO("grabFrame faild, try reopen video, reopenTime:" << reopenTime);
                            usleep((6 - p_this->reopenTime--) * 1000000);
                            INFO("grabFrame faild, try reopen video, reopenTime:" << p_this->reopenTime);
                            //关闭ffmpeg解码模块
                            p_this->m_fFmpegDecoderJPG.stopThd();
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -61,12 +61,12 @@
}
void FaceExtractElement::timerFunc() {
    INFO("MYH Run Here");
//    INFO("MYH Run Here");
    std::vector<FaceToExtract> faceExtractQueueTmp;
    {
        std::lock_guard<std::mutex> lg(imageQueueMutex);
        if (faceExtractQueue.empty()) {
            ERR("faceExtractQueue.empty ");
//            ERR("faceExtractQueue.empty ");
            return;
        }
        faceExtractQueueTmp.swap(faceExtractQueue);
@@ -78,7 +78,7 @@
        float t_com_sc = m_sdkRule.nThreshold == 0 ? 75 : m_sdkRule.nThreshold;
        DBG(" TESTCODE getValue" << t_camIdex << "  " << t_com_sc << "  " << t_com_sc / 100);
//        DBG(" TESTCODE getValue" << t_camIdex << "  " << t_com_sc << "  " << t_com_sc / 100);
        t_com_sc = t_com_sc / 100;
@@ -108,7 +108,7 @@
            unsigned long size = faceExtractQueueTmp[i].facesPos.size();
            for (int j = 0; j < size; j++) {
                auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
                auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
                                                          sharedMemory->key().toStdString());
//                {
//                    //#todo
@@ -118,7 +118,7 @@
//                    cv::imwrite(string1, image);
//                }
                if (feature.empty()) {
                    INFO("No Face Find: " << getProperty("imgKey"));
//                    INFO("No Face Find: " << getProperty("imgKey"));
                    continue;
                }
                features.clear();
@@ -131,7 +131,7 @@
                    std::string strImgUrlTmp = "";
                    fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
                    //  strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
                    DBG("strImgUrlTmp=" << strImgUrlTmp);
//                    DBG("strImgUrlTmp=" << strImgUrlTmp);
                    strImgUrl.clear();
                    strImgUrl = strImgUrlTmp;
//                    strImgUrl.append("/").append(strImgUrlTmp);
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -102,7 +102,17 @@
            //#todo 使用策略模式?发送端多个指令累积后发送?
            if (itor_json->isString() && reader.parse(itor_json->asString(), cfg_val)) {
                if (itor_json.name() == "cam_edit" || itor_json.name() == "editSdkRule") {
                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
                    string cam_idx = "";
                    if(itor_json.name() == "cam_edit"){
                        if (pthis->m_GB28181_Enable){
                            cam_idx = cfg_val["equipCode"].asString();
                        }else{
                            cam_idx = cfg_val["str_cam_dev_id"].asString();
                        }
                    } else {
                        cam_idx = cfg_val["strCamId"].asString();
                    }
                    if (pthis->controllers.find(cam_idx) != pthis->controllers.end()) {
                        if (pthis->m_GB28181_Enable) {
                            auto lst = pthis->m_lDBTool->searchCamDevTableByType(1);
@@ -126,7 +136,13 @@
                        }
                    }
                } else if (itor_json.name() == "cam_del") {
                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
//                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
                    string cam_idx = "";
                    if(cfg_val["equipCode"].asString().size()){
                        cam_idx = cfg_val["equipCode"].asString();
                    }else if(cfg_val["str_cam_dev_id"].asString().size()){
                        cam_idx = cfg_val["str_cam_dev_id"].asString();
                    }
                    pthis->removeCamera(cam_idx);
                }
            } else {
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -90,7 +90,13 @@
                        }
                    }
                } else if (itor_json.name() == "cam_edit") {
                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
                    string cam_idx = "";
                    if(pthis->m_GB28181_Enable){
                        cam_idx = cfg_val["equipCode"].asString();
                    }else{
                        cam_idx = cfg_val["str_cam_dev_id"].asString();
                    }
                    if (pthis->m_GB28181_Enable) {
                        if (pthis->m_controllers_videoCapElem.find(cam_idx) !=
                            pthis->m_controllers_videoCapElem.end()) {
@@ -108,7 +114,12 @@
                        }
                    }
                } else if (itor_json.name() == "cam_del") {
                    string cam_idx = cfg_val["str_cam_dev_id"].asString();
                    string cam_idx = "";
                    if(pthis->m_GB28181_Enable){
                        cam_idx = cfg_val["equipCode"].asString();
                    }else{
                        cam_idx = cfg_val["str_cam_dev_id"].asString();
                    }
                    pthis->removeCamera(cam_idx);
                } else if (itor_json.name() == "cam_startPublish") {
                    string cam_idx = cfg_val["id"].asString();
QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp
@@ -39,39 +39,57 @@
        }
    }
    m_picCount++;
    //几张选一张放入Redis
    if (m_picCount % m_nPicsPickOne != 0) {
        return;
    } else {
        m_picCount.store(0);
    }
    u_char *data;
    int width = 0, height = 0, step = 0, cn = 0;
    cv::Mat copyMat;
    {
        u_char *data;
        int width = 0, height = 0, step = 0, cn = 0;
        m_capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
        cv::Mat img(height, width, CV_8UC3, data, step);
        cv::Mat copyMat;
        img.copyTo(copyMat);
        std::string imageName = m_capture->GetImageName();
        m_pManager->SaveImageToRedis(m_camId, imageName, copyMat);
    }
    //#todo publish Video
    //#publish Video
    if (m_publishVideoRet) {
        if (videoPublishElement == nullptr) {
            string path = appConfig.getStringProperty("srsAddr") + "cam" + m_camId + ".flv";
            cv::Size size_(appConfig.getIntProperty("pulish.width"), appConfig.getIntProperty("pulish.height"));
            int gupIdx = appPref.getIntData("gpu.index");
            videoPublishElement = new ffmpeg::VideoPublishElement(path, size_, "flv", 25, gupIdx);
            videoPublishElement->start();
        } else {
//            DBG("videoPublishElement->setImage()");
            m_capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
            cv::Mat img(height, width, CV_8UC3, data, step);
            img.copyTo(copyMat);
            if (!copyMat.empty()) {
                videoPublishElement->setImage(copyMat);
            } else {
                DBG("copyMat.empty()");
            }
        }
    } else {
        if (videoPublishElement != nullptr) {
            DBG("videoPublishElement->stop()");
            videoPublishElement->stop();
            videoPublishElement->wait();
            delete videoPublishElement;
            videoPublishElement = nullptr;
        }
    }
    //几张选一张放入Redis
    m_picCount++;
    if (m_picCount % m_nPicsPickOne != 0) {
//        return;
    } else {
        m_picCount.store(0);
        if (copyMat.empty()) {
//        ERR("copyMat.empty()");
            m_capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
            cv::Mat img(height, width, CV_8UC3, data, step);
            img.copyTo(copyMat);
        }
        std::string imageName = m_capture->GetImageName();
        m_pManager->SaveImageToRedis(m_camId, imageName, copyMat);
    }
    fireConnectors();
}
QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
@@ -64,6 +64,8 @@
        if (colorIndex < 0 || colorIndex >= 9)continue;
        if(colorIndex==4) DBG("detect a car, score =" << result.info[i].obj_score);
        if(colorIndex==1) DBG("detect a bike, score =" << result.info[i].obj_score);
        if(colorIndex==2) DBG("detect a moto, score =" << result.info[i].obj_score);
//        sprintf(str_i, "%s:%.2f", type[colorIndex].c_str(), result.info[i].obj_score);
//        rectangle(process_image,