VERSION 3.1.8(Build 070321)
2007-3-21
版权所有 侵权必究
前 言
非常感谢您使用我们公司的设备,我们将为您提供最好的服务。
本手册可能包含技术上不准确的地方或印刷错误,欢迎指正。我们将会定期更新手册的内容。
修订记录
日期 2006-05-30 2006-7-3 2006-7-5 2006-7-26 2006-8-10 2006-8-21 2006-8-23 2006-8-28 2006-9-15 2006-9-21 2006-9-29 2006-10-16 2006-10-21 2006-10-28 2006-11-8 创建 修订接口描述 修订概要描述 修订接口描述 同步更新接口描述 修订接口描述 增加典型调用顺序描述 3.0.0整理修订 3.0.5同步增加回调数据扩展接口,更新云台控制说明 3.0.7同步增加登录扩展接口 3.0.9同步增加带有配置结构的配置功能接口说明 增加单独修改通道名称的接口 增加打开实时图像的扩展接口 1、增加按时间回放和下载接口 2、增加设备配置的第三方接入和获取设备的序列号功能 1、带数据回调的按时间回放扩展接口 2、带数据回调的按文件回放扩展接口 3、远程重启接口 4、录像回放能够播放音频 1、 解决了反复修改第三方的IP地址时DVR比较容易死机的问题 2、 增加485接口 3、 通过网络修改IP配置时DVR重启 1、 增加DDNS查询IP的功能 修正文档中接口描述的错误,并增加链接 增加并修改语音对讲的接口 增加用户管理接口 修改了CLIENT_Login的功能描述 增加了CLIENT_FindFile、CLIENT_FindNextFile、CLIENT_FindClose 增加了设备参数配置的两个接口:CLIENT_GetDevConfig CLIENT_SetDevConfig 修改了CLIENT_StopListen接口典型应用的笔误 增加了个查询报警状态的接口。 修订内容 林峰 冯江 华立高 作者 刘杰 陈美英 陈美英 陈美英 陈美英 陈美英 陈美英 陈美英 陈美英 赵均树 赵均树 赵均树 赵均树、陈琼施 2006-11-19 赵均树、陈琼施 2006-11-27 2006-12-15 2006-12-25 2006-12-29 2007-1-17 赵均树、陈琼施 赵均树、陈琼施、林坚彦 叶浩、陈琼施 林坚彦、陈琼施 林坚彦、赵均树、陈琼施 2007-2-8 林坚彦、陈琼施、 赵均树 赵均树 林坚彦、陈琼施 2007-3-7 2007-03-19 2007-03-21 增加了语音对讲中的音频编码接口 增加了扩展报警侦听接口 叶浩、陈琼施、林坚彦 目 录
1 简 介 ............................................... 错误!未指定书签。 1.1 概述 .......................................................... 1.2 适用性 ......................................................... 1.3 特色功能 ....................................................... 2 设计原则 .......................................................... 2.1 编程说明 ....................................................... 2.2 典型调用顺序 .................................................... 3 数据结构定义 ....................................................... 3.1 客户端数据结构 .................................................. 3.1.1 设备信息结构 ................................................ 3.1.2 时间信息 ................................................. 14 3.1.3 录像文件信息 ................................................ 3.1.4 设备状态信息 ................................................ 3.1.5 系统配置信息结构 ............................................. 4 接口定义 .......................................................... 4.1 SDK初始化 ..................................................... 4.2 状态侦听 ....................................................... 4.3 字符叠加 ....................................................... 4.4 设备注册 ....................................................... 4.5 实时监视 ....................................................... 4.6 音频控制 ......................................... 错误!未定义书签。 4.7 数据保存 ....................................................... 4.8 视频抓图 ....................................................... 4.9 回放和下载 ..................................................... 4.10 回放控制 ...................................................... 4.11 云台控制 ...................................................... 4.12 实时预览 ...................................................... 4.13 系统配置 ...................................................... 4.14 日志管理 ...................................................... 4.15 透明串口 ...................................................... 4.16 远程控制 ........................................ 错误!未定义书签。 4.17 录像控制 ...................................................... 4.18 系统时间 ...................................................... 4.19 用户管理 ...................................................... 4.20 语音对讲 ......................................................
4.21 码流统计 ...................................................... 4.22 IO控制 ....................................................... 4.23 强制I帧 ...................................................... 4.24 设置限流 ...................................................... 4.25 获取设备状态 ................................................... 4.26 修改通道名称 .................................................. 5 4.27 DDNS查询IP .................................................. 4.28 设备参数配置 ................................................... 5 示例功能实现 ....................................................... 5.1 连接设备 ....................................................... 5.2 报警信息获取 .................................................... 5.3 系统配置 ....................................................... 5.4 实时监视 ....................................................... 5.5 数据保存 ....................................................... 5.6 回放/下载和进度指示 .............................................. 5.7 播放控制 ....................................................... 5.8 预览 .......................................................... 5.9 字符叠加 .......................................................
1 简 介
1.1 概述
欢迎使用大华网络SDK编程手册,网络客户端软件开发包(DVR客户端SDK)是大华网络硬盘录像机、网络视频服务器的配套产品,本文档详细描述了开发包中各个函数实现的功能、接口及其函数之间的调用关系和示例实现。
网络客户端软件开发包主要包括业务操作和设备管理两大部分:
业务操作:状态侦听、实时监视、实时预览、字符叠加、音频控制、录像回放和下载、
数据保存、云台控制、语音对讲、透明串口、码流统计等功能。
设备管理:远程升级、远程重启/关闭、设备参数配置(系统通用配置、报警布/撤防
设置、录像配置、串口配置、图像配置、日志管理、用户管理、设备校时、动态检测配置、网络配置)等功能。
开发包所包括的文件有:
网络库:dhnetsdk.lib、dhnetsdk.dll、dhnetsdk.h
解码库:decode.dll、render.dll、dllh264.dll、audiorecord.dll、AudioRecordEx.dll、
avcodec.dll
辅助库:dhdvr.dll、ParaTimer.dll、DetectAreaCtrl.ocx、SetDeviceConfigProj.ocx
1.2 适用性
支持所有大华网络硬盘录像机(DVR)、网络视频服务器(NVS)、网络报警 服务器(NAS)
只支持TCP网络传输模式
客户端可以采用多种分辨率进行图像预览,支持的分辨率包括: QCIF、CIF、2CIF、、HalfD1、D1,VGA(640×480)等
客户端支持多种图像编码,包括MPEG4和H.264等
1.3 特色功能
支持设备的以下特色功能: 多路预览
在窄带条件下,同时多路实时监视对带宽的要求比较高,一般的处理情况有两种,其一,轮巡。其二,多路预览。所谓多路预览,就是在一个通道上把所有通道的数据组织在一起传输,等同于多路同时监视。必要的时候,可以转单路监视。大华DVR支持多路预览功能。 支持标准的MP4数据
一般情况下,同一平台集成不同厂商的前端设备(如DVR),由于各厂商采用的视频压缩方法不同(包括算法、参数定义等),导致解码端回放必须采用厂商特定的工具,造成平台开发商无法自定义播放标准。本SDK能够解决这个问题。通过特定接口,应用层可以通过本SDK获取标准媒体数据(FOURCC(‘D’、‘I’、‘V’、‘X’)视频数据),要支持用各种通用播放器播放,有了提供标准数据,应用层只须打包标准数据到播放器支持的容器类型(也就是文件格式,如AVI标准)就可以了。
2 设计原则
2.1 编程说明
初始化和清除
1、 使用网络客户端软件包首先调用CLIENT_Init()对系统进行初始化,应用程序退
出时调用CLIENT_Cleanup()释放所有占用的资源。
2、 大多数函数调用均应该在CLIENT_Init()之后,CLIENT_Cleanup()之前,除了
少数函数,譬如CLIENT_SetConnectTime()在CLIENT_Init()之前调用,而CLIENT_GetSDKVersion()可以在任何时候调用等等。 操作句柄
系统设计上多处使用了句柄概念,很多操作均针对句柄,如回放、下载以及语音对讲等。
用户登录和注销
用户在访问前端设备之前必须通过调用CLIENT_Login ()登录到前端设备上,登录成功后返回一个全局唯一的句柄。此句柄就像一个会话通道,之后该用户可通过此句柄访问前端设备。退出该会话时则通过CLIENT_Logout ()函数在前端设备上注销此句柄以终止该会话通道的使用。建立连接与登录是同步的。 心跳功能
在本开发包中提供自动心跳功能(20秒一次心跳)当设备断开能及时回调给客户端。 同步与异步
异步以设置回调函数来响应网络数据,有些异步在设置后返回请求句柄,结束请求时将请求句柄提供给SDK以注销相关资源。 SDK提供协议探测和转换 回调函数
一般都有dwUser参数, 由用户自定义需要的数据, 一般用来传入类对象指针, 方便回调处理在类中实现,回调应用都可以采取这种方式。
2.2 典型调用顺序
A. 初始化
SDK初始化 CLIENT_Init() B. SDK功能设置或信息获取
设置连接等待时间 CLIENT_SetConnectTime() 获取SDK版本 CLIENT_GetSDKVersion() 设置消息回调 CLIENT_SetDVRMessCallBack() 设置自定义叠加画板 CLIENT_RigisterDrawFun() C. 登录连接设备
登录设备 CLIENT_Login() 开始侦听 CLIENT_StartListen() D. 设备功能操作与信息获取
系统配置 CLIENT_QueryConfig() CLIENT_SetupConfig() 获取设备状态 CLIENT_GetDEVWorkState() 获取协议信息 CLIENT_QueryComProtocol() 查询获取系统信息 CLIENT_QuerySystemInfo() 查询通道名称 CLIENT_QueryChannelName() 查询日志 CLIENT_QueryLogCallback() CLIENT_QueryLog() 用户管理 CLIENT_QueryUserInfo() CLIENT_OperateUserInfo() 云台控制 CLIENT_PTZControl() CLIENT_DHPTZControl() 语音对讲 CLIENT_StartTalk() CLIENT_SendTalkData_Custom() CLIENT_StopTalk() 设置限流 CLIENT_SetMaxFlux() 透明串口 CLIENT_CreateTransComChannel() CLIENT_SendTransComData() CLIENT_DestroyTransComChanne() E. 实时监视通道
打开监视通道 CLIENT_RealPlay() CLIENT_RealPlayEx() 保存监视图像数据 CLIENT_SaveRealData() 监视数据回调保存 CLIENT_SetRealDataCallBack() CLIENT_SetRealDataCallBackEx() 获取视频参数信息 CLIENT_ClientGetVideoEffect() 设置修改视频参数 CLIENT_ClientSetVideoEffect() 强制I帧 CLIENT_MakeKeyFrame() F. 多画面预览通道
打开多画面预览 CLIENT_MultiPlay() 停止多画面预览 CLIENT_StopMultiPlay() G. 回放/下载通道
查询录像 CLIENT_QueryRecordFile() 回放及控制 CLIENT_PlayBackByRecordFile() CLIENT_PlayBackByRecordFileEx() CLIENT_PlayBackByTime() CLIENT_PlayBackByTimeEx() CLIENT_GetPlayBackOsdTime() CLIENT_PausePlayBack() CLIENT_SeekPlayBack() CLIENT_StopPlayBack() CLIENT_StepPlayBack() CLIENT_FastPlayBack() CLIENT_SlowPlayBack() CLIENT_GetFramePlayBack() CLIENT_SetFramePlayBack() 下载 CLIENT_DownloadByRecordFile() CLIENT_DownloadByRecordFileEx() CLIENT_DownloadByTime() CLIENT_StopDownload() CLIENT_GetDownloadPos() H. 针对显示图像的操作(监视/回放/多画面预览)
抓图 CLIENT_CapturePicture() 码流统计 CLIENT_GetStatiscFlux() 打开音频 CLIENT_OpenSound() 设置音量 CLIENT_SetVolume() I. 远程控制
远程升级 CLIENT_StartUpgrade CLIENT_SendUpgrade CLIENT_StopUpgrade 录像控制 CLIENT_QueryRecordState CLIENT_SetupRecordState 系统校时 CLIENT_QueryDeviceTime CLIENT_SetupDeviceTime IO控制 CLIENT_QueryIOControlState CLIENT_IOControl J. 注销断开设备
停止侦听 CLIENT_StopListen() 断开连接 CLIENT_Logout() K. 释放SDK资源
SDK退出 CLIENT_Cleanup() 对D、E、F、G、H、I中的功能大部分之间没有调用先后顺序,当然对同一个功能还是应该按先打开再操作最后关闭的顺序。
3 数据结构定义
3.1 客户端数据结构
通用云台控制命令
typedef enum _PTZ_ControlType {
PTZ_UP_CONTROL = 0, PTZ_DOWN_CONTROL, PTZ_LEFT_CONTROL, PTZ_RIGHT_CONTROL, PTZ_ZOOM_ADD_CONTROL, PTZ_ZOOM_DEC_CONTROL, PTZ_FOCUS_ADD_CONTROL, PTZ_FOCUS_DEC_CONTROL, PTZ_APERTURE_ADD_CONTROL, PTZ_APERTURE_DEC_CONTROL, PTZ_POINT_MOVE_CONTROL, PTZ_POINT_SET_CONTROL, PTZ_POINT_DEL_CONTROL, PTZ_POINT_LOOP_CONTROL, PTZ_LAMP_CONTROL, }PTZ_ControlType;
//上 //下 //左 //右 //变倍+ //变倍- //调焦+ //调焦- //光圈+ //光圈-
//转至预置点 //设置 //删除 //点间轮循 //灯光雨刷
云台控制扩展命令
typedef enum _EXTPTZ_ControlType{ EXTPTZ_LEFTTOP = 0X20, EXTPTZ_RIGHTTOP , EXTPTZ_LEFTDOWN , EXTPTZ_RIGHTDOWN, EXTPTZ_ADDTOLOOP, EXTPTZ_DELFROMLOOP, // 左上 // 右上 // 左下 // 右下
// 加入预置点到巡航 巡航线路 预置点值 // 删除巡航中预置点 巡航线路 预置点值 EXTPTZ_CLOSELOOP, EXTPTZ_STARTPANCRUISE, EXTPTZ_STOPPANCRUISE, EXTPTZ_SETLEFTBORDER, EXTPTZ_RIGHTBORDER , EXTPTZ_STARTLINESCAN, EXTPTZ_CLOSELINESCAN, EXTPTZ_SETMODESTART, EXTPTZ_SETMODESTOP, EXTPTZ_RUNMODE, EXTPTZ_STOPMODE, EXTPTZ_DELETEMODE, EXTPTZ_REVERSECOMM, EXTPTZ_FASTGOTO, EXTPTZ_AUXIOPEN, EXTPTZ_AUXICLOSE, EXTPTZ_OPENMENU = 0X36, EXTPTZ_CLOSEMENU , EXTPTZ_MENUOK, EXTPTZ_MENUCANCEL, EXTPTZ_MENUUP, EXTPTZ_MENUDOWN, EXTPTZ_MENULEFT, EXTPTZ_MENURIGHT, EXTPTZ_TOTAL,
}EXTPTZ_ControlType;
IO控制命令
typedef enum _IOTYPE{ ALARMINPUT = 1, ALARMOUTPUT = 2,
}IOTYPE;
查询状态类型
#define DH_DEVSTATE_COMM_ALARM
// 清除巡航 巡航线路 // 开始水平旋转 // 停止水平旋转 // 设置左边界 // 设置右边界 // 开始线扫 // 停止线扫 // 设置模式开始 模式线路 // 设置模式结束 模式线路 // 运行模式 模式线路 // 停止模式 模式线路 // 清除模式 模式线路 // 翻转命令 // 快速定位 水平坐标 垂直坐标// x34 辅助开关开 辅助点 // 0x35辅助开关关 辅助点 // 打开球机菜单 // 关闭菜单 //菜单确定 //菜单取消 //菜单上 //菜单下 //菜单左 //菜单右 //最大命令值
//报警输入 //报警输出
0x0001
//查询普通报警
变倍 #define DH_DEVSTATE_SHELTER_ALARM 0x0002 #define DH_DEVSTATE_RECORDING 0x0003 #define DH_DEVSTATE_DISK 0x0004 错误类型代号,用于GetLastError函数的返回
#define _EC(x)
#define NET_NOERROR 0 #define NET_ERROR -1 #define NET_SYSTEM_ERROR _EC(1) #define NET_NETWORK_ERROR _EC(2) #define NET_DEV_VER_NOMATCH _EC(3) #define NET_INVALID_HANDLE _EC(4) #define NET_OPEN_CHANNEL_ERROR _EC(5) #define NET_CLOSE_CHANNEL_ERROR _EC(6) #define NET_ILLEGAL_PARAM _EC(7) #define NET_SDK_INIT_ERROR _EC(8) #define NET_SDK_UNINIT_ERROR _EC(9) #define NET_RENDER_OPEN_ERROR _EC(10) #define NET_DEC_OPEN_ERROR _EC(11) #define NET_DEC_CLOSE_ERROR _EC(12) #define NET_MULTIPLAY_NOCHANNEL _EC(13) #define NET_TALK_INIT_ERROR _EC(14) #define NET_TALK_NOT_INIT _EC(15) #define NET_TALK_SENDDATA_ERROR _EC(16) #define NET_REAL_ALREADY_SAVING _EC(17) #define NET_NOT_SAVING _EC(18) #define NET_OPEN_FILE_ERROR _EC(19) #define NET_PTZ_SET_TIMER_ERROR _EC(20) #define NET_RETURN_DATA_ERROR _EC(21) #define NET_INSUFFICIENT_BUFFER _EC(22) #define NET_NOT_SUPPORTED _EC(23) #define NET_NO_RECORD_FOUND _EC(24) #define NET_NOT_AUTHORIZED _EC(25) #define NET_NOT_NOW _EC(26) #define NET_NO_TALK_CHANNEL _EC(27) #define NET_NO_AUDIO _EC(28) #define NET_AUDIOENCODE_NOTINI _EC(59) #define NET_DATA_TOOLONGH _EC(60) #define NET_LOGIN_ERROR_PASSWORD _EC(100)#define NET_LOGIN_ERROR_USER _EC(101)#define NET_LOGIN_ERROR_TIMEOUT _EC(102)#define NET_LOGIN_ERROR_RELOGGIN _EC(103)//查询遮挡报警
//查询录象状态 //查询硬盘状态
//没有错误
//未知错误
//Windows系统出错 //网络错误
//设备协议不匹配 //句柄无效 //打开通道失败 //关闭通道失败 //用户参数不合法 //SDK初始化出错 //SDK清理出错
//申请render资源出错 //打开解码库出错 //关闭解码库出错
//多画面预览中检测到通道数为0 //录音库初始化失败 //录音库未经初始化 //发送音频数据出错
//实时数据已经处于保存状态 //未保存实时数据 //打开文件出错
//启动云台控制定时器失败 //对返回数据的校验出错 //没有足够的缓存
//当前SDK未支持该功能 //查询不到录象 //无操作权限 //暂时无法执行 //未发现对讲通道 //未发现音频
//音频编码接口没有成功初始化 //数据过长 //密码不正确 //帐户不存在
//等待登录返回超时 //帐号已登录
#define NET_LOGIN_ERROR_LOCKED #define NET_LOGIN_ERROR_BLACKLIST #define NET_LOGIN_ERROR_BUSY #define NET_LOGIN_ERROR_CONNECT #define NET_LOGIN_ERROR_NETWORK #define NET_RENDER_SOUND_ON_ERROR #define NET_RENDER_SOUND_OFF_ERROR #define NET_RENDER_SET_VOLUME_ERROR #define NET_RENDER_ADJUST_ERROR #define NET_RENDER_PAUSE_ERROR #define NET_RENDER_SNAP_ERROR #define NET_RENDER_STEP_ERROR #define NET_RENDER_FRAMERATE_ERROR #define NET_CONFIG_DEVBUSY #define NET_CONFIG_DATAILLEGAL _EC(104) //帐号已被锁定
_EC(105) //帐号已被列为黑名单 _EC(106) //资源不足,系统忙 _EC(107) //连接主机失败\" _EC(108) //网络连接失败\"
_EC(120) //Render库打开音频出错 _EC(121) //Render库关闭音频出错 _EC(122) //Render库控制音量出错 _EC(123) //Render库设置画面参数出错 _EC(124) //Render库暂停播放出错 _EC(125) //Render库抓图出错 _EC(126) //Render库步进出错 _EC(127) //Render库设置帧率出错 _EC(999) //暂时无法设置 _EC(1000) //配置数据不合法
回调函数类型
#define COMM_ALARM #define SHELTER_ALARM #define DISK_FULL_ALARM #define DISK_ERROR_ALARM #define SOUND_DETECT_ALARM
0x1100 0x1101 0X1102 0x1103 0x1104
//常规报警信息
//视频遮挡报警 //硬盘满报警 //硬盘故障报警 //音频检测报警
设备型号(DVR类型)
enum NET_DEVICE_TYPE { NET_PRODUCT_NONE = 0, NET_DVR_NONREALTIME_MACE, NET_DVR_NONREALTIME, NET_NVS_MPEG1, NET_DVR_MPEG1_2, NET_DVR_MPEG1_8, NET_DVR_MPEG4_8, NET_DVR_MPEG4_16, NET_DVR_MPEG4_SX2, NET_DVR_MEPG4_ST2, NET_DVR_MEPG4_SH2, NET_DVR_MPEG4_GBE, NET_DVR_MPEG4_NVSII, NET_DVR_STD_NEW, NET_DVR_DDNS, };
// 非实时MACE // 非实时
// 网络视频服务器 // MPEG1二路录像机 // MPEG1八路录像机 // MPEG4八路录像机 // MPEG4十六路录像机 // MPEG4视新十六路录像机 // MPEG4视通录像机 // MPEG4视豪录像机
// MPEG4视通二代增强型录像机 // MPEG4网络视频服务器II代 // 新标准配置协议 // DDNS服务器
3.1.1 设备信息结构
设备结构定义如下
typedef struct {
BYTE sSerialNumber[SERIALNO_LEN];
BYTE byAlarmInPortNum; BYTE byAlarmOutPortNum; BYTE byDiskNum; BYTE byDVRType; BYTE byChanNum; } NET_DEVICEINFO, *LPNET_DEVICEINFO;
//序列号
//DVR报警输入个数 //DVR报警输出个数 //DVR硬盘个数 //DVR类型, //DVR通道个数
3.1.2 时间信息
typedef struct {
DWORD dwYear; DWORD dwMonth; DWORD dwDay; DWORD dwHour; DWORD dwMinute; DWORD dwSecond; } NET_TIME,*LPNET_TIME;
//年 //月 //日 //时 //分 //秒
3.1.3 录像文件信息
typedef struct {
unsigned int ch; //通道号 char filename[128]; //文件名 unsigned int size; //文件长度 NET_TIME starttime; //开始时间 NET_TIME endtime; //结束时间 unsigned int driveno; //磁盘号 unsigned int startcluster; //起始簇号 } NET_RECORDFILE_INFO, *LPNET_RECORDFILE_INFO;
3.1.4 设备状态信息
设备端通过回调主动上传的设备状态结构
typedef struct {
int channelcount; int alarminputcount;
unsigned char diskerror[MAX_DISKNUM]; unsigned char *record; //size:channelcount unsigned char *alarm; //size:alarminputcount
unsigned char *motiondection; //size:channelcount unsigned char *videolost; //size:channelcount } NET_CLIENT_STATE;
以下为查询的设备工作状态的相关结构
typedef struct {
BYTE byRecordStatic; //通道是否在录像,0-不录像,1-录像 BYTE bySignalStatic; //连接的信号状态,0-正常,1-信号丢失
BYTE byHardwareStatic; //通道硬件状态,0-正常,1-异常,例如DSP死掉 char reserve; //暂时无效
DWORD dwBitRate; //实际码率,暂时无效
DWORD dwLinkNum; //客户端连接的个数, 暂时无效 DWORD dwClientIP[MAX_LINK]; //客户端的IP地址,暂时无效 }NET_DEV_CHANNELSTATE,*LPNET_DEV_CHANNELSTATE; typedef struct {
DWORD dwVolume; //硬盘的容量 DWORD dwFreeSpace; //硬盘的剩余空间
DWORD dwStatus; //硬盘的状态,休眠,活动,不正常等 }NET_DEV_DISKSTATE,*LPNET_DEV_DISKSTATE; typedef struct{
DWORD dwDeviceStatic; //设备状态0x00 正常,0x01 CPU占用过高, 0x02 硬件错误 NET_DEV_DISKSTATE stHardDiskStatic[MAX_DISKNUM]; //设备暂时不支持 NET_DEV_CHANNELSTATE stChanStatic[MAX_CHANNUM]; //通道的状态
BYTE byAlarmInStatic[MAX_ALARMIN]; //报警端口的状态0-无报警,1-有报警 BYTE byAlarmOutStatic[MAX_ALARMOUT];//报警输出端口的状态0-无输出,1-有输出 DWORD dwLocalDisplay; //本地显示状态0-正常,1-不正常 }NET_DEV_WORKSTATE,*LPNET_DEV_WORKSTATE;
录像文件信息
typedef struct {
unsigned int ch; //通道号 char filename[128]; //文件名 unsigned int size; //文件长度 NET_TIME starttime; //开始时间 NET_TIME endtime; //结束时间 unsigned int driveno; //磁盘号 unsigned int startcluster; //起始簇号 } NET_RECORDFILE_INFO, *LPNET_RECORDFILE_INFO;
串口协议信息(232和485)
typedef struct {
char protocolname[12]; unsigned int baudbase; unsigned char databits; unsigned char stopbits; unsigned char parity; unsigned char reserve;
} PROTOCOL_INFO, *LPPROTOCOL_INFO;
//协议名 //波特率 //数据位 //停止位 //校验位
报警IO控制(报警输出和报警输入使能)
typedef struct {
unsigned short index; unsigned short state; }ALARM_CONTROL;
//端口序号 //端口状态
用户管理功能数据结构
#define MAX_RIGHT_NUM 100 #define MAX_GROUP_NUM 20 #define MAX_USER_NUM 200 #define RIGHT_NAME_LENGTH 32 #define USER_NAME_LENGTH 8 #define USER_PSW_LENGTH 8 #define MEMO_LENGTH 32 typedef struct { DWORD dwID;
char name[RIGHT_NAME_LENGTH]; char memo[MEMO_LENGTH]; }OPR_RIGHT;
typedef struct { DWORD dwID;
DWORD dwGroupID;
char name[USER_NAME_LENGTH]; char passWord[USER_PSW_LENGTH]; DWORD dwRightNum;
DWORD rights[MAX_RIGHT_NUM]; char memo[MEMO_LENGTH]; }USER_INFO;
typedef struct { DWORD dwID;
char name[USER_NAME_LENGTH]; DWORD dwRightNum;
DWORD rights[MAX_RIGHT_NUM]; char memo[MEMO_LENGTH]; }USER_GROUP_INFO;
SDK返回的用户信息结构
typedef struct { DWORD OPR_RIGHT DWORD USER_GROUP_INFO DWORD USER_INFO }USER_MANAGE_INFO;
dwRightNum;
rightList[MAX_RIGHT_NUM]; dwGroupNum;
groupList[MAX_GROUP_NUM]; dwUserNum;
userList[MAX_USER_NUM];
日志信息
1. 日志的结构形式 //时间结构
typedef struct _DHTIME {
DWORD second :6; DWORD minute :6; DWORD hour :5; DWORD day :5; DWORD month :4; DWORD year :6; }DHTIME,*pDHTIME; //日志结构
struct LOG_ITEM {
DHTIME time; WORD BYTE BYTE BYTE };
//日期
接口文档 数字视频录像机网络服务编程手册 公开 //类型
//标记, 0x00 正常,0x01 扩展,0x02 数据 //数据 //内容
// 秒 // 分 // 时 // 日 // 月 // 年 1-60 1-60 1-24 1-31 1-12 2000-2063
type; flag; data; context[8];
2. 日志的类型
enum dh_log_t {
LOG_REBOOT = 0x0000, LOG_SHUT,
LOG_CONFSAVE = 0x0100, LOG_CONFLOAD,
LOG_FSERROR = 0x0200, LOG_HDD_WERR, LOG_HDD_RERR, LOG_HDD_TYPE,
//system logs //config logs
//文件系统错误 //硬盘写错误 //硬盘读错误 //设置硬盘类型
LOG_HDD_FORMAT, //格式化硬盘 LOG_ALM_IN = 0x0300, //alarm logs //record
LOG_MANUAL_RECORD_START = 0x0400, LOG_MANUAL_RECORD_STOP, //user manager
LOG_LOGIN = 0x0500, LOG_LOGOUT, LOG_ADD_USER, LOG_DELETE_USER, LOG_MODIFY_USER, LOG_ADD_GROUP, LOG_DELETE_GROUP, LOG_MODIFY_GROUP, //clear
LOG_CLEAR = 0x0600, //record operation LOG_DOWNLOAD, LOG_PLAYBACK, LOG_TYPE_NR = 8, };
//录像下载 //录像回放
3. 数据组织
向客户端传递所有日志信息,长度为N*日志结构长度,N为日志的条数。
查询硬盘信息的返回数据结构
typedef struct{
DWORD dwDiskNum; //硬盘个数
NET_DEV_DISKSTATE stDisks[DH_MAX_DISKNUM]; //各硬盘信息 }DH_HARDDISK_STATE,*LPDH_HARDDISK_STATE;
音频数据的格式结构
Typedef struct{
BYTE byFormatTag; //编码类型,0-PCM WORD nChannels; //声道数 WORD wBitsPerSample; //采样深度 DWORD nSamplesPerSec; //采样率
} DH_AUDIO_FORMAT, *LPDH_AUDIO_FORMAT;
3.1.5 系统配置信息结构
目前提供了配置控件的方式配置设备
4 接口定义
4.1 SDK初始化
1.
CLIENT_API DWORD CALL_METHOD CLIENT_GetLastError(void);
函数说明:返回函数执行失败代码,当调用下面的接口失败时,可以用该函
数获取失败的代码,具体错误代码参见错误类型代号说明 参数说明: 返回值:返回 相关函数:
典型应用:参加demo
typedef void (CALLBACK *fDisConnect)(LONG lLoginID, char *pchDVRIP, LONG nDVRPort, DWORD dwUser);
2. CLIENT_API BOOL CLIENT_Init(fDisConnect cbDisConnect,
DWORD dwUser); 函数说明:初始化SDK, 在所有的SDK函数之前调用 参数说明: cbDisConnect
断线回调函数,回调出当前网络已经断开的设备, 对主动断开的设备不回调; 设置为0时禁止回调 dwUser
用户数据
回调函数参数说明:
lLoginID
CLIENT_Login的返回值
pchDVRIP
设备IP
nDVRPort 端口 dwUser
用户数据,就是上面输入的用户数据
返回值:成功返回TRUE,不成功返回FALSE 相关函数:CLIENT_Cleanup
典型应用:在应用程序初始化时调用
3. CLIENT_API void CLIENT_Cleanup();
函数说明:清空SDK, 释放占用的资源,在所有的SDK函数之后调用。 参数:无
4.
返回值:无
相关函数:CLIENT_Init
典型应用:在应用程序关闭时调用
CLIENT_API void CLIENT_SetConnectTime(int nWaitTime, int nTryTimes);
函数说明:设置与设备的连接等待时间
调用顺序无关,SDK默认值为3000ms,对外网一般需要增加到5000ms,此值
不影响设备连接速度, 只有当网络状态不好时延长等待时间,可以提高连接成功几率。 参数说明: nWaitTime
连接等待时间,毫秒级 nTryTimes
连接次数,暂时为无效值
返回值:无
相关函数:CLIENT_Login
典型应用:一般在应用程序初始化时调用
5. CLIENT_API DWORD CLIENT_GetSDKVersion();
函数说明:得到SDK的版本号 参数:无
返回值:版本号
典型应用:一般在应用程序初始化时调用
4.2 状态侦听
typedef BOOL (CALLBACK *fMessCallBack)(LONG lCommand, LONG lLoginID, char *pBuf, DWORD dwBufLen, char *pchDVRIP, LONG nDVRPort, DWORD dwUser);
6.
CLIENT_API void CLIENT_SetDVRMessCallBack(fMessCallBack
cbMessage, DWORD dwUser);
函数说明:设置设备消息回调函数, 用来得到设备当前状态信息,与调用顺序
无关,SDK默认不回调,此回调函数必须在调用打开侦听CLIENT_StartListen或CLENT_StartListenEx才有效,同时需要说明的是针对目前定义的报警状态,是每秒回调设备当前的状态值; 参数说明:
cbMessage
消息回调函数,可以回调设备的状态, 如报警状态可以通过此回调获取; 当设置为0时表示禁止回调 dwUser 用户数据
回调函数参数说明:
lCommand
回调类型 lLoginID
CLIENT_Login的返回值
pBuf
接收报警数据的缓存,根据调用的侦听接口和lCommand值不同,填充的数
据不同
如果调用的侦听接口为CLIENT_StartListen,则lCommand的可能值是:
-OMM_ALARM:填充数据为一个NET_CLIENT_STATE结构体。 -SHELTER_ALARM:填充数据为16个字节,每个字节表示一个视频通道的遮挡报警状态,
1为有报警,0为无报警
-DISK_FULL_ALARM,填充数据为1个DWORD值,1表示硬盘满,0表示硬盘未满。
-DISK_ERROR_ALARM:填充数据为1个DWORD值,按位表示最多32个硬盘的故障报警,
每位为1表示有报警,为0表示无报警。
-SOUND_DETECT_ALARM:填充数据为16个字节,每个字节表示一个视频通道的音频报
警状态,1为有报警,0为无报警
如果调用的侦听接口为CLENT_StartListenEx,则lCommand的可能值是:
-DH_ALARM_ALARM_EX:填充数据为16个字节,每个字节表示一个报警通道的报警状
态,1为有报警,0为无报警。
-DH_MOTION_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的动态检测报警状态,1为有报警,0为无报警。
-DH_VIDEOLOST_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的视频丢失报警状态,1为有报警,0为无报警。
-DH_SHELTER_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的遮挡(黑屏)报警状态,1为有报警,0为无报警。
-DH_SOUND_DETECT_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的音频检测报警状态,1为有报警,0为无报警。
-DH_DISKFULL_ALARM_EX:填充数据为1个字节,1为有硬盘满报警,0为无报警。 -DH_DISKERROR_ALARM_EX:填充数据为32个字节,每个字节表示一个硬盘的故障报警状态,1为有报警,0为无报警。
dwBufLen pBuf的长度 pchDVRIP
设备IP
nDVRPort
端口
dwUser
回调的用户数据,就是上面输入的用户数据
返回值:TRUE回调函数执行正确,FALSE执行错误 相关函数:CLIENT_StartListen、CLIENT_StopListen 典型应用:一般在应用程序初始化时调用设置回调,在回调函数中根据不同的
设备ID和命令值做出不同的处理。
7. CLIENT_API BOOL CLIENT_StartListen(LONG lLoginID);
函数说明:开始对某个设备侦听消息,用来设置是否需要对设备消息回调,得
到的消息从CLIENT_SetDVRMessCallBack的设置值回调出来。 参数说明:
lLoginID
CLIENT_Login的返回值
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_SetDVRMessCallBack,CLIENT_StopListen 典型应用:在设备连接后调用本函数打开侦听
8. CLIENT_API BOOL CLIENT_StartListenEx(LONG lLoginID) 函数说明:开始对某个设备侦听消息,用来设置是否需要对设备消息回调,得
到的消息从CLIENT_SetDVRMessCallBack的设置值回调出来。
本函数是CLIENT_StartListen的增强版本:支持的报警种类更多更全,且每一种报警都细分为单独回调。 参数说明:
lLoginID
CLIENT_Login的返回值
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_SetDVRMessCallBack,CLIENT_StopListen 典型应用:在设备连接后调用本函数打开侦听
9. CLIENT_API BOOL CLIENT_StopListen(LONG lLoginID); 函数说明:停止对某个设备侦听消息 参数说明:
lLoginID
CLIENT_Login返回值
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_StartListen , CLENT_StartListenEx 典型应用:参见demo程序
4.3 字符叠加
typedef void (CALLBACK *fDrawCallBack)(LONG lLoginID, LONG lPlayHandle, HDC hDC, DWORD dwUser);
10. CLIENT_API void CLIENT_RigisterDrawFun(fDrawCallBack
cbDraw, DWORD dwUser); 函数说明:用户自定义画图, 在打开图像之前调用此函数,否则无效,必须在所
有窗口未显示之前调用, 可以用来对画面进行字符叠加。 参数说明:
cbDraw
画图回调,当设置为0时表示禁止回调
dwUser
用户数据
回调函数说明:
LoginID
CLIENT_Login的返回值,标识设备。
lPlayHandle
CLIENT_RealPlay的返回值,标识通道。
hDC
是对整个显示画面区域的画板指针,根据用户的需要可以对任何位置叠加显示。 dwUser
用户数据,就是上面输入的用户数据。 返回值:无 相关函数: 无 典型应用:本接口最好在应用程序初始化时就调用,具体的处理在回调函数中
根据当前画面ID(可以是监视,多画面预览,回放)叠加不同的信息;
4.4 设备注册
11. CLIENT_API LONG CLIENT_Login(char *pchDVRIP, WORD
wDVRPort, char *pchUserName, char *pchPassword, LPNET_DEVICEINFO lpDeviceInfo, int *error = 0); 函数说明:注册用户到设备,当设备端把用户设置为复用(设备默认的用户
不能设置为复用),该帐号可以多次向设备注册 参数说明:
pchDVRIP
设备IP wDVRPort
设备端口 pchUserName
用户名 pchPassword
用户密码 lpDeviceInfo
设备信息,属于输出参数
error
(当函数返回成功时,该参数的值无意义),返回登录错误码: 1.密码不正确 2.帐号不存在 3.等待登录返回超时
12.
4.帐号已登录 5.帐号已被锁定
6.帐号又被列为黑名单 7.资源不足,系统忙 9.找不到网络主机 0.其他网络错误
返回值:失败返回0,成功返回设备ID,登录成功之后对设备的操作都可以通过此值(设备句柄)对应到相应的设备 相关函数:CLIENT_Logout
典型应用:在初始化后就可以调用本接口注册到指定的设备,成功后将返回设备句柄,给相关的函数调用
CLIENT_API LONG CLIENT_LoginEx(char *pchDVRIP, WORD wDVRPort, char *pchUserName, char *pchPassword, int nSpecCap, void* pCapParam, LPNET_DEVICEINFO lpDeviceInfo, int *error = 0)
函数说明:注册用户到设备的扩展接口,支持一个用户指定设备支持的能力 参数说明:增加扩展参数
nSpecCap
设备支持的能力,值为1表示同一用户名可以多次登录, 其他暂时不支持 pCapParam
对nSpecCap 的补充参数, 目前为0
返回值: 失败返回0,成功返回设备ID,登录成功之后对设备的操作都可以通过此值(设备句柄)对应到相应的设备 相关函数: CLIENT_Logout
典型应用:一个用户同时多次登录同一台设备
CLIENT_API BOOL CLIENT_Logout(LONG lLoginID);
13.
函数说明:注销设备用户 参数说明:
lLoginID
CLIENT_Login的返回值
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_Login
典型应用:当需要设备主动断开时调用;
4.5 实时监视
14. CLIENT_API LONG CLIENT_RealPlay(LONG lLoginID, int
nChannelID, HWND hWnd); 函数说明:启动实时监视 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelID
实时监视通道号(通道号从0开始)
hWnd
窗口句柄,值为0对数据不解码、不显示图像
返回值:失败返回0,成功返回实时监视ID(实时监视句柄),将作为相关函
数的参数
相关函数:CLIENT_StopRealPlay、CLIENT_SaveRealData、
CLIENT_StopSaveRealData、CLIENT_ClientSetVideoEffect、CLIENT_ClientGetVideoEffect、CLIENT_OpenSound、CLIENT_CloseSound、CLIENT_SetVolume、CLIENT_SetRealDataCallBack、CLIENT_SetRealDataCallBackEx、CLIENT_CapturePicture、CLIENT_StartTalk、CLIENT_StopTalk
典型应用:根据登录时获取到的设备信息,调用本接口,就可以打开任何有效的
一路实时监视,显示到指定的hWnd窗口,正常返回的监视ID,用于以下对本监视通道的控制和操作;
15. CLIENT_API BOOL CLIENT_StopRealPlay(LONG lRealHandle); 函数说明:停止实时监视 参数说明:
lRealHandle
CLIENT_RealPlay的返回值
16.
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_RealPlay 典型应用:关闭失实监视
CLIENT_API LONG CALL_METHOD CLIENT_RealPlayEx(LONG lLoginID, int nChannelID, HWND hWnd, RealPlayType rType)
函数说明:启动实时监视或多画面预览,当打开多画面预览时不能打开语音
对讲
参数说明:
lLoginID
CLIENT_Login的返回值 nChannelID
实时监视通道号,如果rType为RType_Multiplay该参数保留。 hWnd
窗口句柄,值为0对数据不解码、不显示图像
rType
数据类型
RType_Realplay = 0, RType_Multiplay=1,
//实时预览
//多画面预览
返回值:失败返回0,成功返回实时监视ID(实时监视句柄),将作为相关函
数的参数
相关函数:CLIENT_StopRealPlayEx、CLIENT_SaveRealData、
CLIENT_StopSaveRealData、CLIENT_ClientSetVideoEffect、CLIENT_ClientGetVideoEffect、CLIENT_OpenSound、CLIENT_CloseSound、CLIENT_SetVolume、CLIENT_SetRealDataCallBack、CLIENT_SetRealDataCallBackEx、CLIENT_CapturePicture、CLIENT_StartTalk、CLIENT_StopTalk
典型应用:参见demo程序
17. CLIENT_API BOOL CALL_METHOD CLIENT_StopRealPlayEx(LONG
lRealHandle); 函数说明:停止实时监视或多画面预览 参数说明:
lRealHandle
CLIENT_RealPlayEx的返回值
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_RealPlayEx
典型应用:关闭实时监视或者多画面预览 18. CLIENT_API BOOL CLIENT_ClientGetVideoEffect(LONG
lPlayHandle, unsigned char *nBrightness, unsigned char *nContrast, unsigned char *nHue, unsigned char *nSaturation); 函数说明:获取解码库视频参数,只有打开图像的函数参数hWnd有效时该函数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_RealPlay的返回值
nBrightness
返回亮度指针(0-255) nContrast
返回对比度指针(0-255) nHue
返回色度指针(0-255)
nSaturation
返回饱和度指针(0-255)
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_ClientSetVideoEffect、CLIENT_RealPlay、
CLIENT_RealPlayEx
、
CLIENT_PlayBackByRecordFile
、
CLIENT_PlayBackByRecordFileExCLIENT_PlayBackByTimeEx
、CLIENT_PlayBackByTime、
典型应用:在打开监视通道后获取该监视的视频参数,初始化界面显示当前的
视频状态,同时为以下视频参数调节做参考; 19. CLIENT_API BOOL CLIENT_ClientSetVideoEffect(LONG
lPlayHandle, unsigned char nBrightness, unsigned char nContrast, unsigned char nHue, unsigned char nSaturation); 函数说明:设置解码库视频参数,只有打开图像的函数参数hWnd有效时该函数获取的参数才有效,否则无意义 参数说明:
lRealHandle
CLIENT_RealPlay的返回值
nBrightness
亮度(0-255)
nContrast
对比度(0-255)
nHue
色度(0-255) nSaturation
饱和度(0-255)
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_ClientGetVideoEffect,CLIENT_RealPlay、
CLIENT_RealPlayEx、CLIENT_PlayBackByRecordFileCLIENT_PlayBackByRecordFileEx、CLIENT_PlayBackByTimeCLIENT_PlayBackByTimeEx
、、
典型应用:根据需要可以调节视频参数;设置参数是4种参数一起设,所以如
果更改单个也要求其他参数值正常;所以在应用中最好定义视频参数变量以供随时更改设置;
4.6 音频控制
20. CLIENT_API BOOL CLIENT_OpenSound(LONG hPlayHandle) 函数说明:打开音频, 目前只支持独占方式打开音频,如果正在调用此函数
之前音频已经打开并且hPlayHandle是不一样,则关闭原来的音频打开新的音频;函数只有在打开hPlayHandle的函数的参数hWnd有效时才生效。 参数说明:
hPlayHandle
CLIENT_RealPlay的返回值
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_CloseSound、CLIENT_RealPlay、CLIENT_RealPlayEx、
CLIENT_PlayBackByRecordFile、CLIENT_PlayBackByRecordFileEx、CLIENT_PlayBackByTime、CLIENT_PlayBackByTimeEx
典型应用:对音频,目前只支持独占方式,所以在应用程序中需要定义当前
有效的音频通道。
21. CLIENT_API BOOL CLIENT_CloseSound(); 22.
函数说明:关闭音频 参数说明:无
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_OpenSound 典型应用:关闭当前的音频;
CLIENT_API BOOL CLIENT_SetVolume(LONG lPlayHandle, int nVolume);
函数说明:设置音量 参数说明:
lPlayHandle
CLIENT_RealPlay的返回值
nVolume
音量值, 范围0 ~ 100 0音量最小
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_OpenSound、CLIENT_CloseSound、CLIENT_RealPlay、
CLIENT_RealPlayEx、CLIENT_PlayBackByRecordFileCLIENT_PlayBackByRecordFileEx、CLIENT_PlayBackByTimeCLIENT_PlayBackByTimeEx
、、
典型应用:修改实时监视或回放的音量值
4.7 数据保存
23. CLIENT_API BOOL CLIENT_SaveRealData(LONG lRealHandle,
const char *pchFileName); 函数说明:开始保存实时监视数据,对前端设备监视的图像进行数据保存,形成
录像文件,此数据是设备端传送过来的原始视频数据 参数说明:
lRealHandle
CLIENT_RealPlay的返回值 pchFileName
实时监视保存文件名
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_StopSaveRealData、CLIENT_RealPlay、
CLIENT_RealPlayEx
典型应用:在监视图像的打开之后随时都可以调用将监视数据保存到文件,
也可以关闭之后再打开形成不同的文件; 24. CLIENT_API BOOL CLIENT_StopSaveRealData(LONG
lRealHandle); 函数说明:停止保存实时监视数据,关闭保存的文件
参数说明:
lRealHandle
CLIENT_RealPlay的返回值
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_SaveRealData、CLIENT_RealPlay、CLIENT_RealPlayEx 典型应用:停止保存监视数据;
typedef void(CALLBACK *fRealDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, DWORD dwUser);
25. CLIENT_API BOOL CLIENT_SetRealDataCallBack(LONG lRealHandle, fRealDataCallBack cbRealData, DWORD dwUser); 函数说明:设置实时监视数据回调,给用户提供设备流出的数据,当
cbRealData为NULL时结束回调数据 参数说明:
lRealHandle
CLIENT_RealPlay的返回值
cbRealData
回调函数,用于传出设备流出的实时数据
dwUser
用户数据
回调函数参数说明: lRealHandle
CLIENT_RealPlay的返回值
dwDataType
标识回调出来的数据类型, 一旦设置回调,是以下4种数据都会同时回调出来,用户可以根据需要有选择的处理部分数据; 0 原始数据(与SaveRealData保存的数据一致) 1 标准视频数据 2 yuv数据
3 pcm音频数据 pBuffer
回调数据,根据数据类型的不同每次回调不同的长度的数据,除类型0, 其他数据类型都是按帧,每次回调一帧数据 dwBufSize
回调数据的长度 dwUser
用户数据,就是上面输入的用户数据
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_RealPlay、CLIENT_RealPlayEx、CLIENT_StopRealPlay 典型应用:通过调用本接口可以比较自如的获取实时监视数据,用来保存成文
件,也可以用来数据分发多路窗口显示及实现其他功能;
typedef void(CALLBACK *fRealDataCallBackEx)(LONG lRealHandle, DWORD
dwDataType, BYTE *pBuffer, DWORD dwBufSize, LONG param, DWORD dwUser);
26.
CLIENT_API BOOL CLIENT_SetRealDataCallBackEx(LONG lRealHandle, fRealDataCallBackEx cbRealData, DWORD dwUser, DWORD dwFlag);
函数说明:设置实时监视数据回调扩展接口 ,是对上一接口的补充, 增加一个
回调数据类型标志dwFlag 参数, 可以选择性的回调出需要的数据, 对于没设置回调的数据类型就不回调出来了, 当设置为0x1f时与上一接口效果一样, 不过对回调函数也做了扩展。 参数说明:
lRealHandle
CLIENT_RealPlay的返回值
cbRealData
回调函数,用于传出多种类型的实时数据
dwUser
用户数据 dwFlag
是按位来的, 可以组合, 为0x1f时五种数据类型都回调 0x00000001 等同原来的原始数据
0x00000002 是MPEG4/H264标准数据 0x00000004 YUV数据 0x00000008 PCM数据 0x00000010 原始音频数据
回调函数参数说明:
lRealHandle
实时监视ID
dwDataType
标识回调出来的数据类型, 只有dwFlag设置标识的数据才会回调出来: 0 原始数据(与SaveRealData保存的数据一致) 1 标准视频数据 2 yuv数据 3 pcm音频数据 4 原始音频数据 pBuffer
回调数据,根据数据类型的不同每次回调不同的长度的数据,除类型0, 其他数据类型都是按帧,每次回调一帧数据 param
回调数据参数结构体, 根据不同的类型, 参数结构也不一致, 当类型为0 (原始数据)和 2/4(音频数据时) 为0;
当回调的数据类型为标准视频数据时param为一个结构体指针:
Typedef struct tagVideoFrameParam {
BYTE encode; // 编码类型
BYTE frametype; // I = 0, P = 1, B = 2... BYTE format; // PAL - 0, NTSC - 1
BYTE size; // CIF - 0, HD1 - 1, 2CIF - 2, D1 - 3,
VGA - 4, QCIF - 5, QVGA - 6 DWORD fourcc; // 如果是H264编码则总为0,MPEG4这里是填写
FOURCC('X','V','I','D'); DWORD reserved; // 保留 };
当数据类型是PCM数据的时候param也是一个结构体指针:
Typedef struct tagPCMDataParam {
BYTE channels; // 声道数 BYTE samples; // 采样 0 - 8000, 1 - 11025, 2 - 16000, 3 - 22050,
4 - 32000, 5 - 44100, 6 - 48000 BYTE depth; // 采样深度 取值8或者16等。直接表示 BYTE param1; // 0 - 指示无符号,1-指示有符号 DWORD reserved; // 保留
};
dwBufSize
回调数据的长度, 根据不同的类型, 长度也不同 dwUser
用户数据,就是上面输入的用户数据
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_RealPlay、CLIENT_RealPlayEx、CLIENT_StopRealPlay 典型应用:同CLIENT_SetRealDataCallBack函数
4.8 视频抓图
27. CLIENT_API BOOL CLIENT_CapturePicture(LONG hPlayHandle,
const char *pchPicFileName); 函数说明:保存图片,对显示图像进行瞬间抓图,只有打开图像的函数参数
hWnd有效时该函数获取的参数才有效,否则无意义 参数说明:
hPlayHandle
CLIENT_RealPlay的返回值 pchPicFileName
位图文件名,当前只支持BMP位图
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_RealPlay、
CLIENT_RealPlayEx、
CLIENT_PlayBackByRecordFile、CLIENT_PlayBackByRecordFileEx、CLIENT_PlayBackByTime、CLIENT_PlayBackByTimeEx
典型应用:对当前的显示画面进行瞬间抓图,无顺序要求
4.9 回放和下载
28. CLIENT_API BOOL CLIENT_QueryRecordFile(LONG lLoginID, int
nChannelId, int nRecordFileType, LPNET_TIME tmStart, LPNET_TIME tmEnd, char* pchCardid, LPNET_RECORDFILE_INFO nriFileinfo, int maxlen, int *filecount, int waittime=1200, bool bTime=false); 函数说明:查询录像文件 参数说明:
lLoginID
CLIENT_Login的返回值 nChannelId
通道ID,从0开始 nRecordFileType
录像文件类型 0 所有录像文件 1 外部报警 2 动态检测报警 3 所有报警 4 卡号查询 5 组合条件查询 tmStart
录像开始时间 tmEnd
录像结束时间
pchCardid
卡号,只针对卡号查询有效 nriFileinfo
返回的录像文件信息,是一个NET_RECORDFILE_INFO结构数组 maxlen
nriFileinfo缓冲的最大长度;
filecount
返回的文件个数,属于输出参数最大只能查到缓冲满为止的录像记录; waittime
等待时间
bTime
是否按时间查(目前无效)
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_Login、CLIENT_PlayBackByRecordFile、
CLIENT_PlayBackByRecordFileEx
、
CLIENT_PausePlayBack
、
CLIENT_SeekPlayBack、CLIENT_StopPlayBackCLIENT_GetPlayBackOsdTime、CLIENT_StepPlayBackCLIENT_GetFramePlayBack、CLIENT_SetFramePlayBackCLIENT_SlowPlayBack、CLIENT_FastPlayBack
、、、
典型应用:在回放之前需要先调用本接口查询录像记录,当根据输入的时间段
查询到的录像记录信息大于定义的缓冲区大小,则只返回缓冲所能存放的录像记录,可以根据需要继续查询
typedef void(CALLBACK *fDownLoadPosCallBack) (LONG lPlayHandle, DWORD dwTotalSize, DWORD dwDownLoadSize, DWORD dwUser);
29. CLIENT_API LONG CLIENT_PlayBackByRecordFile(LONG
lLoginID, LPNET_RECORDFILE_INFO lpRecordFile, HWND hWnd, fDownLoadPosCallBack cbDownLoadPos, DWORD dwUserData); 函数说明:网络回放,需要说明的是,用户登录一台设备后,每通道同一时间
只能播放一则录像,不能同时播放同一通道的多条记录。 参数说明:
lLoginID
CLIENT_Login的返回值
lpRecordFile
录像文件信息, 当按时间播放是只需填充起始时间和结束时间, 其他项填0;
hWnd
回放窗口
cbDownLoadPos
进度回调函数 dwUserData
用户自定义数据
回调函数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
dwTotalSize
指本次播放总大小,单位为KB dwDownLoadSize
指已经播放的大小,单位为KB,当其值为-1时表示本次回防结束 dwUser
用户数据,就是上面输入的用户数据
返回值:成功返回网络回放ID,失败返回0 相关函数:CLIENT_Login、CLIENT_PausePlayBack,CLIENT_SeekPlayBack,
CLIENT_StopPlayBack、CLIENT_GetPlayBackOsdTime、
CLIENT_StepPlayBack、CLIENT_GetFramePlayBack、CLIENT_SetFramePlayBack、CLIENT_SlowPlayBack、CLIENT_FastPlayBack
典型应用:根据上面查询的记录,输入指定的显示窗口hWnd,调用本接口就可
以播放了, 记录返回的播放ID,以下对本播放的控制都是要用此ID值,另外应用程序可以在此回调函数中处理和更新显示进度.
以下29、30、31为一组录像查询接口,和上面的录像查询接口独立
30. CLIENT_API LONG CALL_METHOD CLIENT_FindFile(LONG
lLoginID,int nChannelId,int nRecordFileType, char* cardid, LPNET_TIME time_start,LPNET_TIME time_end,bool bTime, int waittime); 函数说明:打开录像查询句柄 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelId
通道号,从0开始 nRecordFileType 录像文件类型 0 所有录像文件 1 外部报警 2 动态检测报警 3 所有报警 4 卡号查询 5 组合条件查询 Cardid
卡号,只针对卡号查询有效 Time_start
查询录像开始时间 Time_end
查询录像结束时间
bTime
是否按时间查询(目前无效)
waittime
查询超时时间
返回值:成功返回查询句柄,失败返回0
相关函数:CLIENT_Login, CLIENT_FindNextFile, CLIENT_FindClose 典型应用:可以在回放之前先调用本接口查询录像记录,再调用
CLIENT_FindNextFile函数挨条返回录象记录用于播放,查询完毕可以调用CLIENT_FindClose关闭查询句柄。 31. CLIENT_API int CALL_METHOD CLIENT_FindNextFile(LONG
lFindHandle,LPNET_RECORDFILE_INFO lpFindData); 函数说明:查询下一条录像文件记录
参数说明:
lFindHandle
CLIENT_FindFile的返回值
lpFindData
录象文件记录缓冲,用于输出查询到的录象文件记录
返回值:1:成功取回一条录象记录,0:录象记录已取完,-1:参数出错 相关函数:CLIENT_FindFile
典型应用:调用本接口之前应先调用CLIENT_FindFile以打开查询句柄。 32. CLIENT_API BOOL CALL_METHOD CLIENT_FindClose(LONG
lFindHandle); 函数说明:关闭录象查询句柄 参数说明:
lFindHandle
CLIENT_FindFile的返回值
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_FindFile
典型应用:调用CLIENT_FindFile打开查询句柄,查询完毕后应调用本函数
以关闭查询句柄。 33. CLIENT_API LONG CALL_METHOD
CLIENT_PlayBackByRecordFileEx(LONG lLoginID, LPNET_RECORDFILE_INFO lpRecordFile, HWND hWnd, fDownLoadPosCallBack cbDownLoadPos, DWORD dwPosUser, fDataCallBack fDownLoadDataCallBack, DWORD dwDataUser); 函数说明:带数据回调的按录象文件回放扩展接口,每通道同一时间只能播放
一则录像,不能同时播放同一通道的多条记录。窗口参数(hWnd)有效时不回调数据,如果需要数据回调则窗口参数.(hWnd)必须传0。 参数说明:
lLoginID
CLIENT_Login的返回值
lpRecordFile
录像文件信息
hWnd
回放窗口
cbDownLoadPos
进度回调函数
dwPosUser
进度回调用户参数
进度回调函数参数说明:参见CLIENT_PlayBackByRecordFile
dwDataUser
数据回调用户
数据回调函数参数说明:
lRealHandle
CLIENT_PlayBackByRecordFileEx的返回值
dwDataType
这里为0(原始数据)
pBuffer
数据缓冲
dwBufSize
缓冲长度
fDownLoadDataCallBack
数据回调函数,原形参见典型应用
dwUser
用户数据,就是上面输入的用户数据dwDataUser
【注意】 本回调函数的返回值会影响SDK的内部操作:
返回1 代表回调成功,没什么特殊情况都应该返回这个值
返回0 代表回调函数堵塞,这个会导致同一数据重复发送,即回放画面会出现重复 返回-1 代表系统出错,将直接结束回放线程,慎用!
返回值:成功返回网络回放ID,失败返回0 相关函数:CLIENT_Login、CLIENT_PausePlayBack,CLIENT_SeekPlayBack、
CLIENT_StopPlayBack、CLIENT_GetPlayBackOsdTime、
CLIENT_StepPlayBack、CLIENT_GetFramePlayBack、CLIENT_SetFramePlayBack、CLIENT_SlowPlayBack、CLIENT_FastPlayBack
典型应用:如果窗口参数hWnd不为零,则数据回调参数
(fDownLoadDataCallBack,dwDataUser)无效,如果窗口参数hWnd为零,则回调原形为:
typedef int(CALLBACK *fDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, DWORD dwUser);
34. CLIENT_API LONG CALL_METHOD CLIENT_PlayBackByTime(LONG
lLoginID, int nChannelID, LPNET_TIME lpStartTime, LPNET_TIME lpStopTime, HWND hWnd, fDownLoadPosCallBack cbDownLoadPos, DWORD dwUserData); 函数说明:网络回放,需要说明的是对同一设备的同一通道当前只能同时播放
一个时间段录像 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelID
图像通道号,从0开始,必须指定
lpStartTime
开始时间
lpStopTime
结束时间
hWnd
回放窗口
cbDownLoadPos
进度回调函数
dwUserData
用户自定义数据
进度回调函数参数说明:参见CLIENT_PlayBackByRecordFile
返回值:成功返回网络回放ID,失败返回0 相关函数:CLIENT_Login、CLIENT_PausePlayBack,CLIENT_SeekPlayBack、
CLIENT_StopPlayBack、CLIENT_GetPlayBackOsdTime、
CLIENT_StepPlayBack、CLIENT_GetFramePlayBack、CLIENT_SetFramePlayBack、CLIENT_SlowPlayBack、CLIENT_FastPlayBack
典型应用:参见demo
35. CLIENT_API LONG CALL_METHOD CLIENT_PlayBackByTimeEx(LONG lLoginID, int nChannelID, LPNET_TIME lpStartTime, LPNET_TIME lpStopTime, HWND hWnd, fDownLoadPosCallBack cbDownLoadPos, DWORD dwPosUser, fDataCallBack fDownLoadDataCallBack, DWORD dwDataUser); 函数说明:带数据回调的按时间回放扩展接口, 每通道同一时间只能播放一
则录像,不能同时播放同一通道的多条记录。窗口参数(hWnd)有效时不回调数据,如果需要数据回调则窗口参数.(hWnd)必须传0。 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelID
图像通道号,必须指定
lpStartTime
开始时间
lpStopTime
结束时间
hWnd
回放窗口
cbDownLoadPos
进度回调函数
dwPosUser
进度回调用户参数
进度回调函数参数说明:参见CLIENT_PlayBackByRecordFile
fDownLoadDataCallBack
数据回调函数
dwDataUser
数据回调用户
数据回调函数参数说明参见:CLIENT_PlayBackByRecordFileEx的数据回调
函数参数说明。
【注意】 本回调函数的返回值会影响SDK的内部操作:
返回1 代表回调成功,没什么特殊情况都应该返回这个值。
返回0 代表回调函数堵塞,这个会导致同一数据重复发送,即回放画面会出现重复; 返回-1 代表系统出错,将直接结束回放线程,慎用!
返回值:成功返回网络回放ID,失败返回0 相关函数:CLIENT_Login、CLIENT_PausePlayBack,CLIENT_SeekPlayBack,
CLIENT_StopPlayBack、CLIENT_GetPlayBackOsdTime、
CLIENT_StepPlayBack、CLIENT_GetFramePlayBack、CLIENT_SetFramePlayBack、CLIENT_SlowPlayBack、CLIENT_FastPlayBack
典型应用:如果窗口参数hWnd不为零,则数据回调参数(fDownLoadDataCallBack,dwDataUser)无效,如果窗口参数hWnd为零,则回调原形为:
typedef int(CALLBACK *fDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, DWORD dwUser);
参见demo
36. CLIENT_API BOOL CLIENT_StopPlayBack(LONG lPlayHandle); 函数说明:网络回放停止 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_PlayBackByRecordFile
CLIENT_PlayBackByRecordFileEx
CLIENT_PlayBackByTimeEx
、
CLIENT_PlayBackByTime
、、
典型应用:输入上一接口返回的播放ID,调用本接口就可以停止控制 37. CLIENT_API BOOL CLIENT_GetPlayBackOsdTime(LONG
lPlayHandle, LPNET_TIME lpOsdTime, LPNET_TIME lpStartTime, LPNET_TIME lpEndTime);
函数说明:得到当前网络回放的OSD时间,只有打开图像的函数参数hWnd
有效时该函数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
lpOsdTime
OSD的时间
lpStartTime
开始时间
lpEndTime
结束时间
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_PlayBackByRecordFile
CLIENT_PlayBackByRecordFileEx
CLIENT_PlayBackByTimeEx
、
CLIENT_PlayBackByTime
、、
参见demo
38. CLIENT_API LONG CLIENT_DownloadByRecordFile(LONG
lLoginID, LPNET_RECORDFILE_INFO lpRecordFile, char *sSavedFileName, fDownLoadPosCallBack cbDownLoadPos, DWORD dwUserData); 函数说明:下载录像文件, 通过查询到的文件信息下载 参数说明:
lLoginID
CLIENT_Login的返回值
lpRecordFile
录像文件信息指针, 当需要按时间段下载时直接填充开始时间和结束时间, 其他项填0 sSavedFileName
要保存的录像文件名,全路径
cbDownLoadPos
下载进度回调函数
dwUserData
下载进度回调用户自定义数据
下载进度回调函数参数说明:参见CLIENT_PlayBackByRecordFile
返回值:成功返回下载ID,失败返回0
相关函数:CLIENT_QueryRecordFile、CLIENT_StopDownload,
CLIENT_GetDownloadPos 典型应用:根据上面查询的记录,就可以将录像保存到指定的文件,下载进度回
调与回放进度类似
39. CLIENT_API LONG CALL_METHOD CLIENT_DownloadByTime(LONG
lLoginID, int nChannelId, int nRecordFileType, LPNET_TIME tmStart, LPNET_TIME tmEnd, char *sSavedFileName, fTimeDownLoadPosCallBack cbTimeDownLoadPos, DWORD dwUserData); 函数说明:直接输入指定通道起始时间和结束时间下载放录像 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelId
图像通道号,从0开始
nRecordFileType
保留
tmStart
开始时间
tmEnd
结束时间
sSavedFileName
要保存的录像文件名,全路径
cbTimeDownLoadPos
下载进度回调函数
dwUserData
下载进度回调用户自定义数据
下载进度回调函数参数说明参见CLIENT_PlayBackByRecordFile
返回值:成功返回下载ID,失败返回0
相关函数:CLIENT_StopDownload,CLIENT_GetDownloadPos 典型应用:参见demo
40. CLIENT_API BOOL CLIENT_StopDownload(LONG lFileHandle); 函数说明:停止下载录像文件 参数说明:
lFileHandle
CLIENT_DownloadByRecordFile的返回值
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_DownloadByRecordFile、CLIENT_GetDownloadPos、
CLIENT_DownloadByTime 典型应用:根据需要可以等文件下载完了关闭下载,也可以下载到一部分停止
下载;
41. CLIENT_API BOOL CLIENT_GetDownloadPos(LONG lFileHandle,
int *nTotalSize, int *nDownLoadSize); 函数说明:获得下载录像的当前位置,可以用于不需要实时显示下载进度的接
口,与下载回调函数的功能类似 参数说明:
lFileHandle
CLIENT_DownloadByRecordFile的返回值
nTotalSize
下载的总长度 nDownLoadSize
已下载的长度
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_DownloadByRecordFile、CLIENT_StopDownload、
CLIENT_DownloadByTime
典型应用:用于不打算通过回调计算进度,可定时调用本接口获取当前进度;
4.10 回放控制
42. CLIENT_API BOOL CLIENT_PausePlayBack(LONG lPlayHandle,
BOOL bPause); 函数说明:网络回放暂停与恢复播放,只有打开图像的函数参数hWnd有效
时该函数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
bPause
网络回放暂停与恢复播放参数
1 暂停
0 恢复
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_PlayBackByRecordFile、
CLIENT_PlayBackByRecordFileEx、CLIENT_PlayBackByTime、
CLIENT_PlayBackByTimeEx、CLIENT_SeekPlayBack、CLIENT_StopPlayBack
典型应用:对已经打开的播放进行暂停和恢复控制
43. CLIENT_API BOOL CLIENT_SeekPlayBack(LONG lPlayHandle,
unsigned int offsettime, unsigned int offsetbyte); 函数说明:改变位置播放,即拖动播放,只有打开图像的函数参数hWnd有效
时该函数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
offsettime
相对文件开始处偏移时间,单位为秒 .当其值为0xffffffff时,该参数无效. offsetbyte
相对文件开始处偏移字节, 当其值为0xffffffff时, 该参数无效;当
offsettime有效的时候,此参数无意义.
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_PlayBackByRecordFile
、
CLIENT_PlayBackByRecordFileEx、CLIENT_PlayBackByTime、CLIENT_PlayBackByTimeEx,CLIENT_SeekPlayBack,CLIENT_StopPlayBack
典型应用:对已经打开的播放进行定位播放控制,一般用于拖动进度条控制 44. CLIENT_API BOOL CLIENT_StepPlayBack(LONG lPlayHandle,
bool bStop);
函数说明:单步播放, 调用一次播放一帧图像,只有打开图像的函数参数
hWnd有效时该函数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
bStop
是否停止单步播放, 在结束单步时调用
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_PlayBackByRecordFile、
CLIENT_PlayBackByRecordFileEx
CLIENT_PlayBackByTimeEx
、
CLIENT_PlayBackByTime
、
典型应用:用于对关键数据的单帧播放, 并且bStop要设置为TRUE,切换到
其他播放之前要再调用本接口关闭单步播放才能正常执行其他的播放模式 45. CLIENT_API BOOL CLIENT_FastPlayBack(LONG lPlayHandle); 函数说明:快放,将当前帧率提高一倍,但是不能无限制的快放,目前最大120,
大于时返回FALSE, 有音频的话不可以快放,慢放没有问题,只有打开图像的函数参数hWnd有效时该函数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_SlowPlayBack,CLIENT_PlayBackByRecordFile、
CLIENT_PlayBackByRecordFileExCLIENT_PlayBackByTimeEx
、
CLIENT_PlayBackByTime
、
典型应用:要求快镜头播放的情况
46. CLIENT_API BOOL CLIENT_SlowPlayBack(LONG lPlayHandle); 函数说明:慢放,将当前帧率降低一倍,最慢为每秒一帧,小于1则返回FALSE,
只有打开图像的函数参数hWnd有效时该函数获取的参数才有效,否则无意义
参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_FastPlayBack,CLIENT_PlayBackByRecordFile、
CLIENT_PlayBackByRecordFileExCLIENT_PlayBackByTimeEx
、
CLIENT_PlayBackByTime
、
典型应用:要求慢动作播放的情况
47. CLIENT_API BOOL CLIENT_SetFramePlayBack(LONG lPlayHandle,
int framerate); 函数说明:设置回放帧率, 目前定义的范围是(1~120),超过这个范围返回
FALSE,只有打开图像的函数参数hWnd有效时该函数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
framerate
帧率
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_GetFramePlayBack、CLIENT_PlayBackByRecordFile、
CLIENT_PlayBackByRecordFileExCLIENT_PlayBackByTimeEx
、
CLIENT_PlayBackByTime
、
典型应用:自设定帧率播放,
48. CLIENT_API BOOL CLIENT_GetFramePlayBack(LONG lPlayHandle,
int *fileframerate, int *playframerate); 函数说明:得到当前回放帧率,只有打开图像的函数参数hWnd有效时该函
数获取的参数才有效,否则无意义 参数说明:
lPlayHandle
CLIENT_PlayBackByRecordFile的返回值
playframerate
返回的帧率
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_SetFramePlayBack、CLIENT_PlayBackByRecordFile、
CLIENT_PlayBackByRecordFileExCLIENT_PlayBackByTimeEx
、
CLIENT_PlayBackByTime
、
典型应用:与上一接口对应,获取当前的播放帧率, 对单帧播放是无效,或获取
的为之前的播放帧率;
4.11 云台控制
49. CLIENT_API BOOL CLIENT_PTZControl(LONG lLoginID, int
nChannelID, DWORD dwPTZCommand, DWORD dwStep, BOOL dwStop); 函数说明:云台控制 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelID
通道号
dwPTZCommand
支持以下云台控制命令
typedef enum PTZ_ControlType{
PTZ_UP_CONTROL = 0,
//上
PTZ_DOWN_CONTROL, PTZ_LEFT_CONTROL, PTZ_RIGHT_CONTROL, PTZ_ZOOM_ADD_CONTROL, PTZ_ZOOM_DEC_CONTROL, PTZ_FOCUS_ADD_CONTROL, PTZ_FOCUS_DEC_CONTROL, PTZ_APERTURE_ADD_CONTROL, PTZ_APERTURE_DEC_CONTROL, PTZ_POINT_MOVE_CONTROL, PTZ_POINT_SET_CONTROL, PTZ_POINT_DEL_CONTROL, PTZ_POINT_LOOP_CONTROL, PTZ_LAMP_CONTROL };
//下 //左 //右 //变倍+ //变倍- //调焦+ //调焦- //光圈+ //光圈-
//转至预置点 //设置 //删除 //点间轮循 //灯光雨刷
dwStep
步进/速度,范围1~8, 8控制效果最明显,操作预置点时dwStep为预置点值 dwStop
是否停止,预置点操作及以下的命令为FALSE 返回值: 成功返回TRUE,失败返回FALSE 相关函数:CLIENT_Login
典型应用: 对连接设备进行云台控制,通常的应用是打开监视通道,可以看到
画面云台控制的效果,而且必须设置更改前端设备的云台控制配置成对应的协议才能生效;
50. CLIENT_API BOOL CLIENT_DHPTZControl(LONG lLoginID, int
nChannelID, DWORD dwPTZCommand, unsigned char param1, unsigned char param2, unsigned char param3, BOOL dwStop); 函数说明:扩展云台控制, 对云台控制函数功能的增强控制;对具体命令定义
和参数的有效性需参见接口文档; 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelID
通道号
dwPTZCommand
球机控制命令, 兼容上一接口, param2相当于参数dwStep, 同时扩展支持以下功能
typedef enum EXTPTZ_ControlType{
EXTPTZ_LEFTTOP = 0X20, EXTPTZ_RIGHTTOP , EXTPTZ_LEFTDOWN , EXTPTZ_RIGHTDOWN,
//左上 p1水平速度, p2垂直速度 //右上 p1水平速度, p2垂直速度 //左下p1水平速度, p2垂直速度 //右下p1水平速度, p2垂直速度
EXTPTZ_ADDTOLOOP, EXTPTZ_DELFROMLOOP, EXTPTZ_CLOSELOOP, EXTPTZ_STARTPANCRUISE, EXTPTZ_STOPPANCRUISE, EXTPTZ_SETLEFTBORDER, EXTPTZ_RIGHTBORDER , EXTPTZ_STARTLINESCAN, EXTPTZ_CLOSELINESCAN, EXTPTZ_SETMODESTART, EXTPTZ_SETMODESTOP, EXTPTZ_RUNMODE, EXTPTZ_STOPMODE, EXTPTZ_DELETEMODE, EXTPTZ_REVERSECOMM, EXTPTZ_FASTGOTO, EXTPTZ_AUXIOPEN, EXTPTZ_AUXICLOSE, EXTPTZ_OPENMENU = 0X36, EXTPTZ_CLOSEMENU , EXTPTZ_MENUOK, EXTPTZ_MENUCANCEL, EXTPTZ_MENUUP, EXTPTZ_MENUDOWN, EXTPTZ_MENULEFT, EXTPTZ_MENURIGHT, EXTPTZ_TOTAL, };
//加入预置点到巡航 p1巡航线路 p2预置点值//删除巡航中预置点 p1巡航线路 p2预置点值//清除巡航 p1巡航线路 //开始水平旋转 //停止水平旋转 //设置左边界 //设置右边界 //开始线扫 //停止线扫
//设置模式开始 模式线路 //设置模式结束 模式线路 //运行模式 p1模式线路 //停止模式 p1模式线路 //清除模式 p1模式线路 //翻转命令
//快速定位 p1水平坐标 p2垂直坐标 p3变倍 //x34 辅助开关开 p1辅助点 //0x35 辅助开关关 p1辅助点 //打开球机菜单 //关闭菜单 //菜单确定 //菜单取消 //菜单上 //菜单下 //菜单左 //菜单右 //最大命令值
param1
参数1 具体是否有效见上表
param2
参数2
param3
参数3
dwStop
是否停止, 通用命令与上一接口CLIENT_PTZControl同, 扩展命令只有前四个有效, 其他的无效,都应该设为False;
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_PTZControl
典型应用:对上一接口功能扩展,必须设备所接云台或球机支持, 如大华球机
可以支持上面所有功能;
4.12 实时预览
51. CLIENT_API LONG CLIENT_MultiPlay(LONG lLoginID, HWND
hWnd);
函数说明:多画面预览, 目前大华HB的机器暂时不支持本功能 参数说明:
lLoginID
CLIENT_Login的返回值
hWnd
多画面预览窗口,可以设置为0,为不显示
返回值:成功返回多画面预览ID,失败返回0 相关函数:CLIENT_StopMultiPlay
典型应用:直接选定设备,调用本接口就可以将设备当前的预览画面
显示到窗口hWnd
52. CLIENT_API BOOL CLIENT_StopMultiPlay(LONG lMultiHandle); 函数说明:停止多画面预览 参数说明:
lMultiHandle
CLIENT_MultiPlay返回值
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_MultiPlay 典型应用:停止多画面预览显示
4.13 系统配置
53. CLIENT_API BOOL CLIENT_QueryConfig(LONG lLoginID, int
nConfigType, char *pConfigbuf, int maxlen, int *nConfigbuflen, int waittime=2000); 函数说明:获取设备配置信息 参数说明:
lLoginID
CLIENT_Login的返回值
nConfigType
配置类型 0 普通设置 1 COM口设置 2 网络设置 3 定时设置 4 图像设置 5 PTZ设置 6 动态检测设置
7 报警设置 11 邮件名称 13 pppoe配置 14 DDNS 设置 200 第三方接入配置 pConfigbuf
配置的接收缓冲区, 根据不同的配置信息,构和数据长度也不一致; maxlen
配置的接收缓冲区最大长度 nConfigbuflen
收到的配置包长度 waittime
等待时间
【注意】 maxlen不够大会导致接收配置失败
nConfigType超出范围也会导致接收配置失败
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_SetupConfig、CLIENT_Login 典型应用:获取前端设备的配置信息,然后根据需要显示到页面上,目前用配套
的配置控件代替用户设计显示页面,不过控件在打开时通过事件逐个调用获取各种类型的配置信息,具体见配置控制说明;
54. CLIENT_API BOOL CLIENT_SetupConfig(LONG lLoginID, int
nConfigType, char *pConfigbuf, int nConfigbuflen, int waittime=2000); 函数说明:设置配置,与上同 参数说明:
lLoginID
CLIENT_Login的返回值
nConfigType
配置类型 0 普通设置 1 COM口设置 2 网络设置 3 定时设置 4 图像设置 5 PTZ设置 6 动态检测设置 7 报警设置 11 邮件名称 13 pppoe配置 14 DDNS 设置 200 第三方接入配置
pConfigbuf
设置配置缓冲区
nConfigbuflen
设置配置包长度 waittime
等待时间
返回值:成功返回TRUE, 失败返回FALSE
相关函数:CLIENT_QueryConfig、CLIENT_Login
典型应用:与上一接口对应,暂时应用配置控件的设置事件来实现;
55. CLIENT_API BOOL CLIENT_QueryChannelName(LONG lLoginID,
char *pChannelName, int maxlen, int *nChannelCount, int waittime=2000); 函数说明:查询设备的通道名称 参数说明:
lLoginID
CLIENT_Login的返回值
pChannelName
通道名缓冲区
pChannelName
[通道数][32]
maxlen
缓冲区长度
nChannelCount
总共通道数
waittime
等待时间
返回值:成功返回TRUE,失败返回FALSE, 输入缓冲区长度不够也 返回
FALSE;
相关函数:CLIENT_SetupChannelName 典型应用:在连接设备后获取,可以用来自定义显示到画面上,也可用来标注当
前画面的信息;
56. CLIENT_API BOOL CLIENT_QueryComProtocol(LONG lLoginID,
int nProtocolType, char *pProtocolBuffer, int maxlen, int *nProtocollen, int waittime=2000); 函数说明:查询串口协议与解码器协议, 属于配置信息的一部分,查询前端设
备目前支持的可选控制协议 参数说明:
lLoginID
CLIENT_Login的返回值
nProtocolType
0是串口协议1是解码器协议(云台控制协议) pProtocolBuffer
接收的协议缓冲区
maxlen
接收的协议缓冲区长度 nProtocollen
接收的总字节数
协议信息
typedef struct {
char protocolname[12]; unsigned int baudbase; unsigned char databits; unsigned char stopbits; unsigned char parity; unsigned char reserve; } PROTOCOL_INFO, *LPPROTOCOL_INFO;
//协议名 //波特率 //数据位 //停止位 //校验位
协议个数= nProtocollen/sizeof(PROTOCOL_INFO)
waittime
等待时间
返回值:成功返回TRUE,失败返回FALSE 典型应用:用来查询当前设备支持的云台控制协议和串口协议,便于网络上选
择修改串口配置和云台控制配置 57. CLIENT_API BOOL CLIENT_QuerySystemInfo(LONG lLoginID, int
nSystemType, char *pSysInfoBuffer, int maxlen, int *nSysInfolen, int waittime=2000); 函数说明:查询系统信息,不同的信息有不同的数据结构 参数说明:
lLoginID
CLIENT_Login的返回值
nSystemType
要查询的系统类型
0 一般信息 1 查询设备属性信息 2 查询硬盘信息 3 查询文件系统信息 4 查询视频属性信息 5 查询系统字符集属性信息 6 查询光存储设备信息 7 获取设备序列号
pSysInfoBuffer
接收的协议缓冲区
maxlen
接收的协议缓冲区长度
nSysInfolen
接收的总字节数
waittime
等待时间
返回值:成功返回TRUE,失败返回FALSE
典型应用:查询配置的一些信息,在配置控件就有查询字符集属性的要求 58. CLIENT_API BOOL CLIENT_GetDevConfig(LONG lLoginID, DWORD
dwCommand,LONG lChannel, LPVOID lpOutBuffer,DWORD dwOutBufferSize,LPDWORD lpBytesReturned); 函数说明: 获取设备配置,该接口目前还没有实现 参数说明 :
lLoginID
CLIENT_Login的返回值
dwCommand
配置类型 具体定义见数据结构定义中的<配置结构类型常量定义>
lChannel
通道号,如果不是通道参数,lChannel不用,置为-1即可
lpOutBuffer
存放输出参数的缓冲区, 根据不同的类型, 输出不同的配置结构, 具体见数据结构定义中各配置结构
dwOutBufferSize
输入缓冲区的大小
lpBytesReturned
实际返回的缓冲区大小,对应配置结构的大小
返回值:TRUE表示成功,FALSE表示失败。
59. CLIENT_API BOOL CLIENT_SetDevConfig(LONG lLoginID, DWORD
dwCommand,LONG lChannel, LPVOID lpInBuffer,DWORD dwInBufferSize); 函数说明: 获取设备配置,该接口目前还没有实现 参数说明 :
lLoginID
CLIENT_Login的返回值
dwCommand
配置类型 具体定义见数据结构定义中的<配置结构类型常量定义>
lChannel
通道号,如果不是通道参数,lChannel不用,置为-1即可
lpInBuffer
存放输出参数的缓冲区, 根据不同的类型, 输出不同的配置结构, 具体见数据结构定义中各配置结构
dwInBufferSize
输入缓冲区的大小
返回值:TRUE表示成功,FALSE表示失败。
4.14 日志管理
typedef void(CALLBACK *fLogDataCallBack) (LONG lLoginID, char *pBuffer, DWORD dwBufSize, DWORD nTotalSize, bool bEnd, DWORD dwUser);
60. CLIENT_API BOOL CLIENT_QueryLogCallback(LONG lLoginID,
fLogDataCallBack cbLogData, DWORD dwUser); 函数说明:查询日志,异步日志查询,查询日志分通过多次将结果回调出来,可
以用于日志记录比较多的情况 参数说明:
lLoginID
CLIENT_Login的返回值
cbLogData
日志回调函数
dwUser
用户数据
日志回调函数参数说明:
lLoginID
上面传进来的
pBuffer
日志数据缓冲
dwBufSize
日志数据缓冲长度
nTotalSize
为要日志总长度
bEnd
是否为最后一个日志包,如为最后一个则nTotalSize为0
dwUser
用户数据,就是上面传进来的用户数据
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_QueryLog
典型应用:回调时日志获取,可以处理分页显示的情况;
61. CLIENT_API BOOL CLIENT_QueryLog(LONG lLoginID, *pLogBuffer, int maxlen, int *nLogBufferlen, waittime=6000);
函数说明:查询日志,同步方式,将日志记录一次性查询出来 参数说明:
lLoginID
CLIENT_Login的返回值
pLogBuffer
日志缓冲区
int char maxlen
日志缓冲区的最大长度
nLogBufferlen
返回的日志长度
waittime
等待时间
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_QueryLogCallback 典型应用:与上一接口类似,查询时一次获取日志方式,可以用来一次显示所有
日志的情况;
4.15 透明串口
typedef void(CALLBACK *fTransComCallBack) (LONG lLoginID, LONG lTransComChannel, char *pBuffer, DWORD dwBufSize, DWORD dwUser);
62. CLIENT_API LONG CLIENT_CreateTransComChannel(LONG
lLoginID, int TransComType, unsigned int baudrate, unsigned int databits, unsigned int stopbits, unsigned int parity, fTransComCallBack cbTransCom, DWORD dwUser); 函数说明:创建透明串口通道, 更改前端设备串口为透明通道状态 参数说明:
lLoginID
CLIENT_Login的返回值
TransComType
串口类型0:串口1:485口 baudrate
串口的波特率
1~8分别表示1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
Databits
串口的数据位4~8表示4位~8位
Stopbits
串口的停止位1表示1位, 2表示1.5位 ,3表示2位
Parity
串口的检验位 1 odd 2 even 3 无校验
CbTransCom
串口数据回调, 回调出前端设备发过来的信息;
dwUser
用户数据
串口数据回调参数说明:
lLoginID
上面传进来的
lTransComChannel
CLIENT_CreateTransComChannel的返回值
pBuffer
透明数据缓冲
dwBufSize
透明数据缓冲长度 dwUser
用户数据,就是上面传进来的数据
返回值:成功返回透明串口ID,失败返回0
相关函数:CLIENT_DestroyTransComChannel, CLIENT_SendTransComData 典型应用:用来直接与前端设备相连的串口设备之间通过前端设备通讯,如云
台,前端设备不经过处理直接将网络端通过网络发送数据流,通过串口转发到串口设备,相反也可;本接口只是更改前端设备的通讯状态,设置透明串口状态;
其中CbTransCom用来处理串口设备发送到网络端的数据流;
63. CLIENT_API BOOL CLIENT_SendTransComData(LONG
lTransComChannel, char *pBuffer, DWORD dwBufSize); 函数说明:发送透明串口数据,即向前端设备发送数据 参数说明:
lTransComChannel
透明串口ID
pBuffer
要发送的透明串口数据指针
dwBufSize
要发送的透时串口数据长度 返回值:成功返回TRUE,失败返回FALSE 相关函数:
CLIENT_CreateTransComChannel, CLIENT_DestroyTransComChannel
典型应用:发送到串口设备的数据流 64. CLIENT_API BOOL CLIENT_DestroyTransComChannel(LONG
lTransComChannel); 函数说明:关闭透明通道 参数说明:
lTransComChannel
透明串口ID
返回值:成功返回TRUE,失败返回FALSE 相关函数:
CLIENT_CreateTransComChannel, CLIENT_SendTransComData
典型应用:当不需要通讯时关闭
4.16 远程控制
65. CLIENT_RebootDev(LONG lLoginID) 函数说明:重启前端设备 参数说明:
lLoginID
CLIENT_Login的返回值 66.
返回值:成功返回TRUE,失败返回FALSE 相关函数:
典型应用:远程控制设备重启;
CLIENT_ShutDownDev(LONG lLoginID)
函数说明:关闭前端设备 参数说明:
lLoginID
CLIENT_Login的返回值
返回值:成功返回TRUE,失败返回FALSE 相关函数:
典型应用:远程控制设备关闭;,需要注意的是,只有特别定制的部分机型能
够支持本命令。
typedef void(CALLBACK *fUpgradeCallBack) (LONG lLoginID, LONG lUpgradechannel, int nTotalSize, int nSendSize, DWORD dwUser);
67. CLIENT_API LONG CLIENT_StartUpgrade(LONG lLoginID, char
*pchFileName, fUpgradeCallBack cbUpgrade, DWORD dwUser); 函数说明:设置对前端设备网络升级程序 参数说明:
lLoginID
CLIENT_Login的返回值
pchFileName
要升级的文件名
fUpgradeCallBack
回调升级进度,其中lUpgradechannel为升级句柄
nTotalSize
为升级文件的总长度
int nSendSize
为已升级的长度 dwUser
用户数据
返回值:成功返回升级句柄ID,失败返回0
相关函数: CLIENT_SendUpgrade, CLIENT_StopUpgrade 典型应用:设置远程程序的升级,返回程序升级句柄,调用本接口还没有发送升
级程序数据,需要调用下一接口,数据才能发送;
68. CLIENT_API BOOL CLIENT_SendUpgrade(LONG lUpgradeID); 函数说明:开始执行升级 参数说明:
lUpgradeID
升级句柄ID 69.
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_StartUpgrade, CLIENT_StopUpgrade 典型应用:发送升级程序数据;
CLIENT_API BOOL CLIENT_StopUpgrade(LONG lUpgradeID)
函数说明:停止升级 参数说明:
lUpgradeID
升级句柄ID
返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_StartUpgrade, CLIENT_SendUpgrade 典型应用:停止升级 4.17 录像控制
70. CLIENT_API BOOL CLIENT_QueryRecordState(LONG lLoginID,
char *pRSBuffer, int maxlen, int *nRSBufferlen, int waittime=2000);
函数说明:查询录像状态 参数说明:
lLoginID
CLIENT_Login的返回值
pRSBuffer
录像状态缓冲区,总长度不能小于通道数,其中 0 为不录像 1 手动录像 2 为自动录像
maxlen
输入参数 录像状态缓冲区长度,不能小于通道数 nRSBufferlen
返回录像状态信息长度, 每一个通道为1个字节
waittime
等待时间 返回值:成功返回TRUE,失败返回FALSE
相关函数: CLIENT_SetupRecordState
典型应用:查询当前设备的录像状态,显示到录像控制页面;
71. CLIENT_API BOOL CLIENT_SetupRecordState(LONG lLoginID,
char *pRSBuffer, int nRSBufferlen); 函数说明:设置录像状态 参数说明:
lLoginID
CLIENT_Login的返回值
pRSBuffer
录像状态缓冲区,总长度为通道个数,其中 0 为不录像, 1 手动录像 2 为自动录像
nRSBufferlen
录像状态个数,每一个通道为1个字节
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_QueryRecordState 典型应用:根据需要更改当前的录像状态;
4.18 系统时间
72. CLIENT_API BOOL CLIENT_QueryDeviceTime(LONG LPNET_TIME pDeviceTime, int waittime=2000); 函数说明:查询设备系统时间 参数说明:
lLoginID
CLIENT_Login的返回值
pDeviceTime
接收的设备时间指针
waittime
等待时间 返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_SetupDeviceTime
典型应用:应用于系统校时时获取当前前端设备系统时间;
73.
CLIENT_API BOOL CLIENT_SetupDeviceTime(LONG LPNET_TIME pDeviceTime);
函数说明:设置设备时间 参数说明:
lLoginID
CLIENT_Login的返回值
pDeviceTime
设置的设备时间指针
lLoginID,
lLoginID, 返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_QueryDeviceTime
典型应用:应用于系统校时时更改当前前端设备系统时间与本机系统时间同
步;
4.19 用户管理
74. CLIENT_API BOOL CALL_METHOD CLIENT_QueryUserInfo(LONG
lLoginID, USER_MANAGE_INFO *info, int waittime=15000); 函数说明:查询用户信息 参数说明:
lLoginID
CLIENT_Login的返回值
Info
用户信息缓存,应传进来一个已分配好内存的USER_MANAGE_INFO结构指针; 返回的各用户信息USER_INFO中的password字段是
加过密的。
waittime
等待时间
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_OperateUserInfo
典型应用:获取当前设备用户信息, 应用程序可以根据用户信息对应用界面
的功能进行一定的启动和禁用处理;
75. CLIENT_API BOOL CALL_METHOD CLIENT_OperateUserInfo(LONG
lLoginID, int nOperateType, void *opParam, void *subParam, int waittime=15000); 函数说明:设置用户信息 参数说明: lLoginID
CLIENT_Login的返回值
nOperateType
设置类型
0 增加用户组-opParam为欲设置的USER_GROUP_INF结构指针 1 删除用户组-opParam为欲设置的USER_GROUP_INF结构指针
其name成员是实际起作用的变量
2 3 4 修改用户组-opParam为新的USER_GROUP_INF结构指针,
subParam为原始的USER_GROUP_INF结构指针,
增加用户 -opParam为欲增加的USER_INF结构指针 其password成员传普通字符串即可,不用加密
删除用户 -opParam为欲删除的USER_INF结构指针
其name成员是实际起作用的变量
5
修改用户 -opParam为新的USER_INF结构指针
subParam为原始的USER_INF结构指针,其password成员必须
是查询时返回的密码字段(加密过的)
6
修改用户密码-opParam为新的USER_INF结构指针
subParam为原始的USER_INF结构指针,其password成员必须
是普通字符串,不用加密
opParam
设置用户信息的输入缓冲,具体见上面nOperateType说明。
subParam
设置用户信息的辅助输入缓冲,当设置类型为修改信息的时候,此处应传进来部分原始用户信息,具体见上面nOperateType说明。 waittime
等待时间
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_QueryUserInfo
典型应用:为实现要求的功能,设置更改设备的用户信息
4.20 语音对讲
76. CLIENT_API BOOL CLIENT_StartTalk(LONG lRealHandle, bool
bCustomSend=false); 函数说明:开始传输对讲数据,这个并没有开始播放对讲,需要调用
CLIENT_OpenSound播放才能接收到前端的声音; 参数说明:
lRealHandle
实时监视ID
bCustomSend
是否自定义发送,如果bCustomSend为true,则需要用户自已调用发送
CLIENT_SendTalkData_Custom
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_StopTalk
典型应用:打开语音对讲,开始通过音频输入将音频发送到前端设备;其中
bCustomSend为false时是直接取本机音频输入口的音频发送,相关需调用下一接口 CLIENT_StopTalk客户自定义发送;
【注意】在V3.1.8CLIENT_StartTalkEx;
77. CLIENT_API BOOL CLIENT_StopTalk(LONG lRealHandle);
函数说明:停止传输对讲数据 参数说明:
lRealHandle
实时监视ID
返回值:成功返回TRUE,失败返回FALSE 相关函数: CLIENT_StartTalk 典型应用:停止语音对讲
【注意】在V3.1.8CLIENT_StartTalkEx; 78. CLIENT_API BOOL CLIENT_SendTalkData_Custom(LONG
lRealHandle, char *pBuffer, DWORD dwBufSize);
函数说明:发送自定义音频数据 参数说明:
lRealHandle
实时监视ID
pBuffer
要发送音频数据缓冲区,音频数据必须是采样率8000,码率64k,每采样比特数为8 dwBufSize
要发送的音频数据长度
返回值:成功返回TRUE,失败返回FALSE
典型应用:用户自定义发送音频数据到前端设备,如发送音乐; 【注意】:在V3.1.8
typedef void(CALLBACK *pfAudioDataCallBack)(LONG lTalkHandle, char *pDataBuf, DWORD dwBufSize, BYTE byAudioFlag, DWORD dwUser);
79. CLIENT_API LONG CLIENT_StartTalkEx(LONG
pfAudioDataCallBack pfcb, DWORD dwUser); 函数说明:向设备发起语音对讲请求 参数说明: (in)lLoginID
登陆返回的设备句柄
(in)pfcb
用户自定义的数据回调接口
(in)dwUser
用户自定义信息,通过回调函数返回给用户
lLoginID,
回调函数参数说明(原型参见pfAudioDataCallBack)
(in)lTalkHandle
就是CLIENT_StartTalkEx的返回值
(in)pDataBuf
回调出来的音频数据的内容
(in)dwBufSize
回调出来的音频数据的长度
(in)byAudioFlag
音频数据归属标志
0 表示是本地录音库采集的音频数据 1 表示收到的设备发过来的音频数据 (in)dwUser
用户调用CLIENT_StartTalkEx时自定义的用户数据
返回值:成功返回和设备对讲的句柄,失败返回0; 典型应用:打开和设备的对讲;
【注意】 在V3.1.8这个接口,代替之前的CLIENT_StartTalk 80. CLIENT_API BOOL CLIENT_SetAudioClientVolume(LONG
lTalkHandle, WORD wVolume);
函数说明:在进行语音对讲的时候设置音量; 参数说明:
(in)lTalkHandle
CLIENT_StartTalkEx的返回值
(in)wVolume
要设置的音量,范围是0~0XFFFF,0的音量最小
返回值:成功返回TRUE,失败返回FALSE; 典型应用:
【注意】备注在V3.1.8才有的。
81. CLIENT_API LONG CLIENT_TalkSendData(LONG lTalkHandle,
char *pSendBuf, DWORD dwBufSize); 函数说明:向设备发送用户的音频数据,这里的数据可以是从
CLIENT_StartTalkEx的回调接口中回调出来的数据; 参数说明:
(in)lTalkHandle
CLIENT_StartTalkEx的返回值;
(in)pSendBuf
要发送的音频数据;
(in)dwBufSize
是要发送的音频数据的长度; 返回值:成功时返回实际传输给设备的数据长度,失败返回-1 典型应用:接收到CLIENT_StartTalkEx的回调出来的录音数据后通过这个接
口发送给设备。 【注意】在V3.1.8
82. CLIENT_API BOOL CLIENT_RecordStart();
函数说明:启动本地录音功能,录音采集出来的音频数据通过
CLIENT_StartTalkEx的回调函数回调给用户,对应操作是CLIENT_RecordStop; 参数:无
返回值:成功返回TRUE,失败返回FALSE; 典型应用:语音对讲中使用;
【注意】在V3.1.8。
83. CLIENT_API BOOL CLIENT_RecordStop();
函数说明:停止本地录音,对应操作是CLIENT_RecordStart; 参数:无
返回值:成功返回TRUE,失败返回FALSE; 典型应用:语音对讲中使用; 【注意】在V3.1.8。
84. CLIENT_API void CLIENT_AudioDec(char *pAudioDataBuf,
DWORD dwBufSize); 函数说明:对输入的音频数据进行解码; 参数说明:
(in)pAudioDataBuf
要求解码的音频数据内容;
(in)dwBufSize
要求解码的音频数据的长度;
返回值:无
典型应用:语音对讲中对设备传过来的数据进行解码; 【注意】在V3.1.8。
85. CLIENT_API BOOL CLIENT_StopTalkEx(LONG lTalkHandle); 函数说明:停止与设备的对讲,对应操作是CLIENT_StartTalkEx; 参数说明:
(in)lTalkHandle
CLIENT_StartTalkEx返回的对讲句柄 返回值:成功返回TRUE,失败返回FALSE; 典型应用:语音对讲中使用; 【注意】在V3.1.8。 86. CLIENT_API BOOL CLIENT_AudioBroadcastAddDev(LONG
lLoginID); 函数说明:把设备增加到广播组中,当本地录音库启动后,采集出来的数据
会自动发送给广播组中的设备,对应操作是CLIENT_AudioBroadcastDelDev; 参数说明:
(in)lLoginID
登录设备时得到的设备句柄 返回值:成功返回TRUE,失败返回FALSE; 典型应用:在语音对讲服务器开发中使用; 【注意】在V3.1.8。 87. CLIENT_API BOOL CLIENT_AudioBroadcastDelDev(LONG
lLoginID);
函数说明:把设备从广播组中删除,对应操作是
CLIENT_AudioBroadcastAddDev; 参数说明:
(in)lLoginID
设备句柄 返回值:成功返回TRUE,失败返回FALE; 典型应用:在语音对讲服务器开发中使用; 【注意】在V3.1.8。
88. CLIENT_API int CLIENT_InitAudioEncode(DH_AUDIO_FORMAT
aft); 函数说明:初始化对讲中的音频编码接口,告诉SDK内部要编码的源音频数
据的音频格式,对不支持的音频格式初始化会失败; 参数说明:
(in)aft
要编码的音频格式,类型DH_AUDIO_FORMAT
返回值:成功返回0,失败返回错误码,参考错误码解释; 相关函数:
典型应用:通过配置接口获取设备支持的音频解码格式,目前配置接口还不
支持获取,这里的音频格式默认只支持(0,1,16,8000),格式表示是(编码类型,声道数,采样深度,采样率)
89. CLIENT_API int CLIENT_AudioEncode(LONG lTalkHandle, BYTE
*lpInBuf, DWORD *lpInLen, BYTE *lpOutBuf, DWORD *lpOutLen); 函数说明:进行音频的数据二次编码,从标准音频格式转换成设备支持的大
华格式;
参数说明:
(in)lTalkHandle
CLIENT_StartTalkEx接口的返回值,对讲的句柄;
(in)lpInBuf
要编码的源音频数据; (in,out)lpInLen
源音频数据的长度,当接口返回数据过长时,lpInLen的值是接口支持
的最长的输入长度,最好不要超过1024*2,当返回成功时,其值表示剩下还没有编码数据长度; (out)lpOutBuf
用来存储编码的音频数据; (in,out)lpOutLen
调用接口时表示lpOutBuf的最大长度,当接口返回缓冲不足时,其值是需要的缓冲长度;
返回值:成功返回0,失败返回错误码,参考错误码解释
相关函数:CLIENT_InitAudioEncode,CLIENT_StartTalkEx ,
CLIENT_ReleaseAudioEncode 典型应用:在对讲中,如果是用户使用自己的录音数据,传给**的数据必须是经过编码的数据; 90. CLIENT_API int CLIENT_ReleaseAudioEncode(); 函数说明:解码功能使用完毕后,告诉接口清理内部资源; 参数说明:
返回值:成功返回0,失败返回错误码,参考错误码解释;
相关参数:CLIENT_InitAudioEncode,CLIENT_AudioEncode
典型应用:
4.21 码流统计
91. CLIENT_API LONG CLIENT_GetStatiscFlux(LONG lLoginID, LONG
lPlayHandle); 函数说明:获取流量统计,得到在上次调用此统计流量之间的流量,每调用一次
原有的历史流量都将清0 参数说明:
lLoginID
CLIENT_Login的返回值
lPlayHandle
播放ID,可以是实时播放ID,预览ID或者是网络回放ID,当为0时得到设备的总流量 返回值:成功返回流量值,失败返回-1 相关函数:CLIENT_Login 典型应用:获取当前显示窗口的网络流量,用于码流统计,为图像显示提供参考
依据
4.22 IO控制
92. CLIENT_API BOOL CLIENT_QueryIOControlState(LONG lLoginID,
IOTYPE emType, void *pState, int maxlen, int *nIOCount, int waittime=2000);
函数说明:得到设备的IO状态 参数说明:
lLoginID
CLIENT_Login的返回值
emType
IO类型,1报警输入, 2报警输出,详见IOTYPE类型定义 pState
状态缓冲区,根据不同的IO类型可以是不同的数据结构数组
maxlen
最大缓冲区大小
nIOCount
输出参数, 取得状态的IO数量
waittime
等待时间
返回值:成功返回流量值,失败返回-1 相关函数:CLIENT_Login
典型应用:本接口采用windows查询处理方式,先调用本接口pState
设为Null获取nIOCount, pState申请相应的内存再调用本接口将内存指针作输入参数, 同时也做输出参数返回状态数据
93. CLIENT_API BOOL CLIENT_IOControl(LONG lLoginID, IOTYPE
emType, void *pState, int maxlen); 函数说明:设置IO状态,可以对一个IO设置,也可以同时对多个一起设置 参数说明:
lLoginID
CLIENT_Login的返回值
emType
IO类型,1报警输入, 2报警输出,详见IOTYPE类型定义;
pState
状态缓冲区,根据不同的IO类型可以是不同的数据结构数组
maxlen
最大缓冲区大小 返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_Login
典型应用:修改报警步撤防状态和报警输出状态
4.23 强制I帧
94. CLIENT_API BOOL CLIENT_MakeKeyFrame(LONG lLoginID, int
nChannelID, int nSubChannel=0); 函数说明:对监视图像强制I帧,执行一次强制一个I帧 参数说明:
lLoginID
CLIENT_Login的返回值
nChannelID
通道ID
nSubChannel
子通道,目前暂时不用
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_Login 典型应用:可以于网络监视出现马赛克无法恢复图像时,调用此接口让图像恢
复正常;也可以根据用户需要,定期强制I确保数据的稳定;
4.24 设置限流
95. CLIENT_API BOOL CLIENT_SetMaxFlux(LONG lLoginID, WORD
nFlux); 函数说明:设置设备的网络限定流量 参数说明:
lLoginID
CLIENT_Login的返回值
nFlux
流量值,单位Kbps(1024 bits/sec)目前只支持几个特定可选值设置, 65535(无限制),64, 128, 256, 512, 768, 1024。 返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_Login
典型应用:应用于连接多台不同的设备,需要限定网络流量的情况
4.25 获取设备状态
96. CLIENT_API BOOL CLIENT_GetDEVWorkState(LONG lLoginID,
LPNET_DEV_WORKSTATE lpWorkState, int waittime=2000); 函数说明:获取前端设备的当前工作状态; 参数说明:
lLoginID
CLIENT_Login的返回值
lpWorkState
设备状态信息,具体见数据结构(NET_DEV_WORKSTATE)定义中有说明 waittime
查询状态等待时间,默认2000ms 97.
返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_Login
典型应用:获取设备的当前工作状态
CLIENT_API BOOL CALL_METHOD CLIENT_QueryDevState(LONG lLoginID, int nType, char *pBuf, int nBufLen, int *pRetLen, int waittime=1000);
函数说明:获取前端设备的当前工作状态,新接口; 参数说明:
lLoginID
CLIENT_Login的返回值
nType
查询信息类型,可接受的值包括:
DH_DEVSTATE_COMM_ALARM DH_DEVSTATE_SHELTER_ALARM DH_DEVSTATE_RECORDING DH_DEVSTATE_DISK
查询普通报警 查询遮挡报警 查询录象状态 查询硬盘状态
pBuf
输出参数,用于接收查询返回的数据的缓存。根据查询类型的不同,返回数据的数据结构也不同:
nType的可能值是:
-DH_DEVSTATE_COMM_ALARM:填充数据为一个NET_CLIENT_STATE结构
体。
-DH_DEVSTATE_SHELTER_ALARM:填充数据为16个字节,每个字节表示一个
视频通道的遮挡报警状态,1为有报警,0为无报警
-DH_DEVSTATE_RECORDING:填充数据为16个字节,每个字节表示一个视频
通道的录象状态,1表示正在录象,0表示不在录象。
-DH_DEVSTATE_DISK:填充数据为一个DH_HARDDISK_STATE结构体。
nBufLen
缓存长度 ,单位字节 pRetLen
输出参数,实际返回的数据长度,单位字节 waittime
查询状态等待时间,默认1000ms 返回值:成功返回TRUE,失败返回FALSE 相关函数:CLIENT_Login
典型应用:获取设备的当前工作状态
4.26 修改通道名称
98.
CLIENT_API BOOL CALL_METHOD CLIENT_SetupChannelName(LONG lLoginID,char *pbuf, int nbuflen);
函数说明:修改设备通道名称 参数说明:
lLoginID
CLIENT_Login的返回值
pbuf
通道名称的缓冲
nbuflen
缓冲区长度 32*16
返回值:成功返回TRUE,失败返回FALSE
相关函数:CLIENT_Login、CLIENT_QueryChannelName 典型应用:无
4.27 DDNS查询IP
99.
CLIENT_API BOOL CLIENT_ GetDVRIPByResolveSvr (char *pchDVRIP, WORD wDVRPort, BYTE *sDVRName, WORD wDVRNameLen, BYTE *sDVRSerialNumber, WORD wDVRSerialLen, char* sGetIP);
函数说明:连接DDNS服务器,通过设备名查询IP 参数说明:
pchDVRIP
DDNS服务器的
wDVRPort
DDNS服务器的端口号
sDVRName
所查询的设备名
wDVRNameLen
设备名的长度
sDVRSerialNumber
所查询的设备序列号(目前不支持,填0)
wDVRSerialLen
设备序列号的长度(目前不支持, 填0)
sGetIP 储存返回IP的地址指针( 应用程序中分配, 32字节长) 返回值:成功返回TRUE,失败返回FALSE 相关函数:无
典型应用:连接DDNS服务器,通过设备名查询IP
4.28 设备参数配置
100. CLIENT_API BOOL CALL_METHOD CLIENT_GetDevConfig(LONG lLoginID, DWORD
dwCommand,LONG lChannel, LPVOID lpOutBuffer,DWORD dwOutBufferSize,LPDWORD lpBytesReturned); 函数说明:读取设备的配置信息 参数: lLoginID
设备登陆句柄
dwCommand
设备配置命令参见配置命令
lChannel
通道号,如果获取全部通道数据为0xFFFFFFFF,如果命令不需要通道号,该参数无效。
lpOutBuffer
接受数据缓冲指针
dwOutBufferSize lpBytesReturned
接收数据缓冲长度(以字节为单位) 实际收到数据的长度
返回值:TRUE 成功,FALSE 失败,获取具体错误代码调用CLIENT_GetLastError,可能
返回的值如下:
#define NET_ERROR_GETCFG_SYSATTR? ?_EC(32) //获取配置失败位置:系统属性 #define NET_ERROR_GETCFG_SERIAL? ??_EC(33)? //获取配置失败位置:序列号
#define NET_ERROR_GETCFG_GENERAL? ?_EC(34)? ? //获取配置失败位置:常规属性 #define NET_ERROR_GETCFG_DSPCAP? ??_EC(35)? ? //获取配置失败位置:DSP能力描述 #define NET_ERROR_GETCFG_NETCFG? ??_EC(36)? //获取配置失败位置:网络属性 #define NET_ERROR_GETCFG_CHANNAME? _EC(37)? //获取配置失败位置:通道名称 #define NET_ERROR_GETCFG_VIDEO? ?? _EC(38)? //获取配置失败位置:视频属性 #define NET_ERROR_GETCFG_RECORD? ? _EC(39)? //获取配置失败位置:录象定时配置 #define NET_ERROR_GETCFG_PRONAME? ?_EC(40)?//获取配置失败位置:解码器协议名称 #define NET_ERROR_GETCFG_FUNCNAME? _EC(41) 名称
#define NET_ERROR_GETCFG_485DECODER?_EC(42)?//获取配置失败位置:解码器属性 #define NET_ERROR_GETCFG_232COM? ?? 性
#define NET_ERROR_GETCFG_ALARMIN? ? 属性
#define NET_ERROR_GETCFG_ALARMDET? _EC(45)?//获取配置失败位置:图像检测报警属性 #define NET_ERROR_GETCFG_SYSTIME? ?_EC(46)?//获取配置失败位置:设备时间 #define NET_ERROR_GETCFG_PREVIEW? ?_EC(47)? //获取配置失败位置:预览参数 相关函数:
_EC(44)?//获取配置失败位置:外部报警输入 _EC(43)?//获取配置失败位置:232串口属
//获取配置失败位置:232串口功能
典型应用:参见VC _DEMO程序
101. CLIENT_API BOOL CALL_METHOD CLIENT_SetDevConfig(LONG lLoginID, DWORD
dwCommand,LONG lChannel, LPVOID lpInBuffer,DWORD dwInBufferSize); 函数说明:读取设备的配置信息 参数:
lLoginID
设备登陆句柄
dwCommand
设备配置命令参见配置命令 lChannel
通道号,如果设置全部通道数据为0xFFFFFFFF,如果命令不需要通道号,该参数无效。
lpOutBuffer 数据缓冲指针
dwOutBufferSize
数据缓冲长度(以字节为单位)
返回值:TRUE 成功,FALSE 失败,获取具体错误代码调用CLIENT_GetLastError,可能返回的值如下:
#define NET_ERROR_SETCFG_GENERAL? ?_EC(48)? ?//设置配置失败位置:常规属性 #define NET_ERROR_SETCFG_NETCFG? ?? _EC(49)? ?//设置配置失败位置:网络属性 #define NET_ERROR_SETCFG_CHANNAME? ?_EC(50)? ?//设置配置失败位置:通道名称 #define NET_ERROR_SETCFG_VIDEO? ?? ?_EC(51)? ?//设置配置失败位置:视频属性 #define NET_ERROR_SETCFG_RECORD? ?? _EC(52)? //设置配置失败位置:录象定时配置 #define NET_ERROR_SETCFG_485DECODER? ?_EC(53) //设置配置失败位置:解码器属性 #define NET_ERROR_SETCFG_232COM? ?? _EC(54)? //设置配置失败位置:232串口属性 #define NET_ERROR_SETCFG_ALARMIN? _EC(55) //设置配置失败位置:外部报警输入属性 #define NET_ERROR_SETCFG_ALARMDET?_EC(56)?//设置配置失败位置:图像检测报警属性 #define NET_ERROR_SETCFG_SYSTIME? _EC(57)? 相关函数:
典型应用:参见VC_ DEMO程序
//设置配置失败位置:设备时间
#define NET_ERROR_SETCFG_PREVIEW? ?_EC(58)? ??//设置配置失败位置:预览参数
**************************************************************************************
配置命令
*************************************************************************************** CLIENT_GetDEVConfig、CLIENT_GetDEVConfig的命令定义
#define DH_DEV_DEVICECFG 1 //设备参数,参见DHDEV_SYSTEM_ATTR_CFG #define DH_DEV_NETCFG 2 //网络参数,参见DHDEV_NET_CFG
#define DH_DEV_CHANNELCFG 3 通道配置-图像及压缩参数等,参见DHDEV_CHANNEL_CFG #define DH_DEV_PREVIEWCFG 4 //预览参数,参见DHDEV_PREVIEW_CFG #define DH_DEV_RECORDCFG 5 //录像时间参数,参见DHDEV_RECORD_CFG #define DH_DEV_COMMCFG 6 //串口参数,参见DHDEV_COMM_CFG
#define DH_DEV_ALARMCFG 7 //报警参数,参见DHDEV_ALARM_SCHEDULE #define DH_DEV_TIMECFG 8 //DVR时间,参见开发手册的DH_NETTIME结构
#define DH_DEV_TALKCFG 9 //对讲参数,参见DHDEV_TALK_CFG
************************************************************************************
以下是各部分配置结构体
************************************************************************************ #define DH_MAX_MAIL_ADDR_LEN 128 //邮件发(收)人地址最大长度 #define DH_MAX_MAIL_SUBJECT_LEN 64 //邮件主题最大长度 #define DH_MAX_IPADDR_LEN #define DH_MACADDR_LEN #define DH_MAX_USER_NAMELEN #define DH_MAX_USER_PSWLEN #define DH_MAX_NAME_LEN #define DH_MAX_ETHERNET_NUM #define DH_DEV_SERIALNO_LEN #define DH_N_WEEKS #define DH_N_REC_TSECT #define DH_N_COL_TSECT #define DH_CHAN_NAME_LEN #define DH_N_ENCODE_AUX #define DH_N_TALK #define DH_N_COVERS #define DH_N_CHANNEL #define DH_N_ALARM_TSECT #define DH_MAX_ALARMOUT_NUM #define DH_MAX_VIDEO_IN_NUM #define DH_MAX_ALARM_IN_NUM #define DH_MAX_DISK_NUM #define DH_MAX_DECODER_NUM #define DH_MAX_232FUNCS #define DH_MAX_232_NUM #define DH_MAX_DECPRO_LIST_SIZE /* 分辨率列表 */
#define DH_CAPTURE_SIZE_D1 #define DH_CAPTURE_SIZE_HD1 #define DH_CAPTURE_SIZE_BCIF #define DH_CAPTURE_SIZE_CIF #define DH_CAPTURE_SIZE_QCIF #define DH_CAPTURE_SIZE_VGA #define DH_CAPTURE_SIZE_QVGA #define DH_CAPTURE_SIZE_SVCD /* 码流控制列表 */
#define DH_CAPTURE_BRC_CBR
#define DH_CAPTURE_BRC_VBR #define DH_CAPTURE_BRC_MBR
16 //IP地址字符串长度 48 //MAC地址字符串长度 32 //主机名字符串长度 32 //长度 16 //通用名字字符串长度 2 //以太网口最大个数 32 //序列号字符串长度 7 //一周的天数 6 //录像时间段个数 2 //颜色时间段个数 32 //通道名长度 3 //扩展码流个数 1 //最多对讲通道个数 1 //遮挡区域个数 16 //最大通道个数
2 //报警提示时间段个数 16 //报警输出口个数上限 16 //视频输入口个数上限 16 //报警输入口个数上限 16 //硬盘个数上限,暂定为16 16 //解码器(485)个数上限 5 //232串口功能个数上限 2 //232串口个数上限 100 //解码器协议列表个数上限 0x00000001 0x00000002 0x00000004 0x00000008 0x00000010 0x00000020 0x00000040 0x00000080 0 1
2
/* 编码模式列表 */
#define DH_CAPTURE_COMP_DIVX_MPEG4 #define DH_CAPTURE_COMP_MS_MPEG4 #define DH_CAPTURE_COMP_MPEG2 #define DH_CAPTURE_COMP_MPEG1 #define DH_CAPTURE_COMP_H263 #define DH_CAPTURE_COMP_MJPG #define DH_CAPTURE_COMP_FCC_MPEG4 #define DH_CAPTURE_COMP_H264 /* 定时录象类型-定时、动态检测、报警 */ enum REC_TYPE {
DH_REC_TYPE_TIM = 0, DH_REC_TYPE_MTD, DH_REC_TYPE_ALM, DH_REC_TYPE_NUM, };
0x00000001 0x00000002 0x00000004 0x00000008 0x00000010 0x00000020 0x00000040 0x00000080
*************************************************************************************
系统信息
************************************************************************************* 版本信息:高16位表示主版本号,低16位表示次版本号 关于时间的数据组织是:yyyymmdd typedef struct {
DWORD dwSoftwareVersion; DWORD dwSoftwareBuildDate; DWORD dwDspSoftwareVersion; DWORD dwDspSoftwareBuildDate; DWORD dwPanelVersion;
DWORD dwPanelSoftwareBuildDate; DWORD dwHardwareVersion; DWORD dwHardwareDate; DWORD dwWebVersion; DWORD dwWebBuildDate;
} DH_VERSION_INFO, *LPDH_VERSION_INFO; /* DSP能力描述 */ typedef struct {
DWORD dwVideoStandardMask;//视频制式掩码,按位表示设备能够支持的视频制式 DWORD dwImageSizeMask; //分辨率掩码,按位表示设备能够支持的分辨率设置 DWORD dwEncodeModeMask; //编码模式掩码,按位表示设备能够支持的编码模式设置 } DH_DSP_ENCODECAP, *LPDH_DSP_ENCODECAP; /* 设备信息配置结构 */
typedef struct { DWORD dwSize;
/*下面是设备的只读部分*/
DH_VERSION_INFO stVersion; BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE
szDevSerialNo[DH_DEV_SERIALNO_LEN]; //序列号
byDevType; //设备类型,见枚举NET_DEVICE_TYPE byVideoCaptureNum; //视频口数量 byAudioCaptureNum; //音频口数量 byTalkInChanNum; //NSP byTalkOutChanNum; //NSP byDecodeChanNum; //NSP byAlarmInNum; byAlarmOutNum; byNetIONum; byUsbIONum; byIdeIONum; byComIONum; byLPTIONum; byVgaIONum; byIdeControlNum; byIdeControlType;
//报警输入口数 //报警输出口数 //网络口数 //USB口数量 //IDE数量 //串口数量 //并口数量 //NSP //NSP //NSP
//NSP,扩展描述 //保留字
//DSP能力描述
//设备编号,用于遥控
//硬盘满处理方式(覆盖、停止) //录象打包长度 //NSP
BYTE byCapability; BYTE byReserved[3]; DH_DSP_ENCODECAP stDspEncodeCap; /*下面是设备的可写部分*/
BYTE byDevNo; BYTE byOverWrite; BYTE byRecordLen; BYTE byStartChanNo;
BYTE byVideoStandard; //视频制式 BYTE byDateFormat; //日期格式
BYTE byDateSprtr; //日期分割符(0-\".\", 1-\"-\", 2-\"/\") BYTE byTimeFmt; //时间格式 (0-24小时,1-12小时) } DHDEV_SYSTEM_ATTR_CFG, *LPDHDEV_SYSTEM_ATTR_CFG;
*************************************************************************************
图像通道
************************************************************************************* /* 时间段结构 */ typedef struct {
BYTE byBeginHour; BYTE byBeginMin; BYTE byBeginSec; BYTE byEndHour;
BYTE byEndMin; BYTE byEndSec;
BYTE byReserved[2]; } DH_TSECT, *LPDH_TSECT; /* 区域:各边距按整长8192的比例 */ typedef struct { long left; long top; long right; long bottom;
} DH_RECT,*LPDH_RECT;
/* OSD属性结构 */
typedef struct tagENCODE_WIDGET {
DWORD rgbaFrontground; // 物件的前景RGB,和透明度 DWORD rgbaBackground; // 物件的后景RGB,和透明度 DH_RECT rcRect; // 位置 BYTE bShow; // 物件显示 BYTE byReserved[3];
} DH_ENCODE_WIDGET, *LPDH_ENCODE_WIDGET; /* 通道音视频属性 */ typedef struct {
//视频参数
BYTE byVideoEnable; //视频使能:1-打开,0-关闭 BYTE byBitRateControl; // 码流控制,参照常量定义 BYTE byFramesPerSec; // 帧率 BYTE byEncodeMode; // 编码模式,参照常量定义 BYTE byImageSize; // 分辨率参,参照常量定义 BYTE byImageQlty; // 档次1-6 //音频参数 BYTE byAudioEnable; //音频使能:1-打开,0-关闭 BYTE wFormatTag; //编码类型,如PCM WORD nChannels; //声道数
WORD wBitsPerSample; //采样深度 DWORD nSamplesPerSec; //采样率 } DH_VIDEOENC_OPT, *LPDH_VIDEOENC_OPT; /* 画面颜色属性 */ typedef struct {
DH_TSECT stSect;
BYTE BYTE
byBrightness; byContrast;
// 亮度 0-100 // 对比度 0-100
BYTE bySaturation; // 饱和度 0-100 BYTE byHue; // 色度 0-100 BYTE byGain; // 增益 0-100 BYTE byReserved[3];
} DH_COLOR_CFG, *LPDH_COLOR_CFG; /* 图像通道属性结构体 */ typedef struct {
DWORD char DH_VIDEOENC_OPT DH_VIDEOENC_OPT DH_COLOR_CFG DH_ENCODE_WIDGET DH_ENCODE_WIDGET DH_ENCODE_WIDGET BYTE
dwSize;
szChannelName[DH_CHAN_NAME_LEN]; stMainVideoEncOpt[DH_REC_TYPE_NUM]; stAssiVideoEncOpt[DH_N_ENCODE_AUX]; stColorCfg[DH_N_COL_TSECT]; stTimeOSD; stChannelOSD;
stBlindCover[DH_N_COVERS]; byBlindEnable;
// 区域遮盖开关 0x00不使能遮盖,0x01仅遮盖预览,0x10仅遮盖录像,0x11都遮盖
BYTE byReserved[3];
} DHDEV_CHANNEL_CFG, *LPDHDEV_CHANNEL_CFG;
*************************************************************************************
预览图像参数 /* 预览图像参数 */ typedef struct {
DWORD dwSize; DH_VIDEOENC_OPT stPreView;
DH_COLOR_CFG stColorCfg[DH_N_COL_TSECT]; }DHDEV_PREVIEW_CFG;
***************************************************************************************
语音对讲音频属性结构体-未实现,待扩展
*************************************************************************************** typedef struct {
//音频输入参数
BYTE byInFormatTag; BYTE byInChannels; WORD wInBitsPerSample; DWORD dwInSamplesPerSec; //音频输出参数
BYTE byOutFormatTag; BYTE byOutChannels; WORD wOutBitsPerSample;
//编码类型,如PCM //声道数
//采样深度 //采样率
//编码类型,如PCM //声道数
//采样深度
DWORD dwOutSamplesPerSec; } DHDEV_TALK_CFG, *LPDHDEV_TALK_CFG;
//采样率
***************************************************************************************
定时录象
*************************************************************************************** typedef struct {
DWORD dwSize;
DH_TSECT stSect[DH_N_WEEKS][DH_N_REC_TSECT]; BYTE byPreRecordLen; BYTE byRedundancyEn; BYTE byReserved[2];
} DHDEV_RECORD_CFG, *LPDH_RECORD_CFG;
//预录时间,单位是s,0表示不预录 //录像冗余开关
************************************************************************************
报警配置
************************************************************************************ 消息触发配置
当设备产生消息,譬如产生一个输入报警,或者视频丢失时,需要做相应的处理. 此处定义如何处理一个消息 #define DH_ALARM_UPLOAD 0x00000001 #define DH_ALARM_RECORD 0x00000002 #define DH_ALARM_PTZ 0x00000004 #define DH_ALARM_MAIL 0x00000008 #define DH_ALARM_TOUR 0x00000010 #define DH_ALARM_TIP 0x00000020 #define DH_ALARM_OUT 0x00000040 #define DH_MOTION_ROW 12 #define DH_MOTION_COL 16 typedef struct {
消息处理方式,可以同时多种处理方式,包括 * 0x00000001 - 网络:上传管理服务器 * 0x00000002 - 录像:触发 * 0x00000004 - 云台联动 * 0x00000008 - 发送邮件
* 0x00000010 - 设备本地报警轮巡 * 0x00000020 - 设备提示使能 * 0x00000040 - 设备报警输出使能 /*当前报警所支持的处理方式*/ DWORD dwActionMask;
/* 触发动作,具体动作所需要的参数在各自的配置中体现,如报警录像长度,设置为10秒,可以在报警配置中设置*/
DWORD dwActionFlag;
/* 报警(录象)持续时间 */ DWORD dwDuration;
/* 报警触发的输出通道,报警触发的输出,为 1 表示触发该输出 */ BYTE byRelAlarmOut[DH_MAX_ALARMOUT_NUM]; /*联动录象*/
BYTE byRecordChannel[DH_MAX_VIDEO_IN_NUM];
// 报警触发的录象通道,为1表示触发该通道
DWORD dwPreRecLen; //预录时间,单位是秒
/* 云台联动动作:0.不联动, 1.转到预置点, 2.巡航, 3.轨迹, 4.线扫 */ BYTE byPtzType[DH_MAX_VIDEO_IN_NUM];
/* 调用的云台预置点序号/巡航组号/轨迹序号/线扫序号,各通道可不同设置 */ BYTE byPtzNo[DH_MAX_VIDEO_IN_NUM]; } DH_MSG_HANDLE; /* 外部报警 */
typedef struct {
BYTE BYTE BYTE DH_TSECT
byAlarmType; //报警器类型,0:常开,1:常闭 byAlarmEn; //报警使能 byReserved[2]; stSect[DH_N_WEEKS][DH_N_REC_TSECT];
// 处理方式
DH_MSG_HANDLE struHandle; } DH_ALARMIN_CFG,*LPDHDEV_ALARMIN_CFG; /* 动态检测报警 */ typedef struct {
BYTE BYTE WORD BYTE
byMotionEn; byReserved;
// 动态检测报警使能
wSenseLevel; //灵敏度
byDetected[DH_MOTION_ROW][DH_MOTION_COL];
//检测区域,共12*16块区域
stSect[DH_N_WEEKS][DH_N_REC_TSECT];
//处理方式
DH_TSECT
DH_MSG_HANDLE struHandle; }DH_MOTION_DETECT_CFG; /* 视频丢失报警 */ typedef struct {
BYTE BYTE DH_TSECT
byAlarmEn; //视频丢失报警使能 byReserved[3];
stSect[DH_N_WEEKS][DH_N_REC_TSECT];
// 处理方式
DH_MSG_HANDLE struHandle; } DH_VIDEO_LOST_CFG; /* 图像遮挡报警 */ typedef struct
{
BYTE BYTE BYTE DH_TSECT
byBlindEnable; // 使能 byBlindLevel; // 灵敏度1-6 byReserved[2];
stSect[DH_N_WEEKS][DH_N_REC_TSECT];
// 处理方式
DH_MSG_HANDLE struHandle; } DH_BLIND_CFG; /* 硬盘消息(内部报警) */ typedef struct {
BYTE BYTE DH_TSECT
byNoDiskEn; // 无硬盘时报警 byReserved_1[3];
stNDSect[DH_N_WEEKS][DH_N_REC_TSECT]; struHandle; // 处理方式
byLowCapEn; // 硬盘低容量时报警 byReserved_2[3];
stLCSect[DH_N_WEEKS][DH_N_REC_TSECT]; struLCHandle; //处理方式 byDiskErrEn; // 硬盘故障报警 byReserved_3[3];
stEDSect[DH_N_WEEKS][DH_N_REC_TSECT];
// 处理方式
DH_MSG_HANDLE BYTE BYTE DH_TSECT DH_MSG_HANDLE BYTE BYTE DH_TSECT
DH_MSG_HANDLE struEDHandle; } DH_DISK_ALARM_CFG; /* 报警布防 */
typedef struct {
DWORD dwSize;
DH_ALARMIN_CFG DH_MOTION_DETECT_CFG DH_VIDEO_LOST_CFG DH_BLIND_CFG DH_DISK_ALARM_CFG //可能还有设备异常
} DHDEV_ALARM_SCHEDULE;
struAlarmIn[DH_MAX_ALARM_IN_NUM]; struMotion[DH_MAX_VIDEO_IN_NUM]; struVideoLost[DH_MAX_VIDEO_IN_NUM]; struBlind[DH_MAX_VIDEO_IN_NUM]; struDiskAlarm;
***********************************************************************************
网络配置
*********************************************************************************** /*以太网配置*/
typedef struct {
char sDevIPAddr[DH_MAX_IPADDR_LEN]; char sDevIPMask[DH_MAX_IPADDR_LEN]; char sGatewayIP[DH_MAX_IPADDR_LEN];
// DVR IP 地址 //DVR IP 地址掩码 // 网关地址
/* 10M/100M 自适应,索引 * 1-10MBase - T * 2-10MBase-T 全双工 * 3-100MBase - TX * 4-100M 全双工
* 5-10M/100M 自适应 */ DWORD dwNetInterface;
//NSP
// MAC地址,只读
char byMACAddr[DH_MACADDR_LEN]; } DH_ETHERNET; /* 远程主机配置 */ typedef struct {
BYTE byEnable; BYTE byReserved;
// 连接使能
// 远程主机 端口 //远程主机 IP 地址 //远程主机 用户名 //远程主机 密码
WORD wHostPort; char sHostIPAddr[DH_MAX_IPADDR_LEN]; char sHostUser[DH_MAX_USER_NAMELEN]; char sHostPassword[DH_MAX_USER_PSWLEN]; }DH_REMOTE_HOST; /* 邮件配置 */
typedef struct {
char sMailIPAddr[DH_MAX_IPADDR_LEN]; WORD wMailPort; WORD wReserved; char sUserName[DH_MAX_NAME_LEN]; char sUserPsw[DH_MAX_NAME_LEN]; char sDestAddr[DH_MAX_MAIL_ADDR_LEN]; char sCcAddr[DH_MAX_MAIL_ADDR_LEN]; char sBccAddr[DH_MAX_MAIL_ADDR_LEN]; char sSubject[DH_MAX_MAIL_SUBJECT_LEN]; }DH_MAIL_CFG; /*网络配置结构体*/ typedef struct{ DWORD
char WORD WORD WORD WORD WORD WORD
//邮件服务器IP地址 //邮件服务器端口 // 保留 // 用户名 // 用户密码 //目的地址 //抄送地址 //暗抄地址 //标题
dwSize;
sDevName[DH_MAX_NAME_LEN]; wTcpMaxConnectNum; wTcpPort; wUdpPort; wHttpPort; wHttpsPort; wSslPort;
// 设备主机名
// TCP最大连接数(一般指视 频数据请求数) // TCP帧听端口 // UDP侦听端口 // HTTP端口号 // HTTPS端口号 // SSL端口号
DH_ETHERNET DH_REMOTE_HOST DH_REMOTE_HOST DH_REMOTE_HOST DH_REMOTE_HOST DH_REMOTE_HOST DH_REMOTE_HOST DH_REMOTE_HOST char DH_REMOTE_HOST char DH_REMOTE_HOST DH_MAIL_CFG } DHDEV_NET_CFG;
stEtherNet[DH_MAX_ETHERNET_NUM];// 以太网口 struAlarmHost; // 报警服务器 struLogHost; // 日志服务器 struSmtpHost; //SMTP服务器 struMultiCast; // 多播组
struNfs; //NFS服务器 struFtpServer; //远程Ftp服务器 struPppoe; //PPPoE服务器
sPppoeIP[DH_MAX_IPADDR_LEN]; // PPPoE注册返回的IP struDdns; // DDNS服务器
sDdnsHostName[DH_MAX_HOST_NAMELEN]; // DDNS主机名 struDns; //DNS服务器 struMail; //邮件配置
***************************************************************************************
串口配置
*************************************************************************************** /* 串口基本属性 */ typedef struct {
BYTE byDataBit; BYTE byStopBit; BYTE byParity; BYTE byBaudRate; } DH_COMM_PROP;
//数据位 0-5,1-6,2-7,3-8
//停止位 0-1位, 1-1.5位, 2-2位 //校验位 0-no, 1-odd, 2-even
//{0-300,1-600,2-1200,3-2400,4-4800
5-9600,6-19200,7-38400,8-57600,9-115200}
/* 485解码器配置 */ typedef struct{
DH_COMM_PROP struComm; WORD WORD } DH_485_CFG;
wProtocol; //< 协议类型 保存协议的下标,动态变化 wDecoderAddress; //解码器地址:0 – 255
/* 232串口配置 */
typedef struct{
DH_COMM_PROP struComm; BYTE byFunction;
} DH_RS232_CFG; /* 串口配置结构体 */ typedef struct{
DWORD DWORD char
dwSize; //解码器协议 dwDecProListNum; //协议个数
DecProName[DH_MAX_DECPRO_LIST_SIZE][DH_MAX_NAME_LEN];
// 串口功能,对应串口配置取到的功能名列表
DH_485_CFG DWORD char
//协议名列表
stDecoder[DH_MAX_DECODER_NUM];//各解码器当前属性 dw232FuncNameNum; //232功能个数
s232FuncName[DH_MAX_232FUNCS][DH_MAX_NAME_LEN];
//功能名列表
//各232串口当前属性
DH_RS232_CFG st232[DH_MAX_232_NUM]; } DHDEV_COMM_CFG;
5 示例功能实现
根据需要多机连接自定义一个连接设备信息表DeviceList,用来保存当前的连接设备和状态, 对多窗口显示需要自定义一个显示窗口信息表SplitList,用来记录打开图像的信息和状态,具体结构根据功能需要增加,这里只定义数据结构基本内容;
Typedef struct DeviceNode{
LONG LoginID; //登录设备ID NET_DEVICEINFO Info; /设备信息 };
Typedef struct SplitNode{ };
Int Type; //显示类型, 可以是监视/回放/预览
LONG iHandle; //打开显示句柄,(监视通道句柄/回放句柄/预览句柄) Void *Param; //根据不同的显示类型,定义不同的参数
在应用程序初始化时调用CLIENT_Init(),其中断线回调用来处理当设备端口时应用程序需要做出的断开响应更新当前状态;
调用CLIENT_SetDVRMessCallBack()设置消息回调,其中回调函数用来处理设备状态的实时返回,如报警信息;
调用CLIENT_RigisterDrawFun()设置画板回调,其中回调函数用来处理叠加图像信息显示字符;如自定义显示osd时间或通道名称;
在应用程序退出时调用CLIENT_Cleanup()释放sdk内部的资源; 以下为具体功能实现
5.1 连接设备
调用CLIENT_Login()实现设备登录连接,其中需要输入设备IP等参数,返回登录ID和输出参数设备信息,赋值得到DeviceNode,增加到设备表中;
5.2 报警信息获取
要实现某设备报警信息获取必须在系统初始化时设置消息回调CLIENT_SetDVRMessCallBack(),在设备连接后调用该设备CLIENT_StartListen(),在不需要消息回调时或设备断开时调用CLIENT_StopListen()或CLENT_StartListenEx,在消息回调函数中根据参数lCommand确定报警类型,
如果调用的侦听接口为CLIENT_StartListen,则lCommand的可能值是:
-OMM_ALARM:填充数据为一个NET_CLIENT_STATE结构体。
-SHELTER_ALARM:填充数据为16个字节,每个字节表示一个视频通道的遮挡报警状态,1为有报
警,0为无报警
-DISK_FULL_ALARM,填充数据为1个DWORD值,1表示硬盘满,0表示硬盘未满。
-DISK_ERROR_ALARM:填充数据为1个DWORD值,按位表示最多32个硬盘的故障报警,每位为1
表示有报警,为0表示无报警。
-SOUND_DETECT_ALARM:填充数据为16个字节,每个字节表示一个视频通道的音频报警状态,1
为有报警,0为无报警
如果调用的侦听接口为CLENT_StartListenEx,则lCommand的可能值是:
-DH_ALARM_ALARM_EX:填充数据为16个字节,每个字节表示一个报警通道的报警状态,1为有报
警,0为无报警。
-DH_MOTION_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的动态检测报警状态,1为有报警,0为无报警。
-DH_VIDEOLOST_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的视频丢失报警状态,1为有报警,0为无报警。
-DH_SHELTER_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的遮挡(黑屏)报警状态,1为有报警,0为无报警。
-DH_SOUND_DETECT_ALARM_EX:填充数据为16个字节,每个字节表示一个视频通道的音频检测报警状态,1为有报警,0为无报警。
-DH_DISKFULL_ALARM_EX:填充数据为1个字节,1为有硬盘满报警,0为无报警。
-DH_DISKERROR_ALARM_EX:填充数据为32个字节,每个字节表示一个硬盘的故障报警状态,1为有报警,0为无报警。
5.3 系统配置
目前暂时用控件,先注册配置控件好,在需要的页面插入该控件,实现时要先将设备配置信息结构In_DeviceInfo配置控件有说明)传人控件,然后实现OnAskNHData和OnSaveNHData事件,一个获取配置信息显示,一个保存配置修改,具体根据事件中的命令参数获取各种不同的配置,分别可以调用
CLIENT_QueryDeviceTime(),CLIENT_QuerySystemInfo(),CLIENT_QueryChannelName(),CLIENT_QueryComProtocol(),CLIENT_QueryLog(),CLIENT_QueryConfig()等接
口,具体参照接口说明和配置控件说明;保存接口也一样;
5.4 实时监视
在设备连接的前提下,选择某个通道显示到指定的窗口,调用CLIENT_RealPlay()传入指定窗口的窗口句柄参数hWnd,返回监视句柄, 按照多窗口的设计需要应将相关的信息赋值到SplitNode结构,并标注本窗口的显示类型和定义相应参数结构,以便显示操作处理;
5.5 数据保存
可以根据监视句柄直接调用CLIENT_SaveRealData()将监视数据保存到指定文件; 也可以设置回调CLIENT_SetRealDataCallBack(),处理回调函数fRealDataCallBack()中不同的数据类型的数据,可以保存形成不同类型的数据文件;
5.6 回放/下载和进度指示
调用CLIENT_QueryRecordFile()先查询到录像文件信息,根据需要形成文件列表,再调用CLIENT_PlayBackByRecordFile()输入录像文件信息播放相应的文件显示到指定的窗口, 按照多窗口的设计需要应将相关的信息赋值到SplitNode结构,并标注本窗口的显示类型和定义相应参数结构,以便显示操作处理;
下载调用CLIENT_DownloadByRecordFile(),同样也返回下载句柄;
其中回放和下载的进度都可以通过其中的回调函数获取,根据不同的回放/下载句柄分别得到当前的进度;
5.7 播放控制
根据不同的控制需要和输入不同回放句柄调用CLIENT_PausePlayBack(), CLIENT_SeekPlayBack(),CLIENT_StopPlayBack(),CLIENT_StopPlayBack()等进行各种播放控制;
5.8 预览
在设备连接的前提下,选择某个通道显示到指定的窗口hWnd,调用CLIENT_MultiPlay ()返回监视句柄, 按照多窗口的设计需要应将相关的信息赋值到SplitNode结构,并标注本窗口的显示类型和定义相应参数结构,以便显示操作处理;
5.9 字符叠加
在初始化时调用的CLIENT_RigisterDrawFun()的回调处理实现中通过lPlayHandle参数
根据SplitNode中的Type的值,获取不同显示类型,根据需要可以hDC叠加不同的字符;其中hDC是对当前画面整屏窗口有效,如叠加字符,可以处理为hDC->textout(x,y,…);其中x,y为坐标。
因篇幅问题不能全部显示,请点此查看更多更全内容