目录
一、视频监控平台介绍
1、概述
威迪斯特视频监控接入平台AS-V1000,也可以称为:视频监控综合资源管理平台,视频监控平台,视频监控汇聚平台(或视频监控汇集平台),视频监控管理平台,视频监控综合管理平台,是一套集成了用户设备权限管理、视音频监控、大容量存储、电子地图的系统平台软件。它结合了现代视频技术、网络通讯技术、计算机控制技术、流媒体传输技术的综合解决方案,为用户提供了强大的、灵活的组网和应用能力。
2、视频接入能力介绍
系统平台能够实现接入不同品牌的视频监控平台、视频相关设备、外围设备等等;支持国际和国内的一些标准对接协议,包括sdk协议、GB/T28181协议、ehome协议等等。可以通过各种协议,接入IPC、DVR、DVS、NVR等设备,以及一些大型的视频监控平台,包括海康威视、浙江大华、苏州科达、杭州宇视等主流品牌的监控平台,对于有些特有品牌的平台, 也能够通过SDK接口、私有协议等方式接入进入本系统平台;反过来,本平台也提供开放接口,能够接入到其他标准或者非标准的平台。
前面有篇文章:《AS-V1000平台使用SDK的方式接入监控设备》,有兴趣可以查看。
3、功能介绍
平台实现了丰富的功能,包含:实时多媒体数据转发和管理、移动流媒体转发管理、不间断录像、录像文件检索和回放、录像下载、设备状态管理、系统报警管理、视频转码、视频点播等等;整个平台具备稳定可靠、使用安全、兼容性强、接口开放、服务可堆叠、服务可多级级联、系统可平滑扩容等特点。
二、AXIS网络摄像机
Axis网络摄像机是一系列高品质、高安全性的网络视频产品,由Axis Communications公司研发。Axis是全球领先的网络视频解决方案提供商之一,专注于为各种环境提供创新的视频监控产品。Axis的网络摄像机广泛应用于各种场合,包括但不限于零售、银行、交通、政府和住宅等领域。
本文主要介绍视频监控平台的部分代码的头文件,这个头文件定义了一些函数,可以通过AXIS的SDK接入AXIS网络摄像头。
三、代码和解释
1、代码和注释
以下是为代码及其注释:
#if !defined(__NETSDK_FOR_AXIS_H__)
// 定义__NETSDK_FOR_AXIS_H__以防止头文件被重复包含
#define __NETSDK_FOR_AXIS_H__
// 引入必要的头文件
#include <string>
#include "NetSdkApp.h"
#include "TcpTransport.h"
// 使用std命名空间,这样我们就可以直接使用如string等类型,而不需要std::前缀
using namespace std;
// 定义一个从CNetSdkApp类继承的CNetSdkForAXIS类
class CNetSdkForAXIS : public CNetSdkApp
{
public:
// 设置报警回调函数,并传入用户数据作为参数
int SetAlarmCallBack(long& UserData); //set hik device alarm callback function
// 为该设备设置报警,并返回报警ID
int SetupAlarm(long LoginID); //setup alaram for this device,return alarm id
// 销毁该设备的报警
int CancelAlarm(long lHandle); //destroy alarm for this device
// 初始化函数,可能是进行一些初始化设置
int ZXInit(void);
// 清理函数,可能是释放资源等
int ZXClean(void);
// 登录函数,传入设备IP、端口、用户名、密码等,并返回登录ID和用户数据
long ZXLogin(char* pDevIp, UINT16 DevPort, char* pUsername, char* pPasswd,char *pOnvifURL, long& UserData);
// 登出函数,传入登录ID和用户数据
int ZXLogout(long LoginID,long& UserData);
// 实时播放函数,传入登录ID、通道号、流ID等信息,并返回视频句柄和用户数据
long ZXRealPlay(long LoginID, int Channel, int StreamId, StreamInfo *pStreamInfo,/*VideoStreamCallBack CBFunc,*/ long& UserData);
// 停止实时播放函数,传入视频句柄
int ZXStopRealPlay(long VideoHdl);
// 保持连接活性的函数,传入登录ID
bool ZXKeepAlive(long LoginID);
// 设置设备日期时间的函数,传入登录ID和年月日时分秒信息
int ZXSetDateTime(long LoginID,int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond);
// 查找通用文件的函数,传入登录ID、通道号、开始时间和结束时间等
int ZXFindCommonFile(long LoginID,int Channel, char *pBeginTime, char *pEndTime, TRecordInfoQueryResp* RecordInfo, DevInfo *pDevInfo);
// 回放开始函数,传入登录ID、通道号、开始时间和结束时间等
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);
// 云台控制函数,传入登录ID、通道号、操作选项和参数等
int ZXPtzControl(long LoginID, int channelid,int opt, int param1,TExtPtzInfo *pExtPtzInfo);
// 开始被动解码函数,传入登录ID和通道号
long ZXStartPassiveDec(long LoginID, int Channel);
// 发送被动解码数据的函数,传入解码句柄、数据缓冲区和长度
int ZXSendPassiveData(long DecHdl, UINT8* pBuf, int BufLen);
// 停止被动解码的函数,传入解码句柄
int ZXStopPassiveDec(long DecHdl);
// 获取选项查询参数的函数(当前返回-1,可能是未实现或占位)
int ZXGetOptQueryParam(long LoginID, int channelid, int opt){return -1;}
public:
// 构造函数
CNetSdkForAXIS();
// 析构函数
~CNetSdkForAXIS();
private:
………………
2、函数功能说明
本段代码定义了一个名为 CNetSdkForAXIS
的C++类,该类主要用于与Axis网络摄像头或类似设备进行交互。
(1)预处理指令
#if !defined(__NETSDK_FOR_AXIS_H__)
#define __NETSDK_FOR_AXIS_H__
...
#endif
这是一个常见的头文件保护机制。它确保这个头文件在一个编译单元中只被包含一次,从而防止重复定义。
(2)包含头文件
#include <string> | |
#include "NetSdkApp.h" | |
#include "TcpTransport.h" |
<string>
:包含C++标准库中的字符串处理功能。"NetSdkApp.h"
和"TcpTransport.h"
:这两个可能是项目中的自定义头文件,它们可能包含与网络连接、应用逻辑或其他基础功能相关的类、函数和定义。
(3)命名空间
using namespace std; |
使用std
命名空间,这样你就可以直接使用如string
这样的标准库类型,而不需要每次都加上std::
前缀。
(4)类定义
class CNetSdkForAXIS : public CNetSdkApp | |
{ | |
... | |
}; |
定义了一个名为CNetSdkForAXIS
的类,该类从CNetSdkApp
类继承。CNetSdkApp
可能是一个通用的网络SDK基类,提供了基本的网络连接、错误处理或其他功能。
(5)公共成员函数
这个类提供了多个公共成员函数,每个函数都执行与Axis设备交互的特定任务。例如:
SetAlarmCallBack
:设置报警回调函数。SetupAlarm
:为设备设置报警。CancelAlarm
:取消设备的报警。ZXLogin
、ZXLogout
:用于登录和登出设备。ZXRealPlay
、ZXStopRealPlay
:开始和停止实时播放视频。ZXSetDateTime
:设置设备的日期和时间。ZXFindCommonFile
:在设备上查找通用文件。ZXPlayBackStart
、ZXPlayBackStop
、ZXPlayBackControl
:用于回放视频。ZXPtzControl
:控制设备的云台(Pan-Tilt-Zoom)。ZXStartPassiveDec
、ZXSendPassiveData
、ZXStopPassiveDec
:可能与被动解码相关的功能。ZXGetOptQueryParam
:当前实现只返回-1,可能是未实现或占位符。
(6)构造函数和析构函数
CNetSdkForAXIS(); | |
~CNetSdkForAXIS(); |
CNetSdkForAXIS()
:类的构造函数,可能在对象创建时执行一些初始化操作。~CNetSdkForAXIS()
:类的析构函数,可能在对象销毁时执行一些清理操作。
(7)私有成员变量
char m_DevIp[IPSTR_MAX_LEN+1]; | |
char m_UserName[USERNAME_MAX_LEN+1]; | |
char m_Passwd[USERNAME_MAX_LEN+1]; | |
int m_DevPort; |
这些私有成员变量用于存储设备的IP地址、用户名、密码和端口号。IPSTR_MAX_LEN
和USERNAME_MAX_LEN
可能是定义在其他地方的常量,用于指定这些字符串的最大长度。
四、效果展示
可以通过视频监控平台的web客户端,查看axis的视频图像,如下图示:
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。