pansen
2019-03-05 c8d9556e2aa8e64f956a5b516c8c80dbbc195b5d
添加GB28181模块
11个文件已修改
200 ■■■■■ 已修改文件
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 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h 11 ●●●●● 补丁 | 查看 | 原始文档 | 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
@@ -83,6 +92,9 @@
)
add_executable(${PROJECT_NAME}
    ../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
@@ -93,6 +105,7 @@
       ../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
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,9 +9,14 @@
#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{
@@ -22,8 +27,11 @@
        m_lDBTool=new LDBTool;
        init();
    }
    RtspAnalysManager(LDBTool *_dbTool);
    virtual ::std::string recordVideo(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent);
    virtual ~RtspAnalysManager();
    int addCamera(const std::string &, const std::string& rtsp);
@@ -49,6 +57,9 @@
    //保存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;
    //当前摄像头的数量
QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h
@@ -5,7 +5,9 @@
#include <opencv2/opencv.hpp>
#include "../StructureApp/HiredisTool.h"
#include <atomic>
class RtspAnalysManager;
struct CvCapture_FFMPEG;
    /**
@@ -16,24 +18,31 @@
     */
    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);
    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);
        //设置保存视频的最小和最大长度,单位是秒,实际的运行情况有一些差距,需要完善
        void SetVideoMinMaxSeconds(const int minSeconds,const int maxSeconds);
    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;
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);