派生自 development/c++

pansen
2019-03-05 c8d9556e2aa8e64f956a5b516c8c80dbbc195b5d
添加GB28181模块
11个文件已修改
326 ■■■■ 已修改文件
QiaoJiaSystem/DataManagerServer/http_configserver.cpp 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/GlobalSignalWaitLock.hpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/main.cpp 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -1446,12 +1446,12 @@
                fdfsClient.rwLock.unlock();
            }
            //# http client 127.0.0.1:9999/resetFdfs
            std::string http_cmd = "http://127.0.0.1:9999/resetFdfs";
            HttpRequestWithCrul httpRequestWithCrul;
            std::string response_bak = "";
            std::string postParams_bak = "";
            httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak);
//            //# http client 127.0.0.1:9999/resetFdfs
//            std::string http_cmd = "http://127.0.0.1:9999/resetFdfs";
//            HttpRequestWithCrul httpRequestWithCrul;
//            std::string response_bak = "";
//            std::string postParams_bak = "";
//            httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak);
        }
    } else {
        return "{\"ret_status\": \"传输错误,请检查!\"}";
QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt
@@ -20,7 +20,6 @@
    ../../../../BasicPlatForm/libs/jsoncpp/lib
)
add_executable(syncDBClient
    main.cpp
QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h
@@ -13,13 +13,12 @@
#include <iostream>
#include <unistd.h>
#include <MyQueue.h>
#include <Debug.h>
#include <atomic>
#include "GlobalSignalWaitLock.hpp"
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include <list>
#include "GlobalSignalWaitLock.hpp"
#include "basic_struct_for_video_image.h"
extern "C"
QiaoJiaSystem/GB28181DecoderModel/GlobalSignalWaitLock.hpp
@@ -6,6 +6,7 @@
#define GB28181SDK_GLOBALSIGNALWAITLOCK_H
#include <iostream>
#include <Debug.h>
#include <basic/util/thread/RWLock.hpp>
//#define TryCath(CODE)     try { \
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -6,6 +6,7 @@
#include <qt5/QtCore/QDateTime>
#include <basic/util/app/AppPreference.hpp>
#include "VideoCaptureElementWithRtp.h"
#include "RtspAnalysManager.h"
//std::string BASICGB28181::VideoCaptureElementWithRtp::m_chanPubID;
//BASICGB28181::FFmpegDecoderJPG BASICGB28181::VideoCaptureElementWithRtp::m_fFmpegDecoderJPG;
@@ -154,7 +155,7 @@
                cv::Mat copyMat;
                std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName();
                p_this->m_image.copyTo(copyMat);
//                m_pManager->SaveImageToRedis(m_camId, imageName, copyMat);
                m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat);
            }
            p_this->submit();
        }
QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -8,7 +8,10 @@
#include "FFmpegDecoderJPG.h"
#include "28181SDK.h"
#include <basic/pipe/PipeElement.h>
#include "GlobalSignalWaitLock.hpp"
//#include <RtspAnalysManager.h>
//#include <VideoToImageMulth/RtspAnalysManager.h>
class RtspAnalysManager;
namespace BASICGB28181 {
@@ -17,7 +20,6 @@
        explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1);
        virtual ~VideoCaptureElementWithRtp();
        /***
         * 获取当前实时流接收数据线程运行状态
@@ -47,6 +49,7 @@
        FFmpegDecoderJPG m_fFmpegDecoderJPG;
        cv::Mat m_image;
        long m_userdata;
        RtspAnalysManager *m_pManager;
        std::atomic<bool> m_running;
        std::atomic<bool> m_waitSignal;
QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt
@@ -5,6 +5,7 @@
set(CMAKE_BUILD_TYPE debug)
add_compile_options(-fPIC)
add_definitions(-DGLOG)
add_definitions(-DGB28181)
add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
add_definitions(-Wall -Wextra)
SET(LIBS
@@ -35,9 +36,12 @@
    jsoncpp
    pthread
    hiredis
    28181sdk
    mysqlclient
    StreamParse
    )
include_directories(
    #glog
    ../../../BasicPlatForm/libs/glog/include
    ./rpc
@@ -46,11 +50,14 @@
    ../VideoServer/QiaoJia/DB
    ../VideoServer/QiaoJia/dispatchTool
    ../StructureApp/
    ../GB28181DecoderModel
    ../VideoToImageMulth
    ../../../BasicPlatForm/basic/pipe_element/ffmpeg/
    ../../../BasicPlatForm/basic/debug/
    ../../../BasicPlatForm/
    ../../../BasicPlatForm/basic/pipe/
    ../../../BasicPlatForm/libs/opencv/include
@@ -66,9 +73,11 @@
    ../../BasicPlatForm/libs/hiredis-master/include
    ../../../BasicPlatForm/basic/timer_counter/
    ../../../BasicPlatForm/libs/GB28181/include
)
link_directories(
    ../../../BasicPlatForm/libs/GB28181/libs
    #glog
    ../../../BasicPlatForm/libs/glog/lib
    ../../../BasicPlatForm/libs/openssl/lib
@@ -76,26 +85,30 @@
    ../../../BasicPlatForm/libs/ffmpeg/lib
    ../../../BasicPlatForm/libs/jsoncpp/lib
#   ../../../BasicPlatForm/libs/libuuid/lib
    #   ../../../BasicPlatForm/libs/libuuid/lib
    ../../../BasicPlatForm/libs/Ice-3.7.0/lib64
    ../../../BasicPlatForm/libs/hiredis-master/lib
)
add_executable(${PROJECT_NAME}
      ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
    ../GB28181DecoderModel/FFmpegDecoderJPG.cpp
    ../GB28181DecoderModel/GB28181Server.cpp
    ../GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
    ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
    ../../../BasicPlatForm/basic/util/BASE64/Base64.cpp
#       ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
       ../VideoServer/QiaoJia/DB/LDBTool.cpp
       ./rpc/RtspAnalysServer.cpp
        RtspCaptureElement.cpp
        RtspAnalysManager.cpp
       ../StructureApp/HiredisTool.cpp
       ../../../BasicPlatForm/basic/timer_counter/Clocktimer.h
       ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp
        ./RtspImageRedis.h
        ./RtspImageRedis.cpp
       main.cpp
    #       ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
    ../VideoServer/QiaoJia/DB/LDBTool.cpp
    ./rpc/RtspAnalysServer.cpp
    RtspCaptureElement.cpp
    RtspAnalysManager.cpp
    ../StructureApp/HiredisTool.cpp
    ../../../BasicPlatForm/basic/timer_counter/Clocktimer.h
    ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp
    ../../../BasicPlatForm/basic/util/net_config/net_config.cpp
    ./RtspImageRedis.h
    ./RtspImageRedis.cpp
    main.cpp
    )
target_link_libraries(${PROJECT_NAME}
    ${LIBS}
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -114,9 +114,9 @@
 * @return -1 添加失败,0 添加成功
 */
int RtspAnalysManager::addCamera(const std::string &index, const std::string &rtsp) {
#ifndef GB28181
    auto lst = m_lDBTool->searchCamDevTableAll();
    Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
    if (m_controllers.find(index) == m_controllers.end()) {
        INFO("MYH DEBUG HERE");
        if (m_currentCount >= m_maxCount) {
@@ -139,6 +139,38 @@
        //DBG("removeCamera " << index);
        return addCamera(index, rtsp);
    }
#else
    //#todo
    auto lst = m_lDBTool->searchCamDevTableAll();
    Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
    //#todo end
    if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end()) {
        INFO("MYH DEBUG HERE");
        if (m_currentCount >= m_maxCount) {
            ERR("addCamera faild, camera's num is full!")
            return -1;
        }
        INFO("RTSP: " << rtsp << "  INDEX:" << index);
        m_imgRedisControllers[index] = new RtspImageRedisElement(index);
        m_imgRedisControllers[index]->start();
        //VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1)
        m_controllers_videoCapElem[index] = new BASICGB28181::VideoCaptureElementWithRtp(const_cast<string &>(index),
                                                                                         25, 1, 0);
        m_controllers_videoCapElem[index]->start();
        m_controllers_videoCapElem[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration,
                                                                 lst_dev.n_cut_max_duration);
        m_currentCount++;
        return 0;
    } else {
        removeCamera(index);
        INFO("removeCamera " << index);
        //DBG("removeCamera " << index);
        return addCamera(index, rtsp);
    }
#endif
}
/**
@@ -148,6 +180,7 @@
 */
int RtspAnalysManager::removeCamera(const std::string &index) {
    INFO("MYH DEBUG HERE");
#ifndef GB28181
    if (m_controllers.find(index) == m_controllers.end())return -1;
    auto controller = m_controllers[index];
    controller->stop();
@@ -155,6 +188,16 @@
    delete controller;
    m_controllers.erase(index);
    m_currentCount--;
#else
    if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end())return -1;
    auto controller = m_controllers_videoCapElem[index];
    controller->stop();
    controller->wait();
    delete controller;
    m_controllers_videoCapElem.erase(index);
    m_currentCount--;
#endif
    auto imgRedis = m_imgRedisControllers[index];
    imgRedis->stop();
@@ -171,6 +214,7 @@
 */
int RtspAnalysManager::removeAll() {
    INFO("MYH DEBUG HERE");
#ifndef GB28181
    for (auto controller: m_controllers) {
        controller.second->stop();
    }
@@ -179,9 +223,18 @@
        delete controller.second;
    }
    m_controllers.clear();
#else
    for (auto controller: m_controllers_videoCapElem) {
        controller.second->stop();
    }
    for (auto controller: m_controllers_videoCapElem) {
        controller.second->wait();
        delete controller.second;
    }
    m_controllers_videoCapElem.clear();
#endif
    INFO("MYH DEBUG HERE");
    for (auto controller: m_imgRedisControllers) {
        controller.second->stop();
    }
@@ -189,7 +242,7 @@
        controller.second->wait();
        delete controller.second;
    }
    m_controllers.clear();
    m_imgRedisControllers.clear();
    m_currentCount = 0;
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h
@@ -9,24 +9,32 @@
#include <map>
#include "RtspCaptureElement.h"
#include "RtspImageRedis.h"
#include <VideoServer/QiaoJia/DB/LDBTool.h>
#include <VideoCaptureElementWithRtp.h>
#include <QiaoJia/DB/LDBTool.h>
#include <basic/util/app/AppPreference.hpp>
#include "RtspAnalysServer.h"
//#include <GB28181DecoderModel/VideoCaptureElementWithRtp.h>
//#include <VideoToImageMulth/rpc/RtspAnalysServer.h>
//using BASICGB28181::VideoCaptureElementWithRtp;
//用来实现recordVideo的RPC的接口类
class RtspAnalysManager :public ::RtspAnalys::RtspAnalysServer{
class RtspAnalysManager : public ::RtspAnalys::RtspAnalysServer {
public:
    RtspAnalysManager():m_maxCount(50), m_currentCount(0){
        m_lDBTool=new LDBTool;
    RtspAnalysManager() : m_maxCount(50), m_currentCount(0) {
        m_lDBTool = new LDBTool;
        init();
    }
    RtspAnalysManager(LDBTool *_dbTool);
    virtual ::std::string recordVideo(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent);
    virtual ::std::string recordVideo(const ::std::string &, const ::Ice::Current & = ::Ice::emptyCurrent);
    virtual ~RtspAnalysManager();
    int addCamera(const std::string &, const std::string& rtsp);
    int addCamera(const std::string &, const std::string &rtsp);
    int removeCamera(const std::string &);
@@ -37,7 +45,7 @@
    int getCurrentCamCount();
    // 根据camId保存img到Redis,img的Key为imageName
    bool SaveImageToRedis(const std::string& camId,const std::string& imageName,const cv::Mat& img);
    bool SaveImageToRedis(const std::string &camId, const std::string &imageName, const cv::Mat &img);
private:
    void init();
@@ -49,8 +57,11 @@
    //保存CamID和RtspCaptureElement的映射关系
    std::map<std::string, RtspCaptureElement *> m_controllers;
    //保存CamID和VideoCaptureElementWithRtp的映射关系
    std::map<std::string, BASICGB28181::VideoCaptureElementWithRtp *> m_controllers_videoCapElem;
    //保存CamID和RtspImageRedisElement的映射关系
    std::map<std::string, RtspImageRedisElement*> m_imgRedisControllers;
    std::map<std::string, RtspImageRedisElement *> m_imgRedisControllers;
    //当前摄像头的数量
    int m_currentCount;
    // 摄像头的最大数量
QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
@@ -5,62 +5,71 @@
#include <opencv2/opencv.hpp>
#include "../StructureApp/HiredisTool.h"
#include <atomic>
class RtspAnalysManager;
struct CvCapture_FFMPEG;
    /**
     * 使用ffmpeg封装的视频采集流水元素
     * 输入,rtsp地址或文件(mp4或avi)路径,输出opencv中的cv::Mat
     * 支持GPU硬解码
     * 主要完成视频帧的获取以及向CvCapture_FFMPEG传送数据
     */
    class RtspCaptureElement: public TimerElement {
    public:
        RtspCaptureElement(const std::string& path,const std::string& camId, int fps = 30, int reOpenTime = -1, int gpuIndex = -1,RtspAnalysManager* manager= nullptr);
        //保存视频接口,从RtspAnalysManager发起调用
        void SaveVideo(const std::string& strImageName);
/**
 * 使用ffmpeg封装的视频采集流水元素
 * 输入,rtsp地址或文件(mp4或avi)路径,输出opencv中的cv::Mat
 * 支持GPU硬解码
 * 主要完成视频帧的获取以及向CvCapture_FFMPEG传送数据
 */
class RtspCaptureElement : public TimerElement {
public:
    RtspCaptureElement(const std::string &path, const std::string &camId, int fps = 30, int reOpenTime = -1,
                       int gpuIndex = -1, RtspAnalysManager *manager = nullptr);
        //设置保存视频的最小和最大长度,单位是秒,实际的运行情况有一些差距,需要完善
        void SetVideoMinMaxSeconds(const int minSeconds,const int maxSeconds);
    private:
        //线程执行函数
        virtual void timerFunc() override;
        //线程的一些变量初始化,线程启动的时候调用
        virtual void threadInitial() override;
        //线程结束函数的时候调用,完成一些资源的释放
        virtual void threadClosing() override;
        //打开视频
        void openVideo();
    //保存视频接口,从RtspAnalysManager发起调用
    void SaveVideo(const std::string &strImageName);
        //根据timeStamp创建路径
        std::string MakeDir(const std::string& timeStamp);
    private:
        //用来抓取视频的Ffmpeg的封装类
        CvCapture_FFMPEG* m_capture;
        //保存视频流的路径,类似于rtsp://admin:a1234567@192.168.1.201:554/h264/ch2/main/av_stream
        std::string m_path;
    //设置保存视频的最小和最大长度,单位是秒,实际的运行情况有一些差距,需要完善
    void SetVideoMinMaxSeconds(const int minSeconds, const int maxSeconds);
        // Redis的工具类
private:
    //线程执行函数
    virtual void timerFunc() override;
    //线程的一些变量初始化,线程启动的时候调用
    virtual void threadInitial() override;
    //线程结束函数的时候调用,完成一些资源的释放
    virtual void threadClosing() override;
    //打开视频
    void openVideo();
    //根据timeStamp创建路径
    std::string MakeDir(const std::string &timeStamp);
private:
    //用来抓取视频的Ffmpeg的封装类
    CvCapture_FFMPEG *m_capture;
    //保存视频流的路径,类似于rtsp://admin:a1234567@192.168.1.201:554/h264/ch2/main/av_stream
    std::string m_path;
    // Redis的工具类
//        HiredisTool m_redisTool;
        //对保存到Redis的图片进行计数
        std::atomic<int> m_picCount{0};
        //GPU的索引
        int m_gpuIndex;
    //对保存到Redis的图片进行计数
    std::atomic<int> m_picCount{0};
    //GPU的索引
    int m_gpuIndex;
        //打开视频流失败的时候,sleep一段时间
        int m_reopenTime;
    //打开视频流失败的时候,sleep一段时间
    int m_reopenTime;
        //摄像机ID
        std::string m_camId;
    //摄像机ID
    std::string m_camId;
        //用来保存录像视频的路径
        std::string m_cutPath;
    //用来保存录像视频的路径
    std::string m_cutPath;
        //几张图丢一张,目前是8张丢一张
        const int m_nPicsPickOne = 8;
    //几张图丢一张,目前是8张丢一张
    const int m_nPicsPickOne = 8;
        RtspAnalysManager * m_pManager;
    };
    RtspAnalysManager *m_pManager;
};
#endif // VIDEOCAPTUREELEMENT_H
QiaoJiaSystem/VideoToImageMulth/main.cpp
@@ -14,7 +14,9 @@
#include <basic/util/file/FileUtil.h>
#include <basic/util/app/AppPreference.hpp>
#include <basic/util/app/AppConfig.h>
#include <basic/util/app/AppConfig.h>
#include <GB28181Server.h>
#include <basic/util/net_config/net_config.h>
static void startManager(LDBTool *_dbTool) {
    RtspAnalysManager rtspAnalysManager(_dbTool);
@@ -23,6 +25,24 @@
    }
}
std::string getLocalIp() {
    unsigned char netmask_old[15] = {0};
    unsigned char gateway_old[15] = {0};
    unsigned char ip_old[15] = {0};
    std::string net_ifname = appConfig.getStringProperty("netIfName");
    std::string str_ip;
    if (GetIpAddress(net_ifname.c_str(), ip_old)) {
        std::string ip_old_temp((char *) ip_old);
        str_ip = ip_old_temp;
    } else {
//        value["ipaddr"] = "";
        ERR("not get ip addr");
    }
    assert(!str_ip.empty());
    return std::move(str_ip);
}
int main(int argc, char **argv) {
    std::cout << __DATE__ << " " << __TIME__ << std::endl;
@@ -42,6 +62,57 @@
    appPref.setIntData("CamStep", atoi(argv[2]));
    appPref.setIntData("RpcServerPort", atoi(argv[3]));
    //#todo search from db
    MysqlDBServerCfg mysqlDBServerCfg;
    mysqlDBServerCfg.Host = getLocalIp();
    mysqlDBServerCfg.Port = 3306;
    mysqlDBServerCfg.UserName = "root";
    mysqlDBServerCfg.Passwd = "123456";
    mysqlDBServerCfg.DBName = "EGEyesForVSS";
    mysqlDBServerCfg.DBConnCount = 5;
    //#todo search from db
    GBServerCfg gbServerCfg;
    gbServerCfg.SvrIp = getLocalIp(); // 国标服务的ip地址  (本机的ip地址)
    gbServerCfg.SvrPort = 7060; // 国标服务监听的端口
    gbServerCfg.SvrPubID = "44120000002000000001"; // 国标服务器的ID
    gbServerCfg.bMD5Auth = false; // 是否需要MD5加密
    gbServerCfg.UserName = "44120100002000000002"; // 国标服务的用户名    (下级设备注册的用户名)
    gbServerCfg.Passwd = "123456"; // 国标服务的密码    (下级设备注册的密码)
    gbServerCfg.SubScribeTime = 3600; // 订阅时间  如果为0 表示不订阅
    SpinLock spinLock;
    bool running = false;
    bool serinit = false;
    auto func = [&] {
        spinLock.lock();
        GB28181Server m_gbs;
        m_gbs.setMysqlConnParam(mysqlDBServerCfg);
        m_gbs.setGBServerParam(gbServerCfg);
        DBG("initServer start before");
        running = m_gbs.initServer();
        DBG("initServer start after");
        spinLock.unlock();
        while (running) {
            usleep(4000);
        }
    };
    std::thread thd(func);
    usleep(400);
    //      ---------------------测试------------------------
    spinLock.lock();
    if (!running) {
        ERR("running is false   <<   DB init error");
        exit(0);
    }
    DBG("test start");
    appPref.setStringData("user.loop.absolute.path", appConfig.getStringProperty("cutPath"));
    IceRpcServer<RtspAnalysManager> server("RtspAnalysServer", appPref.getIntData("RpcServerPort"), "tcp");
    server.setMessageSizeMax(1024 * 1024 * 50);