视频监控汇聚平台:通过SDK接入大华DSS视频监控平台的源代码解释和分享

news2024/12/26 11:38:15

目录

一、视频监控汇聚平台

1、概述

2、视频接入能力

3、视频汇聚能力

二、大华DSS平台

1、DSS平台概述

2、大华DSS平台的主要特点

(1)高可用性

(2)高可靠性

(3)易维护性

(4)灵活的扩展性

(5)智能分析功能

(6)完善的权限管理

(7)丰富的场景应用

三、代码和解释

1、代码和注释

2、函数功能说明

(1)引入的头文件

(2)自定义结构体

(3)类定义

(4)成员方法

(5)成员变量

四、效果展示


一、视频监控汇聚平台

1、概述

        视频监控接入汇聚平台是集成了视频资源接入、汇聚、存储、处理、分析、运维等多种功能的综合性平台,旨在实现不同品牌、不同协议、不同型号的视频监控资源的统一接入、汇聚、存储、管理和应用。

        接入汇聚平台支持多种接入协议,如GB/T28181、RTSP、ONVIF、RTMP等通用协议以及一些特定的协议,实现视频资源的集中管理和融合应用,同时能够提供API接口供应用系统进行调用。 

2、视频接入能力

        平台能够实现接入不同品牌的视频监控平台、视频相关设备、外围设备等等;包括海康威视、浙江大华、苏州科达、杭州宇视、Panasonic和axis等。

        支持国际和国内的一些标准对接协议,包括sdk协议、GB/T28181协议、ehome/ISUP协议、主动注册协议等等。可以通过各种协议,接入IPC、DVR、DVS、NVR等设备,以及一些大型的视频监控平台,包括海康威视、浙江大华、苏州科达、杭州宇视等主流品牌的监控平台,对于有些特有品牌的平台,也能够通过SDK接口、私有协议等方式接入进入本系统平台(国外品牌包括:Panasonic和axis等);

3、视频汇聚能力

        平台通过流媒体传输协议接入各种视频源设备,能够同时接入大量的视频终端设备;将分散的各类视频资源进行统一汇聚、整合和集中管理。

        通过分布式架构和流媒体传输技术,平台可以轻松应对成千上万路视频流的接入需求;这种能力使得平台能够应对大规模的视频监控需求,实现视频监控资源的全面覆盖和高效利用。

        汇聚能力体现在多种方式、大规模设备接入、视频流整合与管理、灵活的播放与分发、高并发访问与负载均衡以及丰富的管理功能等多个方面。这些能力共同构成了视频监控汇聚平台的核心竞争力,为用户提供了高效、智能、便捷的视频监控解决方案。

二、大华DSS平台

1、DSS平台概述

        大华DSS(Disaster Recovery Switching)平台是大华股份推出的一款智能视频监控平台,它专注于为用户提供高效、稳定的视频监控服务,具备高可用性、高可靠性、易维护性等特点。该平台采用了先进的视频编码技术、网络技术和大华独有的视频存储技术,可广泛应用于公安、交通、金融、教育等各类监控场景。

2、大华DSS平台的主要特点

(1)高可用性

        通过支持热插拔硬盘、模块化设计等手段,确保了系统的高可用性。即使在硬件故障的情况下,也能实现快速切换,保证视频监控业务的连续性。

(2)高可靠性

        采用冗余设计,确保了关键组件的双备份,如电源、网络、存储等,有效降低了系统故障的风险。

(3)易维护性

        通过图形化界面、智能化诊断等功能,简化了系统运维工作,降低了运维成本。

        强大的视频处理能力:支持大规模视频接入、存储、转发和分发,可满足各类监控场景的需求。

(4)灵活的扩展性

        支持多种接口类型,如USB、HDMI、VGA等,方便用户实现多种设备的接入和扩展。

(5)智能分析功能

        支持实时视频分析,如人脸识别、车辆抓拍等,为用户提供更加智能化的监控体验。

(6)完善的权限管理

        支持多级用户权限管理,确保了系统数据的安全性。

(7)丰富的场景应用

        凭借高性能和大华成熟的解决方案,大华DSS平台可广泛应用于各类监控场景,如平安城市、智慧交通、金融安防等。

三、代码和解释

        以下部分C++代码是大华DSS视频监控平台接入到AS-V1000视频监控汇聚平台的SDK代码的头文件,列出了相关的函数,具体如下:

1、代码和注释

        以下是为代码和注释:

#include <string>         // 引入标准字符串库
#include "NetSdkApp.h"    // 引入大华网络SDK的基础应用类头文件
#include "InstructConvert.h" // 引入指令转换头文件,可能用于数据格式转换
using namespace std;      // 使用std命名空间,避免每次使用标准库元素时前缀std::

// 定义DaHuaDssChanInfo结构体,用于存储大华DSS平台的通道信息
struct DaHuaDssChanInfo {
    string ChannelId;     // 通道ID
    string name;          // 通道名称
    string desc;          // 通道描述
    int status;           // 通道状态
    int channelType;      // 通道类型
    string channelSN;     // 通道序列号
    string rights;        // 访问权限
    int cameraType;       // 摄像头类型
    string CtrlId;        // 控制ID
    double latitude;      // 经度
    double longitude;     // 纬度
    string viewDomain;    // 视域
    string cameraFunctions;// 摄像头功能
    string multicastIp;   // 多播IP地址
    int multicastPort;    // 多播端口号
    string NvrChnlIp;     // NVR通道IP地址
    int channelRemoteType;// 通道类型
    string subMulticastIp;// 多播IP地址
    int subMulticastPort; // 多播端口号

    // 构造函数,初始化所有成员变量为默认值
    DaHuaDssChanInfo() {
        ChannelId = "";
        name = "";
        desc = "";
        status = 0;
        channelType = 0;
        channelSN = "";
        rights = "";
        cameraType = 0;
        CtrlId = "";
        latitude = 0.0;
        longitude = 0.0;
        viewDomain = "";
        cameraFunctions = "";
        multicastIp = "";
        multicastPort = 0;
        NvrChnlIp = "";
        channelRemoteType = 0;
        subMulticastIp = "";
        subMulticastPort = 0;
    }
};

// 定义DaHuaDssGpsStatus结构体,用于存储大华DSS平台的GPS状态信息
struct DaHuaDssGpsStatus {
    string DeviceId;      // 设备ID
    double Latitude;      // 纬度
    double Longitude;     // 经度
    double Hight;         // 高度
    double Angle;         // 方位角
    double Speed;         // 速度
    int Stars;            // 卫星数量
    int Antenna;          // 天线状态
    int Orientation;      // 方向
    long ChangeTime;      // 更新时间

    // 构造函数,初始化所有成员变量为默认值
    DaHuaDssGpsStatus() {
        DeviceId = "";
        Latitude = 0.0;
        Longitude = 0.0;
        Hight = 0.0;
        Angle = 0.0;
        Speed = 0.0;
        Stars = 0;
        Antenna = 0;
        Orientation = 0;
        ChangeTime = 0;
    }
};

// 定义CNetSdkForDaHuaDSSPlatform类,继承自CNetSdkApp
class CNetSdkForDaHuaDSSPlatform : public CNetSdkApp {
public:
    // 设置报警回调函数
    int SetAlarmCallBack(long& UserData);
    
    // 设置报警,返回报警ID
    int SetupAlarm(long LoginID);
    
    // 取消报警
    int CancelAlarm(long lHandle);

    // 构造函数
    CNetSdkForDaHuaDSSPlatform();
    
    // 析构函数
    ~CNetSdkForDaHuaDSSPlatform();

    // 初始化SDK
    int ZXInit(void);
    
    // 清理SDK
    int ZXClean(void);
    
    // 登录设备
    long ZXLogin(char* pDevIp, UINT16 DevPort, char* pUsername, char* pPasswd, char *pOnvifURL, long& UserData);
    
    // 登出设备
    int ZXLogout(long LoginID, long& UserData);
    
    // 开始实时预览
    long ZXRealPlay(long LoginID, int Channel, int StreamId, StreamInfo *pStreamInfo, long& UserData);
    
    // 停止实时预览
    int ZXStopRealPlay(long VideoHdl);
    
    // 保持连接活动
    bool ZXKeepAlive(long LoginID);
    
    // 查找通用文件(录像)
    int ZXFindCommonFile(long LoginID, int Channel, char *pBeginTime, char *pEndTime, TRecordInfoQueryResp* RecordInfo, DevInfo *pDevInfo);
    
    // 开始回放
    long ZXPlayBackStart(long LoginID, int Channel, char *pBeginTime, char *pEndTime, long long& FileSize, long UserData, bool bDownLoad, DevInfo *pDevInfo);
    
    // 停止回放
    int ZXPlayBackStop(long PlayBackHdl);
    
    // 控制回放
    int ZXPlayBackControl(long PlayBackHdl, ZXPlayControl_E CMD, long& Postion, long AllFileTime = 0);
    
    // 控制PTZ
    int ZXPtzControl(long LoginID, int channelid, int opt, int param1, TExtPtzInfo *pExtPtzInfo);
    
    // 设置平台状态
    void SetPlatformStatus(bool bIsOnline);
    
    // 获取平台状态
    int GetPlatformStatus();
    
    // 发送报警信息至SIP UA
    void SendAlarmInfoToSipUA(string SerialNumber, bool IsOnline);
    
    // 发送GPS信息至SIP UA
    void SendGpsToSipUA(vector<DaHuaDssGpsStatus> &GpsInfo);

private:
    // 解析通道信息
    int ParseChanInfo(char *pstr, vector<DaHuaDssChanInfo> &vChanInfo);
    
    // 发送子通道信息至数据库
    bool SendSubChanToDB(long& UserData, vector<DaHuaDssChanInfo> &vChanInfo);
    
    // SDK状态回调函数
    static int32_t DPSDKStatusCallback(int32_t nPDLLHandle, int32_t nStatus, void* pUserParam);

private:
    char m_DevIp[IPSTR_MAX_LEN+1]; // 设备IP地址
    char m_UserName[USERNAME_MAX_LEN+1]; // 用户名
    char m_Passwd[USERNAME_MAX_LEN+1]; // 密码
    int m_DevPort; // 设备端口号
    int m_PlatformStatus; // 大华DSS平台在线状态;1:在线;0:不在线
    long DevCtrlHandle; // 设备控制句柄

    static void *m_GpsHandle; // GPS处理句柄
};

2、函数功能说明

        前面列出的C++代码定义了一个类CNetSdkForDaHuaDSSPlatform`,它是从CNetSdkApp` 类继承来的,主要用于封装和大华DSS平台交互的网络SDK功能。这个类封装了一系列方法,用于登录、实时预览、回放控制、PTZ控制、报警设置等,以及一些辅助方法和成员变量。

(1)引入的头文件

-<string>`:标准库中的字符串处理头文件。

-"NetSdkApp.h"`:可能是一个自定义的基类或SDK提供的基础类头文件。

-"InstructConvert.h"`:可能是用于指令转换的自定义头文件。

(2)自定义结构体

-DaHuaDssChanInfo`:描述了大华DSS平台上的通道信息,包括通道ID、名称、描述、状态、类型、序列号、权限、摄像头类型、控制ID、经纬度、视域、功能、多播IP/端口、NVR通道IP、远程类型、子多播IP/端口等。

-DaHuaDssGpsStatus`:描述了GPS状态,包括设备ID、纬度、经度、高度、角度、速度、卫星数、天线状态、方向和变更时间。

(3)类定义

        -CNetSdkForDaHuaDSSPlatform`:这个类提供了与大华DSS平台通信的方法,包括初始化、清理、登录、登出、实时预览、录像查询、回放控制、PTZ控制、平台状态设置/获取、发送报警信息和GPS信息至SIP UA等功能。

(4)成员方法

- 公有成员方法:用于外部调用,如登录、实时预览、回放控制、报警设置等。

- 私有成员方法:用于内部逻辑处理,如解析通道信息、发送子通道信息至数据库、状态回调等。

(5)成员变量

-m_DevIp`,m_UserName`,m_Passwd`,m_DevPort`:存储设备的IP地址、用户名、密码和端口号。

-m_PlatformStatus`:存储平台的在线状态。

-DevCtrlHandle`:可能用于存储设备控制句柄。

-m_GpsHandle`:静态成员,可能用于存储GPS处理的句柄或资源。

四、效果展示

      可以通过视频监控汇聚平台的web客户端,查看大华DSS下挂的视频图像,如下图,为刚刚截取的现场视频:

 


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1924443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《昇思25天学习打卡营第2天|02快速入门》

课程目标 这节课准备再学习下训练模型的基本流程&#xff0c;因此还是选择快速入门课程。 整体流程 整体介绍下流程&#xff1a; 数据处理构建网络模型训练模型保存模型加载模型 思路是比较清晰的&#xff0c;看来文档写的是比较连贯合理的。 数据处理 看数据也是手写体数…

【算法】平衡二叉树

难度&#xff1a;简单 题目 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例&#xff1a; 示例1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true 示例2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&…

炒鸡清晰的防御综合实验(内含区域划分,安全策略,用户认证,NAT认证,智能选路,域名访问)

实验拓扑图如下&#xff1a; 前面六个条件在之间的实验中做过了&#xff0c;详细步骤可以去之前的文章看 这里简写一下大致步骤 第一步&#xff1a; 先将防火墙之外的配置给配置好&#xff0c;比如&#xff0c;PC的IP,交换上的Vlan划分。 第二步&#xff1a; 在浏览器上登…

用SurfaceView实现落花动画效果

上篇文章 Android子线程真的不能刷新UI吗&#xff1f;(一&#xff09;复现异常 中可以看出子线程更新main线程创建的View&#xff0c;会抛出异常。SurfaceView不依赖main线程&#xff0c;可以直接使用自己的线程控制绘制逻辑。具体代码怎么实现了&#xff1f; 这篇文章用Surfa…

【算法专题】快速排序

1. 颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 依据题意&#xff0c;我们需要把只包含0、1、2的数组划分为三个部分&#xff0c;事实上&#xff0c;在我们前面学习过的【算法专题】双指针算法-CSDN博客中&#xff0c;有一道题叫做移动零&#xff0c;题目要…

小公司的Git工作流程

项目初始化 git init并添加.gitignore文件 Git使用 通过git add . 把代码推到暂存区通过git commit -m “你的说明”&#xff0c;将暂存区的代码推到本地仓库将本地仓库的代码通过git push 推到远程仓库远程仓库(gitee/gitlab/github)同事就可以通过命令git pull将你推上去的…

信息学奥赛初赛天天练-46-CSP-J2020阅读程序2-进制转换、十进制转k进制、等比数列通项公式、等比数列求和公式应用

PDF文档公众号回复关键字:20240713 2020 CSP-J 阅读程序2 1阅读程序(程序输入不超过数组或字符串定义的范围&#xff1b;判断题正确填 √&#xff0c;错误填 。除特殊说明外&#xff0c;判断题 1.5 分&#xff0c;选择题 3 分&#xff0c;共计 40 分) 01 #include <iostre…

java各种锁介绍

在 Java 中&#xff0c;锁是用来控制多个线程对共享资源进行访问的机制。主要有以下几种类型的锁&#xff1a; 1.互斥锁&#xff08;Mutex Lock)&#xff1a;最简单的锁&#xff0c;一次只允许一个线程访问共享资源。如果一个线程获得了锁&#xff0c;其他线程必须等待锁被释放…

DEBUG:jeston卡 远程ssh编程

问题 jeston 打开网页 gpt都不方便 而且只需要敲命令就行 解决 下载MobaXterm(window执行) liunx需要虚拟机 软件 远程快速复制命令

【kubernetes】Helm包管理器基本概念与Chart实战

概念&#xff1a;基础架构与常用命令 三个重要概念&#xff1a; 1.chart 创建Kukernetes应用程序所必需的一组信息。 2.config 包含了可以合并到打包的chart中的配置信息&#xff0c;用于创建一个可发布的对象。 3.release 是一个与特走配置相结合的chart的运行实例。 常用命…

聊点基础---Java和.NET开发技术异同全方位分析

1. C#语言基础 1.1 C#语法概览 欢迎来到C#的世界&#xff01;对于刚从Java转过来的开发者来说&#xff0c;你会发现C#和Java有很多相似之处&#xff0c;但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法&#xff0c;并比较一下与Java的异同。 程序结构 C#程序…

数学建模·非线性规划

整型规划 适用于一个变量或多个变量的值只能是整型的情况 整形规划的分类 0-1背包问题 对于一个物品来说&#xff0c;只有选和不选两种情况 表现为单下标&#xff0c;单变量问题 例&#xff1a;建设学校问题 对于每个学校来说只有选和不选两种情况&#xff0c;在数学上我们用…

O型密封圈橡胶制品外观视觉检测解决方案

一;O型密封圈橡胶制品行业背景调查 O型密封圈橡胶制品的外观视觉检测是一个确保产品质量和性能的关键步骤。以下是对该检测过程的详细分析和归纳&#xff1a; 一&#xff1a;检测目的 确保O型密封圈橡胶制品在生产过程中无缺陷&#xff0c;如杂质、毛刺、尺寸不符等。 满足不同…

Vue.js学习笔记(五)抽奖组件封装——转盘抽奖

基于VUE2转盘组件的开发 文章目录 基于VUE2转盘组件的开发前言一、开发步骤1.组件布局2.布局样式3.数据准备 二、最后效果总结 前言 因为之前的转盘功能是图片做的&#xff0c;每次活动更新都要重做UI和前端&#xff0c;为了解决这一问题进行动态配置转盘组件开发&#xff0c;…

【Linux】多线程_3

文章目录 九、多线程3. C11中的多线程4. 线程的简单封装 未完待续 九、多线程 3. C11中的多线程 Linux中是根据多线程库来实现多线程的&#xff0c;C11也有自己的多线程&#xff0c;那它的多线程又是怎样的&#xff1f;我们来使用一些C11的多线程。 Makefile&#xff1a; te…

防火墙组网与安全策略实验

实验要求&#xff1a; 实现&#xff1a; 防火墙接口配置&#xff1a; 所有接口均配置为三层接口 由于G1/0/3口下为vlan环境&#xff0c;所以防火墙需要配置子接口 &#xff1a; 交换机划分vlan分开生产区和办公区、配置trunk干道 &#xff1a; 安全策略&#xff1a; 生产区访…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构④ | 4.7

前言 第4章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术相关的内容&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 4.7 安全架构 4.7.1 安全威胁 4.7.2 定义与范围 4.7.3 整体架构设计 4.7.4 网络安全架构设计 4.7.5 数据库系统安…

Pod资源-持久化-网络暴露-env

一.资源清单 资源清单组成 apiVersion&#xff1a;v1 #对应不同的k8s版本中的api&#xff1b; kind&#xff1a;Pod #资源的名称&#xff08;service、ConfigMap、hpa.....&#xff09; metadata&#xff1a; #声明资源的元数据信息&#xff08;资源的…

JavaWeb后端学习

Web&#xff1a;全球局域网&#xff0c;万维网&#xff0c;能通过浏览器访问的网站 Maven Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建Java项目的工具 作用&#xff1a; 依赖管理&#xff1a;方便快捷的管理项目以来的资源&#xff08;jar包&#xff09;&am…

Linux - 探索命令行

探索命令行 Linux命令行中的命令使用格式都是相同的: 命令名称 参数1 参数2 参数3 ...参数之间用任意数量的空白字符分开. 关于命令行, 可以先阅读一些基本常识. 然后我们介绍最常用的一些命令: ls用于列出当前目录(即"文件夹")下的所有文件(或目录). 目录会用蓝色…