#ifndef NETMODULE_H
#define NETMODULE_H

#include <stdlib.h>
#include <string.h>
#ifdef WIN32
#ifdef NETMODULE_EXPORTS
#define NET_SDK_API  extern "C" __declspec(dllexport)
#else
#define NET_SDK_API  extern "C" __declspec(dllimport)   //VC 用
#endif
#else
#define NET_SDK_API extern "C"
#endif

#ifdef WIN32
#ifndef CALL_METHOD
#define CALL_METHOD	__stdcall  //__cdecl
#endif
#else
#ifndef CALL_METHOD
#define CALL_METHOD	  //__cdecl
#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif
typedef   int   NET_SDK_BOOL;

#define   NET_SDK_TRUE   1

#define   NET_SDK_FALSE  0


///< 错误码
enum NET_SDK_ERR_CODE
{
	NET_SDK_NOERROR					= 0,							//< 没有错误
	NET_SDK_SUCCESS					= 1,							//< 返回成功
	NET_SDK_NOTVALID				= -10000,						//< 非法请求
	NET_SDK_NO_INIT					= -10001,						//< SDK未经初始化
	NET_SDK_ILLEGAL_PARAM			= -10002,						//< 用户参数不合法
	NET_SDK_INVALID_HANDLE			= -10003,						//< 句柄无效
	NET_SDK_UNINIT_ERROR			= -10004,						//< SDK清理出错
	NET_SDK_TIMEOUT					= -10005,						//< 等待超时
	NET_SDK_MEMORY_ERROR			= -10006,						//< 内存错误，创建内存失败
	NET_SDK_NET_ERROR				= -10007,						//< 网络错误
	NET_SDK_OPEN_FILE_ERROR			= -10008,						//< 打开文件失败
	NET_SDK_UNKNOWNERROR			= -10009,						//< 未知错误
	NET_SDK_DEV_VER_NOMATCH			= -11000,						//< 收到数据不正确，可能版本不匹配
	NET_SDK_NOTSUPPORT				= -11001,						//< 版本不支持

	NET_SDK_OPEN_CHANNEL_ERROR		= -11200,						//< 打开通道失败
	NET_SDK_CLOSE_CHANNEL_ERROR		= -11201,						//< 关闭通道失败
	NET_SDK_SUB_CONNECT_ERROR		= -11202,						//< 建立媒体子连接失败
	NET_SDK_SUB_CONNECT_SEND_ERROR	= -11203,						//< 媒体子连接通讯失败
	NET_SDK_CHN_NOTCONNECT			= -11204,						//  数字通道没有视频
	///< 用户管理部分错误码

	NET_SDK_NOPOWER					= -11300,						//< 无权限
	NET_SDK_PASSWORD_NOT_VALID		= -11301,						//< 账号密码不对
	NET_SDK_LOGIN_USER_NOEXIST		= -11302,						//< 用户不存在
	NET_SDK_USER_LOCKED				= -11303,						//< 该用户被锁定
	NET_SDK_USER_IN_BLACKLIST		= -11304,						//< 该用户不允许访问(在黑名单中)
	NET_SDK_USER_HAS_USED			= -11305,						//< 该用户以登陆
	NET_SDK_USER_NOT_LOGIN			= -11306,						//< 该用户没有登陆
	NET_SDK_CONNECT_DEVICE_ERROR    = -11307,						//< 可能设备不存在
	NET_SDK_ACCOUNT_INPUT_NOT_VALID = -11308,						//< 用户管理输入不合法
	NET_SDK_ACCOUNT_OVERLAP			= -11309,						//< 索引重复
	NET_SDK_ACCOUNT_OBJECT_NONE		= -11310,						//< 不存在对象, 用于查询时
	NET_SDK_ACCOUNT_OBJECT_NOT_VALID= -11311,						//< 不存在对象
	NET_SDK_ACCOUNT_OBJECT_IN_USE	= -11312,						//< 对象正在使用
	NET_SDK_ACCOUNT_SUBSET_OVERLAP	= -11313,						//< 子集超范围 (如组的权限超过权限表，用户权限超出组的权限范围等等)
	NET_SDK_ACCOUNT_PWD_NOT_VALID	= -11314,						//< 密码不正确
	NET_SDK_ACCOUNT_PWD_NOT_MATCH	= -11315,						//< 密码不匹配
	NET_SDK_ACCOUNT_RESERVED		= -11316,						//< 保留帐号
	NET_SDK_ACCOUNT_UNINIT			= -11317,						//< 未初始化

	///< 配置管理相关错误码

	NET_SDK_OPT_RESTART				= -11400,						//< 保存配置后需要重启应用程序
	NET_SDK_OPT_REBOOT				= -11401,						//< 需要重启系统
	NET_SDK_OPT_FILE_ERROR			= -11402,						//< 写文件出错
	NET_SDK_OPT_CAPS_ERROR			= -11403,						//< 配置特性不支持
	NET_SDK_OPT_VALIDATE_ERROR		= -11404,						//< 配置校验失败
	NET_SDK_OPT_CONFIG_NOT_EXIST	= -11405,						//< 请求或者设置的配置不存在

	/// 

	NET_SDK_CTRL_PAUSE_ERROR		= -11500,						//< 暂停失败
	NET_SDK_NOTFOUND				= -11501,						//< 查找失败，没有找到对应文件
	NET_SDK_CFG_NOT_ENABLE          = -11502,           			//< 配置未启用
	NET_SDK_SNAPBUFFER_NOT_ENOUGH	= -11503,						//< 抓图分配的的缓存空间不够

	NET_SDK_NONEWUPGRADEFILE		= -11550,						//< 服务器上没有最新的文件
	NET_SDK_ALREADYUPFRADENOW		= -11551,						//< 设备正在升级

};


///< 云台操作类型
enum NET_PTZ_ControlType
{
	NET_TILT_UP = 0,												//< 云台左
	NET_TILT_DOWN,													//< 云台右
	NET_PAN_LEFT,													//< 云台上
	NET_PAN_RIGHT,													//< 云台下
	NET_PAN_LEFTTOP,												//< 云台左上
	NET_PAN_LEFTDOWN,												//< 云台左下
	NET_PAN_RIGTHTOP,												//< 云台右上
	NET_PAN_RIGTHDOWN,												//< 云台右下
	NET_ZOOM_OUT,													//< 变倍小
	NET_ZOOM_IN,													//< 变倍大
	NET_FOCUS_FAR,													//< 焦点后调
	NET_FOCUS_NEAR,													//< 焦点前调
	NET_IRIS_OPEN,													//< 光圈扩大
	NET_IRIS_CLOSE,													//< 光圈缩小

	NET_EXTPTZ_OPERATION_ALARM,										//< 报警功能 
	NET_EXTPTZ_LAMP_ON,												//< 灯光开
	NET_EXTPTZ_LAMP_OFF,											//< 灯光关
	NET_EXTPTZ_POINT_SET_CONTROL,									//< 设置预置点 
	NET_EXTPTZ_POINT_DEL_CONTROL,									//< 清除预置点 
	NET_EXTPTZ_POINT_MOVE_CONTROL,									//< 转预置点
	NET_EXTPTZ_STARTPANCRUISE,										//< 开始水平旋转			
	NET_EXTPTZ_STOPPANCRUISE,										//< 停止水平旋转	
	NET_EXTPTZ_SETLEFTBORDER,										//< 设置左边界		
	NET_EXTPTZ_SETRIGHTBORDER,										//< 设置右边界
	NET_EXTPTZ_STARTLINESCAN,										//< 自动扫描开始
	NET_EXTPTZ_CLOSELINESCAN,										//< 自动扫描开停止
	NET_EXTPTZ_ADDTOLOOP,											//< 加入预置点到巡航	p1巡航线路	p2预置点值
	NET_EXTPTZ_DELFROMLOOP,											//< 删除巡航中预置点	p1巡航线路	p2预置点值
	NET_EXTPTZ_POINT_LOOP_CONTROL,									//< 开始巡航
	NET_EXTPTZ_POINT_STOP_LOOP_CONTROL,								//< 停止巡航
	NET_EXTPTZ_CLOSELOOP,											//< 清除巡航	p1巡航线路		
	NET_EXTPTZ_FASTGOTO,											//< 快速定位	
	NET_EXTPTZ_AUXIOPEN,											//< 辅助开关，关闭在子命令中
	NET_EXTPTZ_OPERATION_MENU,										//< 球机菜单操作，其中包括开，关，确定等等
	NET_EXTPTZ_REVERSECOMM,											//< 镜头翻转
	NET_EXTPTZ_OPERATION_RESET,										//< 云台复位
	NET_EXTPTZ_TOTAL,
};

#define PAN_AUTO						29							//< 云台以SS的速度左右自动扫描
#define SDK_NET_EXTPTZ_FASTGOTO			30							//< 三维定位

#define SDK_NET_MAX_CHANNUM 			32							//< 最大通道个数
#define SDK_NET_DECORDR_CH              16          				//< 最大解码通道个数
#define SDK_NET_MAX_USER_NUM			60							//< 最多用户数
#define SDK_NET_MAX_RIGTH_NUM			128							//< 最多权限数
#define SDK_NET_MAX_GROUP_NUM			50							//< 最多组数
#define SDK_NET_MAX_USER_LENGTH			32							//< 用户名密码最大长度
#define SDK_NET_MAX_COMBINE_NUM			2							//< 最大组合编码通道数
#define SDK_NET_MAX_DECORDR_CH          16          				//< 最大解码通道个数

#define SDK_NET_MAX_DDNS_TYPE			5							//< 支持的DDNS种类
#define SDK_NET_MAX_ARSP_TYPE			5							//< 支持的ARSP种类
#define SDK_NET_MAX_ALARMSERVER_TYPE    5           				//< 支持报警中心种类
#define SDK_NET_MAX_SYSFUNC				20							//< 最多系统功能个数
#define SDK_NET_MAX_PTZ_PROTOCOL_LENGTH 32							//< 云台协议名称最大长度
#define SDK_NET_N_WEEKS					7							//< 一个星期的天数
#define	SDK_NET_N_TSECT					6							//< 时间段数
#define SDK_NET_MD_REGION_ROW			32							//< 动态检测区域行数

#define SDK_NET_COVERNUM				8							//< 覆盖区域数
#define SDK_NET_MAX_FILTERIP_NUM		64							//< IP地址最大过滤数
#define SDK_NET_NAME_PASSWORD_LEN		64							//< 用户名密码最大长度
#define SDK_NET_MAX_PATH_LENGTH	        260							//< 路径最大长度
#define SDK_NET_N_MIN_TSECT				2							//< 
#define SDK_NET_MAX_RETURNED_LOGLIST	128							//< 一页日志的最多日志条数
#define SDK_NET_MAX_MAC_LEN             32          				//< MAC地址字符最大长度
#define SDK_NET_IW_ENCODING_TOKEN_MAX   128
#define SDK_NET_MAX_AP_NUMBER           10
#define SDK_NET_MAX_INFO_LEN		    128
#define SDK_NET_MAX_USERNAME_LENGTH		64							//< 用户名最大长度
#define SDK_NET_MAX_SERIALNO_LENGTH		128         				//< 最大解码通道个数
#define SDK_NET_MAX_MULTINET_NUM		8							//< 数字通道多连接的最大数目
#define SDK_NET_URL_ADDRESS_LENGTH	    256

///< DDNS参数
#define SDK_NET_MAX_DDNS_IDSIZE			64							//< 设备标识最大长度
#define SDK_NET_MAX_DDNS_NAMELEN		64							//< 主机名长度
#define SDK_NET_MAX_DDNS_PWDLEN			32							//< 密码长度
#define SDK_NET_MAX_DDNS_IPSIZE			64							//< IP地址长度
#define SDK_NET_MAX_SERIALINFO_SIZE		16							//< 序列号以及用户名长度

//智能分析
#define SDK_NET_MAX_ANALYIZE_CHANNEL    8							//< 最多的智能分析通道数

#define SDK_NET_ZHDL_AUDIO_NUM 16		//音频文件最大个数
#define SDK_NET_ZHDL_AUDIO_NAME_LEN 64	//音频文件名称最大长度

#define SDK_NET_PATH_NAME_LEN 128
#define SDK_NET_MAX_SIP_ID_LEN 64
#define SDK_NET_NAME_PASSWORD_LEN 64


#define SDK_NET_CUSTOM_TITLE_MAX_LINE      5
#define SDK_NET_CHANNEL_NAME_MAX_LEN	   64

///< DDNS服务器设备的信息
typedef struct _NET_DDNS_INFO
{
	char ID[SDK_NET_MAX_DDNS_IDSIZE];								//< 设备标识
	char IP[SDK_NET_MAX_DDNS_IPSIZE];								//< 内网IP
	int  WebPort;													//< Web端口,默认为80
	int  MediaPort;													//< 媒体TCP端口,默认为34567
	int  MobilePort;												//< 手机监控端口，默认为34599
	int  UPNPWebPort;												//< UPNP启动下Web端口,UPNP不开启为0
	int  UPNPMediaPort;												//< UPNP启动下媒体端口,UPNP不开启为0
	int  UPNPMobilePort;											//< UPNP启动下手机监控端口,UPNP不开启为0
	char Username[SDK_NET_MAX_DDNS_NAMELEN];						//< 用户名
	char Password[SDK_NET_MAX_DDNS_PWDLEN];							//< 密码
}NET_DDNS_INFO, *pNET_DDNS_INFO;

///< DDNS信息查询模式
typedef struct _NET_SearchMode
{
	int  nType;														//< 查询类型，见SearchModeType
	char szSerIP[SDK_NET_MAX_DDNS_IPSIZE];							//< 服务器地址
	int  nSerPort;													//< 服务器端口号
	char szSerialInfo[SDK_NET_MAX_SERIALINFO_SIZE];					//< 如果是按序列号，则为序列号，如果是用户名，则为用户名
}NET_SearchMode;

///< DDNS信息查询类型
enum NET_SearchModeType
{
	DDNS_SERIAL = 0,												//< 按序列号
	DDNS_USERNAME,													//< 按用户名
};

///< 实时预览扩展接口增加的参数: 预览类型
typedef enum _NET_SDK_RealPlayType
{
	NET_SDK_RType_Realplay = 0,										//< 实时预览
	NET_SDK_RType_Main_Realplay2,									//< 实时监视-主码流，等同于NET_SDK_RType_Realplay
	NET_SDK_RType_Main_Realplay3,
	NET_SDK_RType_Sub_Realplay_1,									//< 实时监视-辅码流1
	NET_SDK_RType_Sub_Realplay_2,									//< 实时监视-辅码流2
	NET_SDK_RType_Sub_Realplay_3,									//< 实时监视-辅码流3

	NET_SDK_RType_Multiplay_1,										//< 多画面预览－1画面
	NET_SDK_RType_Multiplay_4,										//< 多画面预览－4画面
	NET_SDK_RType_Multiplay_6,										//< 多画面预览－6画面
	NET_SDK_RType_Multiplay_8,										//< 多画面预览－8画面
	NET_SDK_RType_Multiplay_9,										//< 多画面预览－9画面
	NET_SDK_RType_Multiplay_12,										//< 多画面预览－12画面
	NET_SDK_RType_Multiplay_16,										//< 多画面预览－16画面
} NET_SDK_RealPlayType;

///< 组合编码模式
enum Net_SDK_CombinType
{
	NET_SDK_COMBIN_NONE,
	NET_SDK_COMBIN_1,
	NET_SDK_COMBIN_2,
	NET_SDK_COMBIN_3,
	NET_SDK_COMBIN_4,
	NET_SDK_COMBIN_5,
	NET_SDK_COMBIN_6,
	NET_SDK_COMBIN_7,
	NET_SDK_COMBIN_8,
	NET_SDK_COMBIN_9,
	NET_SDK_COMBIN_10,
	NET_SDK_COMBIN_11,
	NET_SDK_COMBIN_12,
	NET_SDK_COMBIN_13,
	NET_SDK_COMBIN_14,
	NET_SDK_COMBIN_15,
	NET_SDK_COMBIN_16,
	NET_SDK_COMBIN_1_4,
	NET_SDK_COMBIN_5_8,
	NET_SDK_COMBIN_9_12,
	NET_SDK_COMBIN_13_16,
	NET_SDK_COMBIN_1_8,
	NET_SDK_COMBIN_9_16,
	NET_SDK_COMBIN_1_9,
	NET_SDK_COMBIN_8_16,
	NET_SDK_COMBIN_1_16
};


///< 分辨率枚举 模拟通道
enum NET_SDK_CAPTURE_SIZE_t 
{
	NET_SDK_CAPTURE_SIZE_D1,										//< 720*576(PAL)	720*480(NTSC)
	NET_SDK_CAPTURE_SIZE_HD1,										//< 352*576(PAL)	352*480(NTSC)
	NET_SDK_CAPTURE_SIZE_HF1080,									//< 960*1080(PAL)	960*1080(NTSC)
	NET_SDK_CAPTURE_SIZE_CIF,										//< 352*288(PAL)	352*240(NTSC)
	NET_SDK_CAPTURE_SIZE_QCIF,										//< 176*144(PAL)	176*120(NTSC)
	NET_SDK_CAPTURE_SIZE_VGA,										//< 640*480(PAL)	640*480(NTSC)
	NET_SDK_CAPTURE_SIZE_QVGA,										//< 320*240(PAL)	320*240(NTSC)
	NET_SDK_CAPTURE_SIZE_H3M,										//< 960*1440
	NET_SDK_CAPTURE_SIZE_H4M,										//< 1280*1440
	NET_SDK_CAPTURE_SIZE_ND1,										//< 240*192
	NET_SDK_CAPTURE_SIZE_H5M = 9,									///< 1280X1944

	NET_SDK_CAPTURE_SIZE_650TVL,									//< 926*576
	NET_SDK_CAPTURE_SIZE_720P,										//< 1280*720
	NET_SDK_CAPTURE_SIZE_1_3M,										//< 1280*960
	NET_SDK_CAPTURE_SIZE_UXGA ,										//< 1600*1200
	NET_SDK_CAPTURE_SIZE_1080P,										//< 1920*1080
	NET_SDK_CAPTURE_SIZE_WUXGA,										//< 1920*1200
	NET_SDK_CAPTURE_SIZE_4M,										//< 2560*1440
	NET_SDK_CAPTURE_SIZE_3M,										//< 1920*1440
	NET_SDK_CAPTURE_SIZE_5M,										//< 2592*1944
	NET_SDK_CAPTURE_SIZE_6M,										//< 3072*2048
	NET_SDK_CAPTURE_SIZE_8M,										//< 3840*2160
	
	NET_SDK_CAPTURE_IMAGE_SIZE_3M_TS_2048_1520 = 25,
	NET_SDK_CAPTURE_IMAGE_SIZE_3M_TS_2304_1296,
	NET_SDK_CAPTURE_IMAGE_SIZE_4M_TS_2592_1520,
	NET_SDK_CAPTURE_IMAGE_SIZE_4M_TS_2688_1520,

	NET_SDK_CAPTURE_SIZE_NR=32,
};

///< 捕获码流控制模式类型
enum NET_SDK_capture_brc_t 
{
	NET_SDK_CAPTURE_BRC_CBR,										//< 固定码流
	NET_SDK_CAPTURE_BRC_VBR,										//< 可变码流
	NET_SDK_CAPTURE_BRC_MBR,										//< 混合码流
	NET_SDK_CAPTURE_BRC_NR											//< 枚举的码流控制模式数目。
};

///< 捕获压缩格式类型
enum NET_SDK_CAPTURE_COMP_t 
{
	NET_SDK_CAPTURE_COMP_DIVX_MPEG4,								//< DIVX MPEG4
	NET_SDK_CAPTURE_COMP_MS_MPEG4,									//< MS MPEG4
	NET_SDK_CAPTURE_COMP_MPEG2,										//< MPEG2
	NET_SDK_CAPTURE_COMP_MPEG1,										//< MPEG1
	NET_SDK_CAPTURE_COMP_H263,										//< H.263
	NET_SDK_CAPTURE_COMP_MJPG,										//< MJPG
	NET_SDK_CAPTURE_COMP_FCC_MPEG4,									//< FCC MPEG4
	NET_SDK_CAPTURE_COMP_H264,										//< H.264
	NET_SDK_CAPTURE_COMP_H265,										//< H.265
	NET_SDK_CAPTURE_COMP_H264H,										//< H.264+
	NET_SDK_CAPTURE_COMP_H265H,										//< H.265+
	NET_SDK_CAPTURE_COMP_NR											//< 枚举的压缩标准数目。
};

///< 捕获通道类型
enum NET_SDK_CAPTURE_CHANNEL_t 
{
	NET_SDK_CHL_MAIN_T = 0,											//< 主通道	－	主码流1 
	NET_SDK_CHL_2END_T = 1,											//< 辅通道	－	出辅码流2 
	NET_SDK_CHL_3IRD_T = 2,											//< 辅通道	－	出辅码流3 
	NET_SDK_CHL_4RTH_T = 3,											//< 辅通道	－	出辅码流4 
	NET_SDK_CHL_JPEG_T = 4,											//< 辅通道	－	出JPEG抓图 
	NET_SDK_CHL_FUNCTION_NUM
};
///< 音频编码类型
enum NET_SDK_AudioEncodeTypes
{
	NET_SDK_AUDIO_ENCODE_NONE = 0,
	NET_SDK_AUDIO_ENCODE_G729_8KBIT,
	NET_SDK_AUDIO_ENCODE_G726_16KBIT,
	NET_SDK_AUDIO_ENCODE_G726_24KBIT,
	NET_SDK_AUDIO_ENCODE_G726_32KBIT,
	NET_SDK_AUDIO_ENCODE_G726_40KBIT,
	NET_SDK_AUDIO_ENCODE_PCM_8TO16BIT,
	NET_SDK_AUDIO_ENCODE_PCM_ALAW,
	NET_SDK_AUDIO_ENCODE_PCM_ULAW,
	NET_SDK_AUDIO_ENCODE_ADPCM8K16BIT,
	NET_SDK_AUDIO_ENCODE_ADPCM16K16BIT,
	NET_SDK_AUDIO_ENCODE_G711_ALAW,
	NET_SDK_AUDIO_ENCODE_MPEG2_LAYER1,
	NET_SDK_AUDIO_ENCODE_AMR8K16BIT,
	NET_SDK_AUDIO_ENCODE_G711_ULAW,
	NET_SDK_AUDIO_ENCODE_IMA_ADPCM_8K16BIT,
	NET_SDK_AUDIO_ENCODE_TYPES_NR,
};


///< 配置类型
typedef enum _NET_SDK_CONFIG_TYPE
{
	NET_SDK_CONFIG_NOTHING = 0,										//<
	NET_SDK_CONFIG_USER,											//< 用户信息, 包含了权限列表, 用户列表和组列表
	NET_SDK_CONFIG_ADD_USER,										//< 增加用户
	NET_SDK_CONFIG_MODIFY_USER,										//< 修改用户
	NET_SDK_CONFIG_DELETE_USER,										//< 删除用户
	NET_SDK_CONFIG_ADD_GROUP,										//< 增加组
	NET_SDK_CONFIG_MODIFY_GROUP,									//< 修改组
	NET_SDK_COFIG_DELETE_GROUP,										//< 删除组
	NET_SDK_CONFIG_MODIFY_PSW,										//< 修改密码
	NET_SDK_CONFIG_ABILITY_SYSFUNC,									//< 支持的网络功能
	NET_SDK_CONFIG_ABILTY_ENCODE,									//< 编码能力
	NET_SDK_CONFIG_ABILITY_PTZPRO,									//< 云台协议
	NET_SDK_COMFIG_ABILITY_COMMPRO,									//< 串口协议
	NET_SDK_CONFIG_ABILITY_MOTION_FUNC,								//< 动态检测块
	NET_SDK_CONFIG_ABILITY_BLIND_FUNC,								//< 视频遮挡块
	NET_SDK_CONFIG_ABILITY_DDNS_SERVER,								//< DDNS服务支持类型
	NET_SDK_CONFIG_ABILITY_TALK,									//< 对讲编码类型
	NET_SDK_CONFIG_SYSINFO,											//< 系统信息
	NET_SDK_CONFIG_SYSNORMAL,										//< 普通配置
	NET_SDK_CONFIG_SYSENCODE,										//< 编码配置
	NET_SDK_CONFIG_SYSNET,											//< 网络设置
	NET_SDK_CONFIG_PTZ,												//< 云台页面
	NET_SDK_CONFIG_COMM,											//< 串口页面
	NET_SDK_CONFIG_RECORD,											//< 录像设置界面
	NET_SDK_CONFIG_MOTION,											//< 动态检测页面
	NET_SDK_CONFIG_SHELTER,											//< 视频遮挡
	NET_SDK_CONFIG_VIDEO_LOSS,  									//< 视频丢失,
	NET_SDK_CONFIG_ALARM_IN,										//< 报警输入
	NET_SDK_CONFIG_ALARM_OUT,										//< 报警输出
	NET_SDK_CONFIG_DISK_MANAGER,									//< 硬盘管理界面
	NET_SDK_CONFIG_OUT_MODE,										//< 输出模式界面
	NET_SDK_CONFIG_CHANNEL_NAME,									//< 通道名称
	NET_SDK_CONFIG_AUTO,											//< 自动维护界面配置
	NET_SDK_CONFIG_DEFAULT,     									//< 恢复默认界面配置
	NET_SDK_CONFIG_DISK_INFO,										//< 硬盘信息
	NET_SDK_CONFIG_LOG_INFO,										//< 查询日志
	NET_SDK_CONFIG_NET_IPFILTER,									//< IP地址过滤
	NET_SDK_CONFIG_NET_DHCP,										//< DHCP配置
	NET_SDK_CONFIG_NET_DDNS,										//< DDNS配置
	NET_SDK_CONFIG_NET_EMAIL,										//< 电子邮件配置
	NET_SDK_CONFIG_NET_MULTICAST,									//< 多播配置
	NET_SDK_CONFIG_NET_NTP,											//< NTP配置
	NET_SDK_CONFIG_NET_PPPOE,										//< PPPOE配置
	NET_SDK_CONFIG_NET_DNS,											//< DNS配置
	NET_SDK_CONFIG_NET_FTPSERVER,									//< FTP服务器配置
	NET_SDK_CONFIG_SYS_TIME,										//< 系统时间配置
	NET_SDK_CONFIG_CLEAR_LOG,										//< 清除日志
	NET_SDK_REBOOT_DEV,												//< 重启启动设备
	NET_SDK_CONFIG_ABILITY_LANG,									//< 支持语言
	NET_SDK_CONFIG_VIDEO_FORMAT,									//< 视频格式
	NET_SDK_CONFIG_COMBINEENCODE,									//< 组合编码
	NET_SDK_CONFIG_EXPORT,											//< 配置导出
	NET_SDK_CONFIG_IMPORT,											//< 配置导入
	NET_SDK_LOG_EXPORT,												//< 日志导出
	NET_SDK_CONFIG_COMBINEENCODEMODE,								//< 组合编码模式
	NET_SDK_WORK_STATE,												//< 运行状态
	NET_SDK_ABILITY_LANGLIST,										//< 实际支持的语言集
	NET_SDK_CONFIG_NET_ARSP,										//< ARSP配置					
	NET_SDK_CONFIG_SNAP_STORAGE,									//< 抓图存储配置
	NET_SDK_CONFIG_NET_3G,											//< 3G拨号配置
	NET_SDK_CONFIG_NET_MOBILE,										//< 移动监控配置
	NET_SDK_CONFIG_UPGRADEINFO,										//< 获取升级信息
	NET_SDK_CONFIG_NET_DECODER,										//< 
	NET_SDK_ABILITY_VSTD,											//< 实际支持的视频制式
	NET_SDK_CONFIG_ABILITY_VSTD,									//< 支持视频制式
	NET_SDK_CONFIG_NET_UPNP,										//< UPUN设置
	NET_SDK_CONFIG_NET_WIFI,										//< WIFI
	NET_SDK_CONFIG_NET_WIFI_AP_LIST,								//< WIFI节点列表
	NET_SDK_CONFIG_SYSENCODE_SIMPLIIFY,								//< 简化的编码配置
	NET_SDK_CONFIG_ALARM_CENTER,									//< 告警中心
	NET_SDK_CONFIG_NET_ALARM,										//< 网络告警
	NET_SDK_VIDEO_PREVIEW,											//< 预览
	NET_SDK_CONFIG_ABILITY_SERIALNO,								//< 序列号
	NET_SDK_CONFIG_NET_RTSP,										//< RTSP
	NET_SDK_CONFIG_NET_XMWST,										//< 厦门威思通
	NET_SDK_GUISET,													//< GUISET
	NET_SDK_CATCHPIC,												//< 抓图
	NET_SDK_VIDEOCOLOR,												//< 视频颜色设置
	NET_SDK_CAMERAPARAM,											//< 摄像机参数
	NET_SDK_NETDECORDER,											//< 数字通道解码器
	NET_SDK_IPC_SYNCTIME,											//< IPC时同步本地时间, Set有效, 无Get
	NET_SDK_CONFIG_NET_DANALE,										//< 大拿科技云平台
	NET_SDK_CONFIG_NET_LT,											//< 浪涛科技云平台
	NET_SDK_CONFIG_RS485,											//< 传送的数据结构和NET_SDK_CONFIG_PTZ一样
	NET_SDK_CONFIG_ABILITY_RS485,									//< 云台协议
	NET_SDK_CONFIG_CHANNEL_MODE,                                    //< 通道模式
	NET_SDK_CONFIG_NET_AUTOUPGRADE,									//< 自动升级
	NET_SDK_CONFIG_NET_DAS,											//< 300平台DAS服务器
	NET_SDK_ABILITY_ANALY,											//< 智能分析能力级别
	NET_SDK_CONFIG_INTELALALY,										//< 智能分析
	NET_SDK_CONFIG_INTELALALYLINK,									//< 智能联动
	NET_SDK_CPC_CLEARDATA,											//< 清楚人数统计
	NET_SDK_CONFIG_VIDEOOUT,										//< 输出分辨率
	NET_SDK_CONFIG_ABILITY_SEARCHPRO,								//< NVR支持的搜索协议
	NET_SDK_CONFIG_YLTXCLOUD,										//< 云领天下，云配置界面
	NET_SDK_CONFIG_ANNIDDNS,                                        //< Anni DDNS 配置界面
	NET_SDK_CONFIG_NETPORT,											//< 获得额外的网络端口
	NET_SDK_CONFIG_ANNITCP,											//< Anni TCPport
	NET_SDK_CONFIG_CHANGECHANWND,									//< 切换NVR 数字通道所在窗口
	NET_SDK_CONFIG_OEM,												// < 获取OEM 信息
	NET_SDK_CONFIG_WND_N0,											// < 修改窗口分割
	NET_SDK_CONFIG_TEST_MAIL,										// < 
	NET_SDK_CONFIG_TEST_SHELL,										// < shell 设置
	NET_SDK_CONFIG_NET_TUTK,										// < TUTK 云
	NET_SDK_CONFIG_NET_UMEYE,										// < 万佳安DAS
	NET_SDK_CONFIG_NET_WJADAS,
	NET_SDK_NETDECORDER_V4,											// < 数字通道配，兼容RTSP 协议扩展
	NET_SDK_CONFIG_HDDTEST,										    // < HDD测试
	NET_SDK_CONFIG_PROJECT,                                         // < 播放计划
	NET_SDK_CONFIG_LED,												// < 跑马灯
	NET_SDK_CONFIG_DIGIENCODE,										// < 数字通道的编码配置
	NET_SDK_CONFIG_NET_DROPBOX,										// < DROPBOX
	NET_SDK_CONFIG_TIMEZONE,										// < 时区
	NET_SDK_CONFIG_SCANMODE,                                        // < 信号源
	NET_SDK_CONFIG_NETIPVERSION,									// < IP协议版本
	NET_SDK_CONFIG_NETIPV6COMMON,									// < IPV6网络设置
	NET_SDK_CONFIG_ABILITY_LOCATION,								// < 3G协议
	NET_SDK_CONFIG_ABILITY_ISP,										// < 3G
	NET_SDK_CONFIG_NET_8021X,										// < 8021X
	NET_SDK_CONFIG_NET_GB28181,										// <GB28181配置
	NET_SDK_CONFIG_DEVICE_CATALOG,									///<设备目录结构，用于28181协议
	NET_SDK_CONFIG_CUSTOM_EXPORT,									///<配置信息导出
	NET_SDK_CONFIG_OPERATIONMONITOR,								///
	NET_SDK_CONFIG_CUSTOM_TITLE,
	NET_SDK_CONFIG_APPCLOUDIDGET,									///云ID获取
	NET_SDK_CONFIG_NETPLAT_ZSKJ,									///ZSKJ云配置	
	NET_SDK_CONFIG_DOORMSG,											///门铃留言配置
	NET_SDK_CONFIG_DOORRING,										///门铃铃声设置
	NET_SDK_CONFIG_DOORGENERAL,										///门铃普通配置
	NET_SDK_CONFIG_DOORDISPLAY,										///门铃输入
	NET_SDK_CONFIG_EXTRA_RECORD,									///辅码流配置
	NET_SDK_CONFIG_DAID,											//大拿云ID 烧入
	NET_SDK_CONFIG_GOOGLEDRIVE,										//谷歌Drive
	NET_SDK_CONFIG_NET_SNMP,										//SNMP配置
	NET_SDK_CONFIG_ISP_CAMERA,			
	NET_SDK_ABILITY_CAMERA,									//摄像头能力集
	NET_SDK_CONFIG_NET_DLSX,                                //动力视迅
	NET_SDK_CONFIG_FACE_CAPTURE,									//人脸抓拍
	NET_SDK_CONFIG_SNEDIDFILE,										//写入ID 文件，韬视设备不支持
	NET_SDK_CONFIG_NET_WEEK,										//星期设置
}NET_SDK_CONFIG_TYPE;


///< 报警事件码
enum NET_SDK_EventCodeTypes
{
	NET_SDK_EVENT_CODE_INIT = 0,
	NET_SDK_EVENT_CODE_LOCAL_ALARM = 1,								//< 本地报警
	NET_SDK_EVENT_CODE_NET_ALARM,									//< 网络报警
	NET_SDK_EVENT_CODE_MANUAL_ALARM,								//< 手动报警
	NET_SDK_EVENT_CODE_VIDEO_MOTION,								//< 动态检测
	NET_SDK_EVENT_CODE_VIDEO_LOSS,		 							//< 视频丢失
	NET_SDK_EVENT_CODE_VIDEO_BLIND,									//< 视频遮挡
	NET_SDK_EVENT_CODE_VIDEO_TITLE,									//< 通道名称
	NET_SDK_EVENT_CODE_VIDEO_SPLIT,									//< 画面切割
	NET_SDK_EVENT_CODE_VIDEO_TOUR,									//< 云台巡航
	NET_SDK_EVENT_CODE_STORAGE_NOT_EXIST,							//< 无存储介质
	NET_SDK_EVENT_CODE_STORAGE_FAILURE,								//< 存储失败
	NET_SDK_EVENT_CODE_LOW_SPACE,									//< 磁盘空间不足
	NET_SDK_EVENT_CODE_NET_ABORT,									//< 网络丢失
	NET_SDK_EVENT_CODE_COMM,										//< 串口
	NET_SDK_EVENT_CODE_STORAGE_READ_ERROR,							//< 读磁盘错误
	NET_SDK_EVENT_CODE_STORAGE_WRITE_ERROR,							//< 写磁盘错误
	NET_SDK_EVENT_CODE_NET_IPCONFLICT,								//< IP冲突
	NET_SDK_EVENT_CODE_ALARM_EMERGENCY,								//< 紧急告警
	NET_SDK_EVENT_CODE_DEC_CONNECT,									//< IPC上线提示
	NET_SDK_EVENT_CODE_UPGRADE,										//< 升级
	NET_SDK_EVENT_CODE_BACKUP,
	NET_SDK_EVENT_CODE_Shutdown,									//死机
	NET_SDK_EVENT_CODE_REBOOT,
	NET_SDK_EVENT_CODE_NEWFILE,										
	NET_SDK_EVENT_CODE_ANALYZE,	                                    //智能报警
	NET_SDK_EVENT_CODE_SOUNDLIGHT,
	NET_SDK_EVENT_CODE_RFM433,
	NET_SDK_EVENT_CODE_NR,
};

///< 编码配置的类型
enum NET_SDK_ENCODE_TYPE_BY_RECORD
{
	NET_SDK_ENCODE_TYPE_TIM = 0,
	NET_SDK_ENCODE_TYPE_MTD = 1,
	NET_SDK_ENCODE_TYPE_ALM = 2,
	NET_SDK_ENCODE_TYPE_NUM = 3,
	NET_SDK_ENCODE_TYPE_SNAP_TIMER = 0,								//< 定时抓图
	NET_SDK_ENCODE_TYPE_SNAP_TRIGGER = 1,							//< 触发抓图
};

///< 辅码流类型
#define NET_SDK_EXTRATYPES 3 

///< 网络传输策略
enum NET_SDK_TransferPolicy
{
	NET_SDK_TRANSFER_POLICY_AUTO,									//< 自适应
	NET_SDK_TRANSFER_POLICY_QUALITY,								//< 质量优先
	NET_SDK_TRANSFER_POLICY_FLUENCY,								//< 流量优先
	NET_SDK_TRANSFER_POLICY_NR,
};

enum  NET_SDK_DebugTestType
{
	NET_SDK_SYSTEM_TEST_MAIL,										// < 
	NET_SDK_SYSTEM_TEST_SHELL,										// < shell 设置
	NET_SDK_SYSTEM_TEST_HDD,										// < 硬盘测试
	NET_SDK_SYSTEM_TEST_NR											// 
};

///< 矩形框
typedef struct 
{
	int left;
	int top;
	int right;
	int bottom;
}NET_SDK_Rect;

///< 音频输入格式，语音对讲用
struct NET_SDK_AudioInFormatConfig
{
	int iBitRate;													//< 码流大小, kbps为单位, 比如192kbps, 128kbps
	int iSampleRate;												//< 采样率，Hz为单位，比如44100Hz
	int iSampleBit;													//< 采样的位深
	int iEncodeType;												//< 编码方式，参照AudioEncodeTypes定义
};

///< 语音对讲格式
typedef enum __NET_TALK_CODING_TYPE
{
	NET_SDK_TALK_DEFAULT = 0,
	NET_SDK_TALK_PCM = 1,											//< PCM
	NET_SDK_TALK_G711a,												//< G711a
	NET_SDK_TALK_AMR,												//< AMR
	NET_SDK_TALK_G711u,												//< G711u
	NET_SDK_TALK_G726,												//< G726
}NET_SDK_TALK_CODING_TYPE;

//语音对讲
typedef struct  
{
	NET_SDK_TALK_CODING_TYPE		encodeType;						//< 编码类型
	int								nAudioBit;						//< 用实际的值表示，如8位 则填值为8
	unsigned int					dwSampleRate;					//< 采样率，如16k 则填值为16000
	char							reserved[64];
}NET_SDK_TALKDECODE_INFO;

/// 系统时间结构
typedef struct NET_SDK_SYSTEM_TIME
{
	int  year;														//< 年   
	int  month;														//< 月, January = 1, February = 2, 依次类推   
	int  day;														//< 日   
	int  wday;														//< 星期,Sunday = 0, Monday = 1, 依次类推   
	int  hour;														//< 时   
	int  minute;													//< 分   
	int  second;													//< 秒。   
	int  isdst;														//< 夏令时标识。   
}NET_SDK_SYSTEM_TIME;

///时区
struct NET_SDK_TimeZoneConfig
{
	int iFirstUserTimeZone;		///< 
	int iTimeMin;			///< 分钟
};

///信号源
struct NET_SDK_ScanModeConfigAll
{
	int sCanModeConfigAll[SDK_NET_MAX_CHANNUM];
};


///< 录像设置相关结构体 时间段
typedef struct NET_SDK_TIMESECTION
{
	int enable;														//< 使能
	int startHour;													//< 开始时间:小时
	int	startMinute;												//< 开始时间:分钟
	int	startSecond;												//< 开始时间:秒钟
	int	endHour;													//< 结束时间:小时
	int	endMinute;													//< 结束时间:分
	int	endSecond;													//< 结束时间:秒钟
}NET_SDK_TIMESECTION;	

///< 时间结构
typedef struct
{
	int dwYear;														//< 年
	int dwMonth;													//< 月
	int dwDay;														//< 日
	int dwHour;														//< 时
	int dwMinute;													//< 分
	int dwSecond;													//< 秒
}NET_SDK_TIME,*LPNET_SDK_TIME;

///< 时间结构
typedef struct _NEW_NET_SDK_TIME											
{
	unsigned int second			:6;									//<	秒	1-60		
	unsigned int minute			:6;									//<	分	1-60		
	unsigned int hour			:5;									//<	时	1-24		
	unsigned int day			:5;									//<	日	1-31		
	unsigned int month			:4;									//<	月	1-12		
	unsigned int year			:6;									//<	年	2000-2063	
}NEW_NET_SDK_TIME, *LPNEWNET_SDK_TIME;

///< 夏令时结构
struct NET_SDK_DSTPoint
{
	int	iYear;														//< 年
	int	iMonth;														//< 月
	int	iWeek;														//< 周1:first  to2 3 4 -1:last one   0:表示使用按日计算的方法[-1,4]
	int	iWeekDay;													//< 星期,[0, 6] sunday = 0
	int Hour;														//< 时
	int Minute;														//< 分
};

///< 视频格式
struct NET_SDK_VIDEO_FORMAT
{
	int		iCompression;											//< 压缩模式 	
	int		iResolution;											//< 分辨率 参照枚举CaptureImageSize 	
	int		iBitRateControl;										//< 码流控制 参照枚举CaptureBitrateControlType	
	int		iQuality;												//< 码流的画质 档次1-6		
	int		nFPS;													//< 帧率值，NTSC/PAL不区分,负数表示多秒一帧		
	int		nBitRate;												//< 0-4096k,该列表主要由客户端保存，设备只接收实际的码流值而不是下标。
	int		iGOP;													//< 描述两个I帧之间的间隔时间，2-12 
};

///< 音频格式
struct  NET_SDK_AUDIO_FORMAT
{
	int		nBitRate;												//< 码流kbps	
	int		nFrequency;												//< 采样频率	
	int		nMaxVolume;												//< 最大音量阈值
};

///< 媒体格式
struct NET_SDK_MEDIA_FORMAT
{
	NET_SDK_VIDEO_FORMAT vfFormat;									//< 视频格式定义 			
	NET_SDK_AUDIO_FORMAT afFormat;									//< 音频格式定义 
	bool				 bVideoEnable;								//< 开启视频编码 
	bool				 bAudioEnable;								//< 开启音频编码 	
} ;

///< IP地址格式
typedef union 
{	
	unsigned char	c[4];											//< IPv4 c[0].c[1].c[2].c[3] -- xxx.xxx.xxx.xxx
	unsigned short	s[2];
	unsigned int 	l;
}NET_SDK_CONFIG_IPAddress;

//*********** 用户帐号管理相关结构体**************//

///<  此结构供其他结构体使用
typedef struct 
{
	char name[SDK_NET_MAX_USER_LENGTH];
}NET_OPR_RIGHT;

///< 用户信息
typedef struct
{
	int			rigthNum;											//< 具有的权限的数目
	char		rights[SDK_NET_MAX_RIGTH_NUM][SDK_NET_MAX_USER_LENGTH];		//< 权限列表
	char		groupname[SDK_NET_MAX_USER_LENGTH];					//< 所在用户组组名称
	char		memo[SDK_NET_MAX_USER_LENGTH];						//< 备注(描述)
	char		name[SDK_NET_MAX_USER_LENGTH];						//< 用户名
	char		passWord[SDK_NET_MAX_USER_LENGTH];					//< 密码
	bool		reserved;											//< 是否保留
	bool		shareable;											//< 本用户是否允许复用 1-复用，0-不复用
	int			iEncryptType;										//< 加密方式 NET_SDK_PASSWORDENCRYPT（IPC不加密，DVR加密方式为MD5）
	bool		TimeJudge;											//< 时间判断  大于（）为true
}NET_SDK_USER_INFO;

enum NET_SDK_PASSWORDENCRYPT
{
	PASSWORD_PLAIN,		///< 密码不加密方式
	PASSWORD_MD5,		///< MD5密码加密方式
	PASSWORD_3DES,		///< 3DES加密方式
	PASSWORD_HSQD,		///<客户黄山奇盾特殊加密方式(只判断，不校验)
	PASSWORD_NR,		///< 加密种类
};

///< 组信息
typedef struct 
{
	int			rigthNum;											//< 组的权限个数
	char		memo[SDK_NET_MAX_USER_LENGTH];						//< 备注
	char		name[SDK_NET_MAX_USER_LENGTH];						//< 组名称
	char		rights[SDK_NET_MAX_RIGTH_NUM][SDK_NET_MAX_USER_LENGTH];	//< 权限列表
}NET_SDK_USER_GROUP_INFO;

///< 用户信息配置结构
typedef struct
{
	int						rigthNum;								//< 权限数目
	NET_OPR_RIGHT			rightList[SDK_NET_MAX_RIGTH_NUM];		//< 权限列表
	int						groupNum;								//< 组数目
	NET_SDK_USER_GROUP_INFO	groupList[SDK_NET_MAX_GROUP_NUM];		//< 组列表
	int						userNum;								//< 用户数目
	NET_SDK_USER_INFO		userList[SDK_NET_MAX_USER_NUM];			//< 用户列表
}NET_SDK_USER_MANAGE_INFO;

///< 修改用户请求
typedef struct
{
	char				    UserName[SDK_NET_MAX_USER_LENGTH];		//< 用户名
	NET_SDK_USER_INFO		User;									//< 用户信息
}NET_SDK_CONF_MODIFYUSER;

///< 修改组请求
typedef struct
{
	char					GroupName[SDK_NET_MAX_USER_LENGTH];		//< 组名称
	NET_SDK_USER_GROUP_INFO Group;									//< 组信息
}NET_SDK_CONF_MODIFYGROUP;


///< 修改用户密码请求
struct NET_SDK_CONF_MODIFY_PSW
{
	int						iEncryptType;							//< 加密方式 NET_SDK_PASSWORDENCRYPT（IPC不加密，DVR加密方式为MD5）
	char					sUserName[SDK_NET_MAX_USER_LENGTH];		//< 用户名
	char					Password[SDK_NET_MAX_USER_LENGTH];		//< 用户旧密码
	char					NewPassword[SDK_NET_MAX_USER_LENGTH];	//< 用户新密码
};

///< 普通配置页结构体  
///< 命令ID: NET_SDK_CONFIG_SYSNORMAL
typedef struct
{	
	NET_SDK_SYSTEM_TIME sysTime;									//< 系统时间
	int iLocalNo;													//< 本机编号:[0, 998]
	int iOverWrite;													//< 硬盘满时处理 "OverWrite", "StopRecord"		
	int iSnapInterval;												//< 定时抓图的时间间隔, 以秒为单位 
	char sMachineName[64];											//< 机器名
	int iVideoStartOutPut;											//< 输出模式
	int iAutoLogout;												//< 本地菜单自动注销(分钟)	[0, 120]
	int iVideoFormat;												//< 视频制式:"PAL", "NTSC", "SECAM"
	int iLanguage;													//< 语言选择:"English", "SimpChinese", "TradChinese", "Italian", "Spanish", "Japanese", "Russian", "French", "German", ...	
	int iDateFormat;												//< 日期格式:"YYMMDD", "MMDDYY", "DDMMYY"
	int iDateSeparator;												//< 日期分割符:".", "-", "/"
	int iTimeFormat;												//< 时间制式:"12", "24"
	int iDSTRule;													//< 夏令时规则 
	int iWorkDay;													//< 工作日
	NET_SDK_DSTPoint dDSTStart;										//< 起始时间
	NET_SDK_DSTPoint dDSTEnd;										//< 结束时间
	
}NET_SDK_CONFIG_NORMAL;

//*========================以下编码配置相关========================//

//< 单个通道编码设置
//< 命令ID: NET_SDK_CONFIG_SYSENCODE
struct NET_SDK_CONFIG_ENCODE
{
	NET_SDK_MEDIA_FORMAT dstMainFmt[NET_SDK_ENCODE_TYPE_NUM];		//< 主码流格式 	
	NET_SDK_MEDIA_FORMAT dstExtraFmt[NET_SDK_EXTRATYPES];			//< 辅码流格式 
	NET_SDK_MEDIA_FORMAT dstSnapFmt[NET_SDK_ENCODE_TYPE_NUM];		//< 抓图格式 
};

//< 全部通道编码设置
//< 命令ID: NET_SDK_CONFIG_SYSENCODE
struct  NET_SDK_EncodeConfigAll
{
	NET_SDK_CONFIG_ENCODE vEncodeConfigAll[SDK_NET_MAX_CHANNUM];	//< 通道编码设置列表
};

///< 单通道编码设置 
///< 命令ID: NET_SDK_CONFIG_SYSENCODE_SIMPLIIFY
struct NET_SDK_CONFIG_ENCODE_SIMPLIIFY
{
	NET_SDK_MEDIA_FORMAT dstMainFmt;								//< 主码流格式 	
	NET_SDK_MEDIA_FORMAT dstExtraFmt;								//< 辅码流格式 
};

///< 全通道编码配置
///< 命令ID: NET_SDK_CONFIG_SYSENCODE_SIMPLIIFY
struct NET_SDK_EncodeConfigAll_SIMPLIIFY
{
	NET_SDK_CONFIG_ENCODE_SIMPLIIFY vEncodeConfigAll[SDK_NET_MAX_CHANNUM]; //< 通道编码设置列表
};

///< 组合编码
///< 命令ID: NET_SDK_CONFIG_COMBINEENCODE
struct NET_SDK_CombineEncodeConfigAll
{
	NET_SDK_CONFIG_ENCODE vEncodeConfigAll[SDK_NET_MAX_COMBINE_NUM];
};

///< 单通道组合编码模式
///< 命令ID: NET_SDK_CONFIG_COMBINEENCODEMODE
struct NET_SDK_CombEncodeParam
{
	int iEncodeMode;	 //见Net_SDK_CombinType
};

///< 全通道组合编码模式
///< 命令ID: NET_SDK_CONFIG_COMBINEENCODEMODE
struct NET_SDK_CombEncodeModeAll
{
	NET_SDK_CombEncodeParam vEncodeParam[SDK_NET_MAX_COMBINE_NUM];	//< 列表
};

///< 视频物件结构
struct  NET_SDK_VIDEO_WIDGET
{
	unsigned int rgbaFrontground;									//< 物件的前景MakeRGB，和透明度	
	unsigned int rgbaBackground;									//< 物件的后景MakeRGB，和透明度	
	NET_SDK_Rect	rcRelativePos;									//< 物件边距与整长的比例*8191
	bool	bPreviewBlend;											//< 预览叠加	
	bool	bEncodeBlend;											//< 编码叠加
};

///< 单个通道视频物件设置
///< 命令ID: NET_SDK_CONFIG_OUT_MODE
struct NET_SDK_CONFIG_VIDEOWIDGET
{
	NET_SDK_VIDEO_WIDGET	dstCovers[SDK_NET_COVERNUM];			//< 区块列表
	NET_SDK_VIDEO_WIDGET	ChannelTitle;							//< 通道名OSD
	NET_SDK_VIDEO_WIDGET	TimeTitle;								//< 时间0SD
	struct 
	{
		char strName[SDK_NET_NAME_PASSWORD_LEN];					//< 通道名
	}ChannelName;													//< 通道名称
	int				iCoverNum;										//< 当前该通道有几个叠加的区域
};

///< 全通道视频物件设置
///< 命令ID: NET_SDK_CONFIG_OUT_MODE
struct NET_SDK_VideoWidgetConfigAll
{
	NET_SDK_CONFIG_VIDEOWIDGET vVideoWidegetConfigAll[SDK_NET_MAX_CHANNUM];
};

///< 视频颜色
struct NET_SDK_VIDEOCOLOR_PARAM
{
	int	nBrightness;												//< 亮度	0-100
	int	nContrast;													//< 对比度	0-100
	int	nSaturation;												//< 饱和度	0-100
	int	nHue;														//< 色度	0-100
	int	mGain;														//< 增益	0-100 第7位置1表示自动增益		
	int	mWhitebalance;												//< 自动白电平控制，bit7置位表示开启自动控制.0x0,0x1,0x2分别代表低,中,高等级
	int nAcutance;          										//< 锐度   0-15
};

///< 视频颜色设置
struct NET_SDK_VIDEOCOLOR_ST
{
	NET_SDK_TIMESECTION			tsTimeSection;						//< 时间段
	NET_SDK_VIDEOCOLOR_PARAM	dstColor;							//< 颜色定义
	int							iEnable;							//< 使能	
};

///< 单个通道视频颜色设置
///< 命令ID: NET_SDK_VIDEOCOLOR
struct NET_SDK_CONFIG_VIDEOCOLOR
{
	NET_SDK_VIDEOCOLOR_ST dstVideoColor[SDK_NET_N_MIN_TSECT];
};

///< 全通道视频颜色设置
///< 命令ID: NET_SDK_VIDEOCOLOR
struct NET_SDK_VideoColorConfigAll
{
	NET_SDK_CONFIG_VIDEOCOLOR vVideoColorAll[SDK_NET_MAX_CHANNUM];
};


///< 所有通道名称标题
///< 命令ID: NET_SDK_CONFIG_CHANNEL_NAME
struct NET_SDK_ChannelNameConfigAll
{
	char channelTitle[SDK_NET_MAX_CHANNUM][SDK_NET_NAME_PASSWORD_LEN];
};

///< 输出模式
///< 命令ID: NET_SDK_GUISET
struct NET_SDK_GUISetConfig
{
	int			 iWindowAlpha;										//< 窗口透明度	[128, 255]
	NET_SDK_BOOL bTimeTitleEn;										//< 时间标题显示使能
	NET_SDK_BOOL bChannelTitleEn;									//< 通道标题显示使能	
	NET_SDK_BOOL bAlarmStatus;										//< 报警状态
	NET_SDK_BOOL bRecordStatus;										//< 录像状态显示使能
	NET_SDK_BOOL bChanStateRecEn;									//< 录像标志显示使能
	NET_SDK_BOOL bChanStateVlsEn;									//< 视频丢失标志显示使能
	NET_SDK_BOOL bChanStateLckEn;									//< 通道锁定标志显示使能	
	NET_SDK_BOOL bChanStateMtdEn;									//< 动态检测标志显示使能
	NET_SDK_BOOL bBitRateEn;										//< 码流显示使能
	NET_SDK_BOOL bRemoteEnable;										//< 遥控器使能
	NET_SDK_BOOL bDeflick;											//< 抗抖动
};

///< 输出视频分辨率
///< 命令ID:NET_SDK_CONFIG_VIDEOOUT
struct NET_SDK_VideoOutConfig
{
	char     szResultion[16][32];									//< 最大16种分别率 格式如1024*768
	int		 nNum;													//< 分辨率种类个数
	int      nCurIndex;												//< 当前所用的分辨率在数字中的序号
	 
};

///< 普通网络设置
///< 命令ID: NET_SDK_CONFIG_SYSNET
struct NET_SDK_CONFIG_NET_COMMON
{
	char HostName[SDK_NET_NAME_PASSWORD_LEN];						//< 主机名
	NET_SDK_CONFIG_IPAddress HostIP;								//< 主机IP
	NET_SDK_CONFIG_IPAddress Submask;								//< 子网掩码
	NET_SDK_CONFIG_IPAddress Gateway;								//< 网关IP
	int HttpPort;													//< HTTP服务端口
	int TCPPort;													//< TCP侦听端口
	int SSLPort;													//< SSL侦听端口
	int UDPPort;													//< UDP侦听端口
	int MaxConn;													//< 最大连接数
	int MonMode;													//< 监视协议 {"TCP", "UDP", "MCAST", ...}
	int MaxBps;														//< 限定码流值
	int TransferPlan;												//< 传输策略
	bool bUseHSDownLoad;											//< 是否启用高速录像下载测率
	char sMac[SDK_NET_MAX_MAC_LEN];									//< MAC地址
};

///< 设备信息
struct NET_SDK_PRODUCTINFO
{
	char username[32]; 												//< 设备用户名
	char password[32];												//< 设备密码
	char sSerialNo[64];												//< 设备序列号
	char productName[32];											//< 设备型号
	int deviceType;													//< 设备类型, 参见产品手册
	int reserve;													//< 保留字段
};

///< 设备查询结构体
///< NET_SDK_SearchDevice函数第1个参数
struct NET_SDK_SEARCH_DEVINFO
{
	NET_SDK_CONFIG_NET_COMMON	netcomcfg;							//< 参考 NET_SDK_CONFIG_NET_COMMON
	NET_SDK_PRODUCTINFO			productinf;							//< 参考 NET_SDK_PRODUCTINFO
};

///< 单个网卡的DHCP配置
struct NET_SDK_NetDHCPConfig
{
	NET_SDK_BOOL				bEnable;							//< 使能					
	char						ifName[32];							//< 名称
};
///< 所有网卡的DHCP配置
///< 命令ID: NET_SDK_CONFIG_NET_DHCP
struct NET_SDK_NetDHCPConfigAll
{
	NET_SDK_NetDHCPConfig		vNetDHCPConfig[4];
};

///< DNS设置
///< 命令ID: NET_SDK_CONFIG_NET_DNS
struct NET_SDK_NetDNSConfig
{
	NET_SDK_CONFIG_IPAddress		PrimaryDNS;						//< 主DNS
	NET_SDK_CONFIG_IPAddress		SecondaryDNS;			 		//< 备用DNS
};

///< 网络服务器结构定义
struct NET_SDK_RemoteServerConfig
{
	char ServerName[SDK_NET_NAME_PASSWORD_LEN];						//< 服务名
	NET_SDK_CONFIG_IPAddress ip;									//< IP地址
	int Port;														//< 端口号
	char UserName[SDK_NET_NAME_PASSWORD_LEN];						//< 用户名
	char Password[SDK_NET_NAME_PASSWORD_LEN];						//< 密码	
	bool Anonymity;													//< 是否匿名登录
};

///< IP权限设置
///< 命令ID: NET_SDK_CONFIG_NET_IPFILTER
struct NET_SDK_NetIPFilterConfig
{
	bool Enable;													//< 是否开启
	NET_SDK_CONFIG_IPAddress BannedList[SDK_NET_MAX_FILTERIP_NUM];	//< 黑名单列表
	NET_SDK_CONFIG_IPAddress TrustList[SDK_NET_MAX_FILTERIP_NUM];	//< 白名单列表
};

///< 组播设置
///< 命令ID: NET_SDK_CONFIG_NET_MULTICAST
struct NET_SDK_NetMultiCastConfig
{
	bool						Enable;								//< 是否开启
	NET_SDK_RemoteServerConfig	Server;								//< 组播服务器
};

///< PPPOE设置
///< 命令ID: NET_SDK_CONFIG_NET_PPPOE
struct NET_SDK_NetPPPoEConfig
{
	bool						Enable;								//< 是否开启
	NET_SDK_RemoteServerConfig	Server;								//< PPPOE服务器
	NET_SDK_CONFIG_IPAddress	addr;								//< 拨号后获得的IP地址
};

///< DDNS设置
struct NET_SDK_NetDDNSConfig
{
	bool Enable;													//< 是否开启
	bool Online;													//< 是否在线
	char DDNSKey[SDK_NET_NAME_PASSWORD_LEN];						//< DDNS类型名称
	char HostName[SDK_NET_NAME_PASSWORD_LEN];						//< 主机名
	NET_SDK_RemoteServerConfig Server;								//< DDNS服务器
};

///< DDNS设置
///< 命令ID: NET_SDK_CONFIG_NET_DDNS
struct NET_SDK_NetDDNSConfigALL
{
	NET_SDK_NetDDNSConfig ddnsConfig[SDK_NET_MAX_DDNS_TYPE];
};

///< FTP设置
///< 命令ID: NET_SDK_CONFIG_NET_FTPSERVER
struct NET_SDK_FtpServerConfig
{
	bool						bEnable;							//< 服务器使能     
	NET_SDK_RemoteServerConfig	Server;								//< FTP服务器
	char cRemoteDir[SDK_NET_MAX_PATH_LENGTH];						//< 远程目录
	int							iMaxFileLen;						//< 文件最大长度
};

///< NTP设置
///< 命令: NET_SDK_CONFIG_NET_NTP
struct NET_SDK_NetNTPConfig
{
	bool						Enable;								//< 是否开启
	NET_SDK_RemoteServerConfig  Server;								//< PPPOE服务器
	int							UpdatePeriod;						//< 更新周期	
	int							TimeZone;							//< 时区
};

///< DAS设置
///< 命令: NET_SDK_CONFIG_NET_DAS
struct NET_SDK_DASInfo
{
	NET_SDK_BOOL	Enable;											//< 是否开启
	char			ServerAddr[SDK_NET_NAME_PASSWORD_LEN];			//< 服务器地址		
	int				Port;											//< 端口
	char			UserName[SDK_NET_NAME_PASSWORD_LEN];			//< 用户名
	char			Passwd[SDK_NET_NAME_PASSWORD_LEN];				//< 密码
	char			DevID[SDK_NET_NAME_PASSWORD_LEN];				//< 设备ID
};

#define  SDK_NET_MAX_EMAIL_TITLE_LEN	64

#define  SDK_NET_MAX_EMAIL_RECIEVERS	5

#define  SDK_NET_EMAIL_ADDR_LEN			32

///< EMAIL设置
///< 命令ID: NET_SDK_CONFIG_NET_EMAIL
struct NET_SDK_NetEmailConfig
{
	bool						Enable;								//< 是否开启
	NET_SDK_RemoteServerConfig	Server;								//< smtp 服务器地址使用字符串形式填充, 可以填ip,也可以填域名
	bool						bUseSSL;							//< SSL
	char SendAddr[SDK_NET_EMAIL_ADDR_LEN];							//< 发送地址
	char Recievers[SDK_NET_MAX_EMAIL_RECIEVERS][SDK_NET_EMAIL_ADDR_LEN];//< 接收人地址
	char Title[SDK_NET_MAX_EMAIL_TITLE_LEN];						//< 邮件主题
	NET_SDK_TIMESECTION Schedule[SDK_NET_N_MIN_TSECT];				//< email有效时间
};

///< ARSP(主动注册服务器)设置
struct NET_SDK_NetARSPConfig
{
	bool						bEnable;							//< 是否开启
	char						sARSPKey[SDK_NET_NAME_PASSWORD_LEN];//< DNS类型名称
	int							iInterval;							//< 保活间隔时间
	char						sURL[SDK_NET_NAME_PASSWORD_LEN];	//< 本机域名
	NET_SDK_RemoteServerConfig  Server;								//< DDNS服务器
	int nHttpPort;													//< 服务器HTTP端口
};

///< ARSP(主动注册服务器)设置
///< 命令ID: NET_SDK_CONFIG_NET_ARSP
struct NET_SDK_NetARSPConfigAll
{
	NET_SDK_NetARSPConfig		vNetARSPConfigAll[SDK_NET_MAX_ARSP_TYPE];
};

///< 解码器地址设置
struct NET_SDK_NetDecoderConfig
{
	bool Enable;													//< 是否开启
	char UserName[SDK_NET_NAME_PASSWORD_LEN];						//< DDNS类型名称, 目前有: JUFENG
	char PassWord[SDK_NET_NAME_PASSWORD_LEN];						//< 主机名
	char Address[SDK_NET_NAME_PASSWORD_LEN];						//< 地址
	int  Protocol;													//< 协议
	int  Port;														//< 解码器连接端口
	int  Channel;													//< 解码器连接通道号
	int  Interval;													//< 轮巡的间隔时间(s)
};

///< 所有通道的解码器地址设置
///< 命令ID: NET_SDK_CONFIG_NET_DECODER
struct NET_SDK_NetDecoderConfigAll_V1
{	
	//NET_SDK_NetDecoderConfig vNetDecoderConfig[SDK_NET_MAX_DECORDR_CH];
	bool Enable; //自动添加使能 
	int nforcesearch; //手动搜索	
	char reserve[32]; 
};


///< 3G拨号设置
///< 命令ID: NET_SDK_CONFIG_NET_3G
struct NET_SDK_Net3GConfig
{
	bool bEnable;													//< 无线模块使能标志
	int iNetType;													//< 无线网络类型
	//char strLocation[32];
	//char strISP[32];
	char sAPN[SDK_NET_NAME_PASSWORD_LEN];							//< 接入点名称
	char sDialNum[SDK_NET_NAME_PASSWORD_LEN];						//< 拨号号码
	char sUserName[SDK_NET_NAME_PASSWORD_LEN];						//< 拨号用户名
	char sPassword[SDK_NET_NAME_PASSWORD_LEN];						//< 拨号密码
	NET_SDK_CONFIG_IPAddress addr;									//< 拨号后获得的IP地址
};

struct NET_SDK_Net3GConfigV2
{
	bool bEnable;													//< 无线模块使能标志
	int iNetType;													//< 无线网络类型
	char strLocation[32];
	char strISP[32];
	char sAPN[SDK_NET_NAME_PASSWORD_LEN];							//< 接入点名称
	char sDialNum[SDK_NET_NAME_PASSWORD_LEN];						//< 拨号号码
	char sUserName[SDK_NET_NAME_PASSWORD_LEN];						//< 拨号用户名
	char sPassword[SDK_NET_NAME_PASSWORD_LEN];						//< 拨号密码
	NET_SDK_CONFIG_IPAddress addr;									//< 拨号后获得的IP地址
};
///< 手机监控设置
///< 命令ID: NET_SDK_CONFIG_NET_MOBILE
struct NET_SDK_NetMoblieConfig
{
	bool bEnable;													//< 是否开启
	NET_SDK_RemoteServerConfig Server;								//< 服务器
};

///< RTSP设置
///< 命令ID: NET_SDK_CONFIG_NET_RTSP
struct NET_SDK_NetRTSPConfig
{
	bool bServer;													//< 是否是服务器模式
	bool bClient;													//< 是否是客户端模式
	NET_SDK_RemoteServerConfig Server;								//< 服务器模式配置
	NET_SDK_RemoteServerConfig Client;								//< 客户端模式配置
};

///< UPNP设置
///< 命令ID: NET_SDK_CONFIG_NET_UPNP
struct NET_SDK_NetUPNPConfig
{
	bool bEnable;													//< 使能标志
	bool bState;													//< 状态, 1: OK 0: NOK
	int iHTTPPort;													//< HTTP连接映射后的端口
	int iMediaPort;													//< 媒体连接映射后的端口
	int iMobliePort;												//< 手机监控映射后的端口
};

///< WIFI设置
///< 命令ID: NET_SDK_CONFIG_NET_WIFI
struct NET_SDK_NetWifiConfig
{
	bool						bEnable;							//< 使能
	char						sSSID[36];							//< SSID Number
	int							nChannel;							//< 通道号
	char						sNetType[32];						//< Infra, Adhoc
	char						sEncrypType[32];					//< NONE, WEP, TKIP, AES
	char						sAuth[32];							//< OPEN, SHARED, WEPAUTO, WPAPSK, WPA2PSK, WPANONE, WPA, WPA2
	int							nKeyType;							//< 0:Hex 1:ASCII
	char						sKeys[SDK_NET_IW_ENCODING_TOKEN_MAX];
	NET_SDK_CONFIG_IPAddress	HostIP;								//< host ip
	NET_SDK_CONFIG_IPAddress	Submask;							//< netmask
	NET_SDK_CONFIG_IPAddress	Gateway;							//< gateway
};

///< 厦门威思通平台设置
///< 命令ID: NET_SDK_CONFIG_NET_XMWST
struct NET_SDK_NetXMWSTConfig
{
	NET_SDK_BOOL	bEnable;										//< 使能
	char			acDeviceID[24];									//< DVR设备ID号
	char			acServerName[32];								//< 服务器域名
	int				iServerPort;									//< 服务器侦听端口
	unsigned int	iStreamType;									//< 码流类型:按位表示，0--主码流，1--辅码流
};

///< 大拿科技云平台
///< 命令ID: NET_SDK_CONFIG_NET_DANALE
struct NET_SDK_NetDanaleConfig
{
	NET_SDK_BOOL	bEnable;										//< 使能
	char			szDevID[40];									//< 设备ID
	char			szServer[32];									//< 服务器地址
	unsigned int			channel;
	char			szReserve[40];									//< 保留字

	int				nStatus;
};

///< 浪涛科技云平台
///< 命令ID: NET_SDK_CONFIG_NET_LT
struct NET_SDK_NetLTConfig
{
	NET_SDK_BOOL	Enable;
	char			UID[24];
	char			Server[32];
	int				Port;
};

struct NET_SDK_NetLTConfig_T1
{
	NET_SDK_BOOL	Enable;
	char			UID[24];
	char			Server[32];
	int				Port;
	int				nStatus;
};

struct NET_SDK_NetTUTKConfig
{
	NET_SDK_BOOL Enable;
	char TUID[24];
	char Reserve[36];
	int				nStatus;

};



struct NET_SDK_UMEYE_T1
{
	NET_SDK_BOOL Enable;
	char		 UMID[24];
	char		 Server[32];
	int			 Port;
	char		 Reserve[36];
	int			 nStatus;
};


///< 自动升级系统设置
///< 命令ID: NET_SDK_CONFIG_NET_AUTOUPGRADE
struct NET_SDK_NetAutoUpgradeConfig
{
	NET_SDK_BOOL	Enable;
	char			ServerAddr[32];
	int				Port;
	int				Count;
	char			UserName[32];
	char			Password[32];
};

enum NET_SDK_RSSI_SINGNAL
{
	NET_SDK_RSSI_NO_SIGNAL,											//< -90db
	NET_SDK_RSSI_VERY_LOW,											//< -81db
	NET_SDK_RSSI_LOW,												//< -71db
	NET_SDK_RSSI_GOOD,												//< -67db
	NET_SDK_RSSI_VERY_GOOD,											//< -57db
	NET_SDK_RSSI_EXCELLENT											//< -57db
};

struct NET_SDK_NetWifiDevice
{
	char		sSSID[36];											//< SSID Number
	int			nRSSI;												//< SEE SDK_RSSI_SINGNAL
	int			nChannel;											//< 通道号
	char		sNetType[32];										//< Infra, Adhoc
	char		sEncrypType[32];									//< NONE, WEP, TKIP, AES
	char		sAuth[32];											//< OPEN, SHARED, WEPAUTO, WPAPSK, WPA2PSK, WPANONE, WPA, WPA2
};

///< WIFI网络服务
///< 命令ID: NET_SDK_CONFIG_NET_WIFI_AP_LIST
struct NET_SDK_NetWifiDeviceAll
{
	int						nDevNumber;
	NET_SDK_NetWifiDevice	vNetWifiDeviceAll[SDK_NET_MAX_AP_NUMBER];
};

///< 报警中心设置
struct NET_SDK_NetAlarmCenterConfig
{
	bool				bEnable;								//< 是否开启
	char				sAlarmServerKey[SDK_NET_NAME_PASSWORD_LEN];	//< 报警中心协议类型名称, 
	NET_SDK_RemoteServerConfig Server;							//< 报警中心服务器
	bool				bAlarm;									//< 是否是报警
	bool				bLog;									//< 是否是日志
};

struct NET_SDK_NetAlarmServerConfigAll
{
	NET_SDK_NetAlarmCenterConfig vAlarmServerConfigAll[SDK_NET_MAX_ALARMSERVER_TYPE];
};

///< 报警中心消息类型
enum NET_SDK_AlarmCenterMsgType
{
	NET_SDK_ALARMCENTER_ALARM,										//< 告警消息
	NET_SDK_ALARMCENTER_LOG,										//< 日志消息
};

///< 报警中心状态
enum NET_SDK_AlarmCenterStatus
{
	NET_SDK_AC_START,												//< 开始
	NET_SDK_AC_STOP,												//< 停止
};

///< 告警中心消息内容
struct NET_SDK_NetAlarmCenterMsg
{
	NET_SDK_CONFIG_IPAddress	HostIP;								//< 设备IP
	int							nChannel;							//< 通道
	int							nType;								//< 类型 见AlarmCenterMsgType
	int							nStatus;							//< 状态 见AlarmCenterStatus
	NET_SDK_SYSTEM_TIME			Time;								//< 发生时间
	char						sEvent[SDK_NET_MAX_INFO_LEN];		//< 事件
	char						sSerialID[SDK_NET_MAX_MAC_LEN];		//< 设备序列号
	char						sDescrip[SDK_NET_MAX_INFO_LEN];		//< 描述
};

///< 编码信息
struct NET_SDK_EncodeInfo
{
	bool						bEnable;							//< 使能项
	int							iStreamType;						//< 码流类型，CaptureChannelTypes
	bool						bHaveAudio;							//< 是否支持音频
	unsigned int				uiCompression;						//< CaptureCompressType的掩码
	unsigned int				uiResolution;						//< CaptureImageSize的掩码
};

///< 编码能力
///< 命令ID: NET_SDK_CONFIG_ABILTY_ENCODE
struct NET_SDK_CONFIG_EncodeAbility
{
	unsigned int				iMaxEncodePower;								//< 支持的最大编码能力
	int							iChannelMaxSetSync;								//< 每个通道分辨率是否需要同步 0-不同步, 1 -同步
	unsigned int				nMaxPowerPerChannel[SDK_NET_MAX_CHANNUM];		//< 每个通道支持的最高编码能力
	unsigned int				ImageSizePerChannel[SDK_NET_MAX_CHANNUM];		//< 每个通道支持的图像分辨率
	unsigned int				ExImageSizePerChannel[SDK_NET_MAX_CHANNUM];		//< 每个通道支持的辅码流图像分辨率
	NET_SDK_EncodeInfo			vEncodeInfo[NET_SDK_CHL_FUNCTION_NUM];			//< 编码信息,暂时最大就4中码流
	NET_SDK_EncodeInfo			vCombEncInfo[NET_SDK_CHL_FUNCTION_NUM];			//< 组合编码信息,暂时最大就4中码流
	int							iMaxBps;										//< 最高码流Kbps
	unsigned int				ExImageSizePerChannelEx[SDK_NET_MAX_CHANNUM][NET_SDK_CAPTURE_SIZE_NR];	//< 每个通道支持的辅码流图像分辨率
};

///< 串口协议
enum NET_SDK_CommProtocol
{
	NET_SDK_CONSOLE = 0,
	NET_SDK_KEYBOARD,
	NET_SDK_COM_TYPES,
};
///< 串口协议
///< 命令ID: NET_SDK_COMFIG_ABILITY_COMMPRO
struct NET_SDK_COMMFUNC
{
	int							nProNum;							//< 协议个数
	char						vCommProtocol[100][32];				//< 协议内容, 每个协议最多由32个字符组成
};

///< 云台协议
///< 命令ID NET_SDK_CONFIG_ABILITY_PTZPRO -- PTZ设备  NET_SDK_CONFIG_ABILITY_RS485 -- RS485设备
struct NET_SDK_PTZPROTOCOLFUNC
{
	int							nProNum;							//< 协议个数
	char						vPTZProtocol[100][32]; 				//每个协议最多由32个字符组成
};

///<3G协议
// NET_SDK_CONFIG_ABILITY_ISP  当调用改命令字时需要通过当前的location来获取location下的ISP
struct NET_SDK_SingleLocation{
	char vLocation[32];
};

struct NET_SDK_WirelessLocation
{
	int							nProNum;							//<类型个数
	char						vLocation[64][32];							//<类型描述
};

struct NET_SDK_MobileISPInfo
{
	int	 iNetType;			///< 无线网络类型
	char szAPN[32];			///< 接入点名称
	char szDialNum[32];		///< 拨号号码
	char szUserName[32];	///< 拨号用户名
	char szPassword[32];	///< 拨号密码
};

struct NET_SDK_ISP
{
	char vISP[32];
	NET_SDK_MobileISPInfo ispInfo;
};

struct NET_SDK_WirelessISP
{
	int						  nProNum;
	NET_SDK_ISP				  vISP[64];
};
///< 区域遮挡能力集
///< 命令ID: NET_SDK_CONFIG_ABILITY_BLIND_FUNC
struct NET_SDK_BlindDetectFunction
{
	int							iBlindConverNum;					//< 区域遮挡块数
};

///< 动检区域能力集
///< 命令ID: NET_SDK_CONFIG_ABILITY_MOTION_FUNC
struct NET_SDK_MotionDetectFunction
{
	int							iGridRow;							//< 网格行数
	int							iGridColumn;						//< 网格列数
};

///< 支持的DDNS类型
///< 命令ID: NET_SDK_CONFIG_ABILITY_DDNS_SERVER
struct NET_SDK_DDNSServiceFunction
{
	int							nTypeNum;							//< 类型
	char						vDDNSType[SDK_NET_MAX_DDNS_TYPE][64];//< 类型描述
};

///< 支持语言
///< 命令ID: NET_SDK_CONFIG_ABILITY_LANG
struct NET_SDK_MultiLangFunction
{
	int							nLangNum;							//< 支持语音的数目			
	char						vLanguageName[128][64];				//< 支持的语言
};

///< 支持的视频制式
///< 命令ID: NET_SDK_CONFIG_ABILITY_VSTD
struct NET_SDK_MultiVstd
{
	int							nVstdNum;							//< 制式数目
	char						vVstdName[3][64];					//< 制式描述, 每种3个字符描述
};

///< 编码功能
enum NET_SDK_EncodeFunctionTypes
{
	NET_SDK_ENCODE_FUNCTION_TYPE_DOUBLE_STREAM,						//< 双码流功能
	NET_SDK_ENCODE_FUNCTION_TYPE_COMBINE_STREAM,					//< 组合编码功能
	NET_SDK_ENCODE_FUNCTION_TYPE_SNAP_STREAM,						//< 抓图功能
	NET_SDK_ENCODE_FUNCTION_TYPE_WATER_MARK,						//< 水印功能
	NET_SDK_ENCODE_FUNCTION_TYPE_NR,
};

///< 串口类型
enum NET_SDK_CommTypes
{
	NET_SDK_COMM_TYPES_RS485,										//< 485串口
	NET_SDK_COMM_TYPES_RS232,										//< 232串口
	NET_SDK_COMM_TYPES_NR
};

///< 输入法类型
enum NET_SDK_InputMethod
{
	NET_SDK_NO_SUPPORT_CHINESE,										//< 不支持中文输入
	NET_SDK_NO_SUPPORT_NR
};

///< 提示类型
enum NET_SDK_TipShow
{
	NET_SDK_NO_BEEP_TIP_SHOW,										//< 蜂鸣提示
	NET_SDK_NO_FTP_TIP_SHOW,										//< FTP 提示
	NET_SDK_NO_EMAIL_TIP_SHOW,										//< EMAIL提示
	NET_SDK_NO_TIP_SHOW_NR
};

///< 车载功能
enum NET_SDK_MobileDVR
{
	NET_SDK_MOBILEDVR_STATUS_EXCHANGE,
	NET_SDK_MOBILEDVR_DELAY_SET,
	NET_SDK_MOBILEDVR_CARPLATE_SET,
	NET_SDK_MOBILEDVR_GPS_TIMING,
	NET_SDK_MOBILEDVR_NR
};
#define NET_SDK_OTHER_NR 4
///< 其他功能
enum NET_SDK_OtherFunction
{
	NET_SDK_OTHER_DOWNLOADPAUSE,									//< 录像下载暂停功能
	NET_SDK_OTHER_USB_SUPPORT_RECORD,								//< USB支持录像功能
	NET_SDK_OTHER_SD_SUPPORT_RECORD,								//< SD支持录像功能
	NET_SDK_OTHER_ONVIF_CLIENT_SUPPORT,								//< 支持子码流回放
	NET_SDK_OTHER_SUPPORT_IPV6,										//< 支持IPV6
	NET_SDK_OTHER_SUPPORT_CUSTOMTITLE,										//是否支持自定义标题
	NET_SDK_OTHER_AI_FACE_CAPTURE,											//AI人脸抓拍功能
//	NET_SDK_OTHER_NR //可增加至128
};


///< 报警功能
enum NET_SDK_AlarmFucntionTypes
{
	NET_SDK_ALARM_FUNCTION_TYPE_MOTION_DETECT,						//< 动态检测
	NET_SDK_ALARM_FUNCTION_TYPE_BLIND_DETECT,						//< 视屏遮挡
	NET_SDK_ALARM_FUNCTION_TYPE_LOSS_DETECT,						//< 视屏丢失
	NET_SDK_ALARM_FUNCTION_TYPE_LOCAL_ALARM,						//< 本地报警
	NET_SDK_ALARM_FUNCTION_TYPE_NET_ALARM,							//< 网络报警
	NET_SDK_ALARM_FUNCTION_TYPE_IP_CONFLICT,						//< IP地址冲突
	NET_SDK_ALARM_FUNCTION_TYPE_NET_ABORT,							//< 网络异常
	NET_SDK_ALARM_FUNCTION_TYPE_STORAGE_NOTEXIST,					//< 存储设备不存在
	NET_SDK_ALARM_FUNCTION_TYPE_STORAGE_LOWSPACE,					//< 存储设备容量不足
	NET_SDK_ALARM_FUNCTION_TYPE_STORAGE_FAILURE,					//< 存储设备访问失败
	NET_SDK_ALARM_FUNCTION_TYPE_VIEDO_ANALYZE,						//< 视频分析
	NET_SDK_ALARM_FUNCTION_TYPE_NR
};

/// 信号源
enum NET_SDK_SCANMODE{
	SCAN_DISABLE=0,
	SCAN_AUTO,
	SCAN_TVI,
	SCAN_HDA,
	SCAN_HDC,
	SCAN_MANUAL,
	SCAN_TEST
};
/// 网络服务功能
enum NET_SDK_ServerSubTypes
{
	NET_SDK_SERVER_SUBTYPES_DANAV2,		///大拿云版本二
	NET_SDK_SERVER_SUBTYPES_YLTX,		///云领天下
	NET_SDK_SERVER_SUBTYPES_ANNIDDNS,   ///ANNI DDNS
	NET_SDK_SERVER_SUBTYPES_TUTK,		/// TUTK 
	NET_SERVER_SUBTYPES_UMEYE,			/// TS云
	NET_SERVER_SUBTYPES_WJADAS,			/// WJA DAS
	NET_SDK_SERVER_TYPES_DROPBOX,				///DROP
	
	NET_SERVER_TYPES_SCANMODE,			///信号切换
	NET_SERVER_TYPES_8021X,				///8021X
	NET_SDK_SERVER_TYPES_GB28181,		//GB28181
	NET_SDK_SERVER_TYPES_ZDK,				//值得看
	NET_SDK_SERVER_TYPES_ZSKJ,			///智视
	NET_SDK_SERVER_TYPES_GOOGLEDRIVE,		//GoogleDrive
	NET_SDK_SERVER_TYPES_SNMP,				//SNMP
	NET_SDK_SERVER_SUBTYPES_NR = 96,
};
///< 网络服务功能
enum NET_SDK_NetServerTypes
{
	NET_SDK_SERVER_TYPES_IPFILTER,									//< 白黑名单
	NET_SDK_SERVER_TYPES_DHCP,										//< DHCP功能
	NET_SDK_SERVER_TYPES_DDNS,										//< DDNS功能
	NET_SDK_SERVER_TYPES_EMAIL,										//< Email功能
	NET_SDK_SERVER_TYPES_MULTICAST,									//< 多播功能
	NET_SDK_SERVER_TYPES_NTP,										//< NTP功能
	NET_SDK_SERVER_TYPES_PPPOE,										//< PPPOE功能
	NET_SDK_SERVER_TYPES_DNS,										//< DNS功能
	NET_SDK_SERVER_TYPES_ARSP,										//< 主动注册服务
	NET_SDK_SERVER_TYPES_3G,            							//< 3G拨号
	NET_SDK_SERVER_TYPES_MOBILE,        							//< 手机监控
	NET_SDK_SERVER_TYPES_UPNP,										//< UPNP
	NET_SDK_SERVER_TYPES_FTP,										//< FTP
	NET_SDK_SERVER_TYPES_WIFI,          							//<WIFI
	NET_SDK_SERVER_TYPES_ALARM_CENTER,  							//< 告警中心
	NET_SDK_SERVER_TYPES_RTSP = 19,									//< RTSP
	NET_SDK_SERVER_TYPES_SHORT_MSG,									//< 发送报警短信
	NET_SDK_SERVER_TYPES_MULTIMEDIA_MSG,							//< 发送带截图的彩信
	NET_SDK_SERVER_TYPES_DAS,										//< DAS
	NET_SDK_SERVER_TYPES_LOCALSDK_PLATFORM,							//< 网络平台信息设置
	NET_SDK_SERVER_AUTO_UPGRADE_TS,									//< 自动升级系统
	NET_SDK_SERVER_TYPES_NAT,										//< NAT穿透，MTU配置
	NET_SDK_SERVER_TYPES_VPN,										//< VPN配置
	NET_SDK_SERVER_TYPES_XMWST_TS,									//< 厦门威思通、大拿科技云
	NET_SDK_SERVER_TYPES_LTP2P_TS,									//< 浪涛P2P
	NET_SDK_SERVER_TYPES_MASK_TS,								//< 
	
	NET_SDK_SERVER_TYPES_NR = 32,									//< 注意: 30 31不要再用了
};

///< 预览功能
enum NET_SDK_PreviewTypes
{
	NET_SDK_PREVIEW_TYPES_TOUR,										//< 轮巡
	NET_SDK_PREVIEW_TYPES_TALK,										//< GUI界面配置
	NET_SDK_PREVIEW_TYPES_NR
};

///< 支持的系统功能
///< 命令ID: NET_SDK_CONFIG_ABILITY_SYSFUNC
struct NET_SDK_SystemFunction
{
	NET_SDK_BOOL vEncodeFunction[NET_SDK_ENCODE_FUNCTION_TYPE_NR];	//< 编码功能EncodeFunctionTypes
	NET_SDK_BOOL vAlarmFunction[NET_SDK_ALARM_FUNCTION_TYPE_NR];	//< 报警功能AlarmFucntionTypes
	NET_SDK_BOOL vNetServerFunction[NET_SDK_SERVER_TYPES_NR];		//< 网络服务功能NetServerTypes
	NET_SDK_BOOL vPreviewFunction[NET_SDK_PREVIEW_TYPES_NR];		//< 预览功能PreviewTypes
	NET_SDK_BOOL vCommFunction[NET_SDK_COMM_TYPES_NR];				//< 串口类型CommTypes
	NET_SDK_BOOL vInputMethodFunction[NET_SDK_NO_SUPPORT_NR];		//< 输入法类型InputMethod
	NET_SDK_BOOL vTipShowFunction[NET_SDK_NO_TIP_SHOW_NR];			//< 标签显示TipShow
	NET_SDK_BOOL vMobileDVRFunction[NET_SDK_MOBILEDVR_NR];			//< 车载功能MobileCar
	NET_SDK_BOOL vOtherFunction[NET_SDK_OTHER_NR];					//< 其他功能OtherFunction
};

///< 串口属性设置
struct NET_SDK_COMMATTRI
{
	int					iDataBits;									//< 数据位取值为5,6,7,8 
	int					iStopBits;									//< 停止位
	int					iParity;									//< 校验位
	int					iBaudRate;									//< 实际波特率
};

///< 串口配置
///< 命令ID: NET_SDK_CONFIG_COMM
struct NET_SDK_CONFIG_COMM_X
{
	char				iProtocolName[32];							//< 串口协议:“Console” 
	int					iPortNo;									//< 端口号 
	NET_SDK_COMMATTRI	aCommAttri;									//< 串口属性 
};

///< 串口配置
///< 命令ID: NET_SDK_CONFIG_COMM
struct NET_SDK_CommConfigAll
{
	NET_SDK_CONFIG_COMM_X vCommConfig[NET_SDK_COM_TYPES];
};

///< 云台设置
///< 命令ID NET_SDK_CONFIG_PTZ -- PTZ设备 NET_SDK_CONFIG_RS485 -- RS485设备
struct NET_SDK_STR_CONFIG_PTZ
{
	char			sProtocolName[SDK_NET_MAX_PTZ_PROTOCOL_LENGTH];	//< 协议名称 	
	int				ideviceNo;										//< 云台设备地址编号 	
	int				iNumberInMatrixs;								//< 在矩阵中的统一编号	
	int				iPortNo;										//< 串口端口号	[1, 4] 	
	NET_SDK_COMMATTRI dstComm;										//< 串口属性 	
};




///< 所有通道云台协议
///< 命令ID NET_SDK_CONFIG_PTZ -- PTZ设备 NET_SDK_CONFIG_RS485 -- RS485设备
///< 注意: RS485设备任何通道都只取通道0的值,
struct NET_SDK_STR_PTZCONFIG_ALL
{
	NET_SDK_STR_CONFIG_PTZ ptzAll[SDK_NET_MAX_CHANNUM];
};

///< 时间段格式
struct NET_SDK_CONFIG_WORKSHEET
{	
	NET_SDK_TIMESECTION	tsSchedule[SDK_NET_N_WEEKS][SDK_NET_N_TSECT];//< 时间段
};

///< 录像模式种类
enum NET_SDK_RecordModeTypes
{
	NET_SDK_RECORD_MODE_CLOSED,										//< 关闭录像
	NET_SDK_RECORD_MODE_MANUAL,										//< 手动录像
	NET_SDK_RECORD_MODE_CONFIG,										//< 按配置录像
	NET_SDK_RECORD_MODE_NR,		
};

///< 录像设置
///< 命令ID: NET_SDK_CONFIG_RECORD
struct NET_SDK_RECORDCONFIG
{
	int							iPreRecord;							//< 预录时间，为零时表示关闭	
	bool						bRedundancy;						//< 冗余开关
	//bool						bSnapShot;							//< 快照开关	
	int							iPacketLength;						//< 录像打包长度（分钟）[1, 255]
	int							iRecordMode;						//< 录像模式，0 关闭，1 禁止 2 配置
	NET_SDK_CONFIG_WORKSHEET	wcWorkSheet;						//< 录像时间段	
	unsigned int typeMask[SDK_NET_N_WEEKS][SDK_NET_N_TSECT];		//< 录像类型掩码
};

///< 录像设置结构体
///< 命令ID: NET_SDK_CONFIG_RECORD
struct NET_SDK_RECORDCONFIG_ALL
{
	NET_SDK_RECORDCONFIG vRecordConfigAll[SDK_NET_MAX_CHANNUM + SDK_NET_MAX_CHANNUM];
};

///< 图片设置
///< 命令ID: NET_SDK_CONFIG_SNAP_STORAGE
struct NET_SDK_SnapshotConfig
{
	int							iPreSnap;							//< 预抓图片数
	bool						bRedundancy;						//< 冗余开关
	int							iSnapMode;							//< 录像模式，见RecordModeTypes
	NET_SDK_CONFIG_WORKSHEET	wcWorkSheet;						//< 录像时间段	
	unsigned int typeMask[SDK_NET_N_WEEKS][SDK_NET_N_TSECT];		//< 录像类型掩码，见enum RecordTypes
};

///< 全通道图片设置
///< 命令ID: NET_SDK_CONFIG_SNAP_STORAGE
struct NET_SDK_SnapshotConfigAll
{
	NET_SDK_SnapshotConfig vSnapshotConfigAll[SDK_NET_MAX_CHANNUM];
};

///< 报警相关结构体
///< 云台联动结构
struct NET_SDK_PtzLinkConfig
{
	int							iType;								//< 联动的类型 
	int							iValue;								//< 联动的类型对应的值 
};

///< 事件
struct NET_SDK_EventHandler
{
	unsigned int				dwRecord;							//< 录象掩码 
	unsigned int				iRecordLatch;						//< 录像延时：10～300 sec  	
	unsigned int				dwTour;								//< 轮巡掩码 	
	unsigned int				dwSnapShot;							//< 抓图掩码 
	unsigned int				dwAlarmOut;							//< 报警输出通道掩码 
	unsigned int				dwMatrix;							//< 矩阵掩码 
	int							iEventLatch;						//< 联动开始延时时间，s为单位 
	int							iAOLatch;							//< 报警输出延时：10～300 sec  
	NET_SDK_PtzLinkConfig		PtzLink[SDK_NET_MAX_CHANNUM];		//< 云台联动项 
	NET_SDK_CONFIG_WORKSHEET	schedule;							//< 录像时间段
	bool						bRecordEn;							//< 录像使能 
	bool						bTourEn;							//< 轮巡使能 
	bool						bSnapEn;							//< 抓图使能 	
	bool						bAlarmOutEn;						//< 报警使能 
	bool						bPtzEn;								//< 云台联动使能 
	bool						bTip;								//< 屏幕提示使能 	
	bool						bMail;								//< 发送邮件 	
	bool						bMessage;							//< 发送消息到报警中心 	
	bool						bBeep;								//< 蜂鸣 	
	bool						bVoice;								//< 语音提示 		
	bool						bFTP;								//< 启动FTP传输 
	bool						bMatrixEn;							//< 矩阵使能 
	bool						bLog;								//< 日志使能，目前只有在WTN动态检测中使用 
	bool						bMessagetoNet;						//< 消息上传给网络使能 
	bool						bShowInfo;							//< 是否在GUI上和编码里显示报警信息
	unsigned int				dwShowInfoMask;						//< 要联动显示报警信息的通道掩码
	char						pAlarmInfo[64];						//< 要显示的报警信息
	bool						bShortMsg;							//< 发送短信
	bool						bMultimediaMsg;						//< 发送彩信
};

///< 动态检测设置
///< 命令ID: NET_SDK_CONFIG_MOTION
struct NET_SDK_MOTIONCONFIG
{
	bool						bEnable;							//< 动态检测开启 
	int							iLevel;								//< 灵敏度 
	unsigned int				mRegion[SDK_NET_MD_REGION_ROW];		//< 区域，每一行使用一个二进制串 	
	NET_SDK_EventHandler		hEvent;								//< 动态检测联动 
};

///< 全通道动态检测配置
///< 命令ID: NET_SDK_CONFIG_MOTION
struct NET_SDK_MOTIONCONFIG_ALL
{
	NET_SDK_MOTIONCONFIG		vMotionDetectAll[SDK_NET_MAX_CHANNUM];
};

///< 遮挡检测配置
///< 命令ID: NET_SDK_CONFIG_SHELTER
struct NET_SDK_BLINDDETECTCONFIG
{
	bool						bEnable;							//< 遮挡检测开启
	int							iLevel;								//< 灵敏度：1～6
	NET_SDK_EventHandler		hEvent;								//< 遮挡检测联动
};

///< 全通道遮挡检测配置
///< 命令ID: NET_SDK_CONFIG_SHELTER
struct NET_SDK_BLINDDETECTCONFIG_ALL
{
	NET_SDK_BLINDDETECTCONFIG	vBlindDetectAll[SDK_NET_MAX_CHANNUM];
};

///< 视频丢失事件结构
///< 命令ID: NET_SDK_CONFIG_VIDEO_LOSS
struct NET_SDK_VIDEOLOSSCONFIG
{
	bool						bEnable;							//< 使能
	NET_SDK_EventHandler		hEvent;								//< 处理参数
};

///< 所有通道的基本时间结构
///< 命令ID: NET_SDK_CONFIG_VIDEO_LOSS
struct NET_SDK_VIDEOLOSSCONFIG_ALL
{
	NET_SDK_VIDEOLOSSCONFIG		vGenericEventConfig[SDK_NET_MAX_CHANNUM];
};

///< 报警输入配置
///< 命令ID: NET_SDK_CONFIG_ALARM_IN
struct NET_SDK_ALARM_INPUTCONFIG
{
	bool						bEnable;							//< 报警输入开关
	int							iSensorType;						//< 传感器类型常开 or 常闭
	NET_SDK_EventHandler		hEvent;								//< 报警联动
};

///< 所有通道的报警输入配置
///< 命令ID: NET_SDK_CONFIG_ALARM_IN
struct NET_SDK_ALARM_INPUTCONFIG_ALL
{
	NET_SDK_ALARM_INPUTCONFIG	vAlarmConfigAll[SDK_NET_MAX_CHANNUM];
};

///< 网路报警
///< 命令ID: NET_SDK_CONFIG_NET_ALARM
struct NET_SDK_NETALARMCONFIG
{
	bool						bEnable;							//< 使能
	NET_SDK_EventHandler		hEvent;								//< 处理参数
};

///< 所有通道的网路报警结构
///< 命令ID: NET_SDK_CONFIG_NET_ALARM
struct NET_SDK_NETALARMCONFIG_ALL
{
	NET_SDK_NETALARMCONFIG vNetAlarmConfig[SDK_NET_MAX_CHANNUM];
};

///< 本地报警输出配置
///< 命令ID: NET_SDK_CONFIG_ALARM_OUT
struct NET_SDK_AlarmOutConfig
{
	int						nAlarmOutType;							//< 报警输出类型: 配置,手动,关闭
	int						nAlarmOutStatus;						//< 报警状态: 0:打开 1;闭合
};

///< 所有通道的报警输出配置
///< 命令ID: NET_SDK_CONFIG_ALARM_OUT
struct NET_SDK_AlarmOutConfigAll
{
	NET_SDK_AlarmOutConfig	vAlarmOutConfigAll[SDK_NET_MAX_CHANNUM];
};

///< 串口能力集
///< 命令ID: NET_SDK_CONFIG_ABILITY_SERIALNO
struct NET_SDK_AbilitySerialNo
{
	char					serialNo[SDK_NET_MAX_USERNAME_LENGTH];
	char					productType[SDK_NET_MAX_USERNAME_LENGTH];
};

///< 驱动器信息结构
struct NET_SDK_DriverInformation 
{
	int						iDriverType;							//< 驱动器类型
	bool					bIsCurrent;								//< 是否为当前工作盘
	unsigned int			uiTotalSpace;							//< 总容量，MB为单位
	unsigned int			uiRemainSpace;							//< 剩余容量，MB为单位
	int						iStatus;								//< 错误标志，文件系统初始化时被设置
	int						iLogicSerialNo;							//< 逻辑序号
	NET_SDK_SYSTEM_TIME		tmStartTimeNew;							//< 新录像时间段的开始时间
	NET_SDK_SYSTEM_TIME		tmEndTimeNew;							//< 新录像时间段的结束时间
	NET_SDK_SYSTEM_TIME		tmStartTimeOld;							//< 老录像时间段的开始时间
	NET_SDK_SYSTEM_TIME		tmEndTimeOld;							//< 老录像时间段的结束时间
};

enum 
{
	NET_SDK_MAX_DRIVER_PER_DISK		= 2,							//< 每个磁盘最多的分区数
	NET_SDK_MAX_DISK_PER_MACHINE	= 8,							//< 最多支持8块硬盘
};

///< 硬盘管理
struct NET_SDK_STORAGEDISK
{
	int					iPhysicalNo;								//< 序号
	int					iPartNumber;								//< 分区数
	NET_SDK_DriverInformation diPartitions[NET_SDK_MAX_DRIVER_PER_DISK];
};

///< 全部硬盘的信息列表, 最多8块硬盘
///< 命令ID: NET_SDK_CONFIG_DISK_INFO
struct NET_SDK_StorageDeviceInformationAll
{
	int iDiskNumber;												//< 硬盘数目
	NET_SDK_STORAGEDISK vStorageDeviceInfoAll[NET_SDK_MAX_DISK_PER_MACHINE];
	int iMaxDiskNumber;												//< 设备支持的最大的硬盘数
};

/// 存储设备控制类型
enum NET_SDK_StorageDeviceControlTypes
{
	NET_SDK_STORAGE_DEVICE_CONTROL_SETTYPE,							//< 设置类型
	NET_SDK_STORAGE_DEVICE_CONTROL_RECOVER,							//< 恢复错误
	NET_SDK_STORAGE_DEVICE_CONTROL_PARTITIONS,						//< 分区操作
	NET_SDK_STORAGE_DEVICE_CONTROL_CLEAR,							//< 清除操作
	NET_SDK_STORAGE_DEVICE_CONTROL_NR,
};

///< 清除磁盘数据类型
enum NET_SDK_StorageDeviceClearTypes
{
	NET_SDK_STORAGE_DEVICE_CLEAR_DATA,								//< 清除录像数据
	NET_SDK_STORAGE_DEVICE_CLEAR_PARTITIONS,						//< 清除分区
	NET_SDK_STORAGE_DEVICE_CLEAR_NR,
};

///< 驱动器类型
enum NET_SDK_FileSystemDriverTypes
{
	NET_SDK_DRIVER_READ_WRITE	= 0,								//< 读写驱动器
	NET_SDK_DRIVER_READ_ONLY	= 1,								//< 只读驱动器
	NET_SDK_DRIVER_EVENTS		= 2,								//< 事件驱动器
	NET_SDK_DRIVER_REDUNDANT	= 3,								//< 冗余驱动器
	NET_SDK_DRIVER_SNAPSHOT		= 4,								//< 快照驱动器
	NET_SDK_DRIVER_TYPE_NR		= 5,								//< 驱动器类型个数
	NET_SDK_DRIVER_UNUSED		= 0xff,								//< 没有使用的驱动器结构
};

///< 存储设备控制
///< 命令ID: NET_SDK_CONFIG_DISK_MANAGER
struct NET_SDK_StorageDeviceControl
{
	int							iAction;							//< 见enum NET_SDK_StorageDeviceControlTypes
	int							iSerialNo;							//< 磁盘序列号
	int							iPartNo;							//< 分区号
	int							iType;								//< enum NET_SDK_StorageDeviceClearTypes或者NET_SDK_FileSystemDriverTypes
	int							iPartSize[2];						//< 各个分区的大小
};

///< 设备信息
typedef struct
{
	char						sSoftWareVersion[64];				//< 软件版本信息
	char						sHardWareVersion[64];				//< 硬件版本信息
	char						sEncryptVersion[64];				//< 加密版本信息
	NET_SDK_SYSTEM_TIME			tmBuildTime;						//< 软件创建时间
	char						sSerialNumber[64];					//< 设备序列号
	int							byChanNum;							//< 视频输入通道数
	int							iVideoOutChannel;					//< 视频输出通道数
	int							byAlarmInPortNum;					//< 报警输入通道数
	int 						byAlarmOutPortNum;					//< 报警输出通道数
	int 						iTalkInChannel;						//< 对讲输入通道数
	int 						iTalkOutChannel;					//< 对讲输出通道数
	int 						iDeviceType;						//< 设备类型	
	int 						iAudioInChannel;					//< 音频输入通道数
	int 						iCombineSwitch;						//< 组合编码通道分割模式是否支持切换
	int 						iDigChannel;						//< 数字通道数
	unsigned int				uiDeviceRunTime;					//< 系统运行时间
	char						sHardWare[64];						//< 设备型号
#if defined (WIN32) || defined(MAC)
#ifndef ANNI_CONFIGURE
	int							iExternCom;							//< 其他厂家对接，用于指代厂家吧，方便做些特殊处理#endif
	int							nPreViewChannel;					//< 多通道的预览通道数
#endif
#endif
	
}NET_SDK_DEVICEINFO,*LPNET_SDK_DEVICEINFO;

///< 自动维护设置
struct NET_SDK_AutoMaintainConfig
{
	int							iAutoRebootDay;						//< 自动重启设置日期
	int							iAutoRebootHour;					//< 重启整点时间	[0, 23]	
	int							iAutoDeleteFilesDays;				//< 自动删除文件时间[0, 30]
};

///< 默认配置种类
enum NET_SDK_DefaultConfigKinds
{
	NET_SDK_DEFAULT_CFG_GENERAL,									//< 普通配置
	NET_SDK_DEFAULT_CFG_ENCODE,										//< 编码配置
	NET_SDK_DEFAULT_CFG_RECORD,										//< 录像配置
	NET_SDK_DEFAULT_CFG_NET_SERVICE,								//< 网络服务
	NET_SDK_DEFAULT_CFG_NET_COMMON,									//< 通用网络
	NET_SDK_DEFAULT_CFG_ALARM,										//< 报警
	NET_SDK_DEFAULT_CFG_PTZCOMM,									//< 云台，串口
	NET_SDK_DEFAULT_CFG_USERMANAGER,								//< 用户管理
	NET_SDK_DEFAULT_CFG_PREVIEW,									//< 预览配置
	NET_SDK_CFG_CAMERA_PARAM,										//< 网络摄像头配置
	NET_SDK_DEFAULT_CFG_END,
};

///< 恢复的默认配置种类
///< 命令ID: NET_SDK_CONFIG_DEFAULT
struct NET_SDK_SetDefaultConfigTypes
{
	NET_SDK_BOOL				vSetDefaultKinds[NET_SDK_DEFAULT_CFG_END];
}; 

typedef struct
{
	int							nChannel;							//< 通道号
	int							nStream;							//< 0: 主码流, 1: 子码流
	int							nMode;								//< 0: TCP方式,1: UDP方式, 2:多播方式,3: RTP方式, 4: 音视频分开(TCP)
	int							nComType;							//< 只对组合编码通道有效, 组合编码通道的拼图模式
}NET_SDK_CLIENTINFO,*LPNET_SDK_CLIENTINFO;

///< 按文件查找录像的查找类型
enum NET_SDK_File_Type
{
	NET_SDK_RECORD_ALL		= 0,									//< 全
	NET_SDK_RECORD_ALARM	= 1,									//< 外部报警录像
	NET_SDK_RECORD_DETECT,											//< 视频侦测录像
	NET_SDK_RECORD_REGULAR,											//< 普通录像
	NET_SDK_RECORD_MANUAL,											//< 手动录像
	NET_SDK_RECORD_Intelligent,                                     //智能录像
	NET_SDK_PIC_ALL			= 10,									//< 图片, 全
	NET_SDK_PIC_ALARM,												//< 外部报警录像
	NET_SDK_PIC_DETECT,												//< 视频侦测录像
	NET_SDK_PIC_REGULAR,											//< 普通录像
	NET_SDK_PIC_MANUAL,												//< 手动录像


	NET_SDK_PIC_Intelligent, 
	NET_SDK_TYPE_NUM
};

///< 按文件查询录像的查询条件
///< 不支持同步
typedef struct 
{
	int							nChannelN0;							//< 通道号
	int							nFileType;							//< 文件类型, 见SDK_File_Type
	int							nStream;						//< 码流类型
	NET_SDK_TIME				startTime;							//< 开始时间
	NET_SDK_TIME				endTime;							//< 结束时间
	char						szCard[32];							//< 卡号
}NET_SDK_FINDINFO;

///< 录像文件返回结构体
typedef struct 
{
	int							ch;									//< 通道号
	int							size;								//< 文件大小
	int							nstream;							//< 码流类型
	char						sFileName[108];						//< 文件名
	NET_SDK_SYSTEM_TIME			stBeginTime;						//< 文件开始时间
	NET_SDK_SYSTEM_TIME			stEndTime;							//< 文件结束时间
}NET_SDK_FILE_DATA;

///< 回放动作
enum NET_SDK_PlayBackAction
{
	NET_SDK_PLAY_BACK_PAUSE,										//< 暂停回放
	NET_SDK_PLAY_BACK_CONTINUE,										//< 继续回放
	NET_SDK_PLAY_BACK_SEEK,											//< 回放定位, 时间s为单位
	NET_SDK_PLAY_BACK_FAST,											//< 加速回放
	NET_SDK_PLAY_BACK_SLOW,											//< 减速回放
	NET_SDK_PLAY_BACK_SEEK_PERCENT,									//< 回放定位百分比
	NET_SDK_PLAY_FORWARD,											//< 前向回放
	NET_SDK_PLAY_BACKWARD                                           //< 倒放
};

///< 按时间段查询录像的查询条件
struct NET_SDK_SearchByTime
{
	int							nHighChannel;						//< 33~64录像通道号掩码
	int							nLowChannel;						//< 1~32录像通道号掩码
	int							nFileType;							//< 文件类型, 见SDK_File_Type
	int							nStream;							//< 码流类型
	NET_SDK_SYSTEM_TIME			stBeginTime;						//< 查询开始时间
	NET_SDK_SYSTEM_TIME			stEndTime;							//< 查询结束时间
	int							iSync;								//< 查询的通道是否需要同步
};

///< 每个通道的按时间记录的录像信息
struct NET_SDK_SearchByTimeInfo
{
	int							iChannel;							//< 录像通道号
	unsigned char				cRecordBitMap[720];					//< 录像记录用720个字节的5760位来表示一天中的1440分钟
																	//< 0000:无录像 0001:F_COMMON 0002:F_ALERT 0003:F_DYNAMIC 0004:F_CARD 0005:F_HAND
};

///< 按时间搜索录像的结果
struct NET_SDK_SearchByTimeResult
{
	int							nInfoNum;							//< 通道的录像记录信息个数
	int							nStream;
	NET_SDK_SearchByTimeInfo	ByTimeInfo[SDK_NET_MAX_CHANNUM];	//< 通道的录像记录信息
};

///< 报警信息
typedef struct
{
	int nChannel;													//< 产生报警的通道号
	int iEvent;														//< 报警事件
	int iStatus;													//< 状态
	NET_SDK_SYSTEM_TIME SysTime;									//< 时间
}NET_SDK_AlarmInfo;

///< 日志查询条件
struct NET_SDK_LogSearchCondition
{
	int nType;														//< 日志类型
	int iLogPosition;												//< 从上次查询的结束时的日志指针
	NET_SDK_SYSTEM_TIME stBeginTime;								//< 查询日志开始时间
	NET_SDK_SYSTEM_TIME stEndTime;									//< 查询日志结束时间
};

///< 1条日志信息
struct NET_SDK_LogItem
{
	char sType[24];													//< 日志类型
	char sUser[32];													//< 日志用户
	char sData[68];													//< 日志数据
	NET_SDK_SYSTEM_TIME stLogTime;									//< 日志时间
	int iLogPosition;												//< 从上次查询的结束时的日志指针
};

///< 日志返回信息
struct NET_SDK_LogList
{
	int iNumLog;													//< 日志条数
	NET_SDK_LogItem Logs[SDK_NET_MAX_RETURNED_LOGLIST];				//< 日志列表, 1次查询最多返回128条
};

///< 语音对讲格式
struct NET_SDK_AudioInFormatConfigAll
{
	NET_SDK_AudioInFormatConfig vAudioInFormatConfig[NET_SDK_AUDIO_ENCODE_TYPES_NR];
};

///< 告警状态
struct NET_SDK_DVR_ALARMSTATE
{
	int iVideoMotion;												//< 移动侦测状态,用掩码表示通道号,bit0代表通道一,以此类推 1: 有告警 0: 无告警
	int iVideoBlind;												//< 视频遮挡状态,用掩码表示通道号,bit0代表通道一,以此类推 1: 有告警 0: 无告警
	int iVideoLoss;													//< 视频丢失状态,用掩码表示通道号,bit0代表通道一,以此类推 1: 有告警 0: 无告警
	int iAlarmIn;													//< 告警输入状态,用掩码表示通道号,bit0代表通道一,以此类推 1: 有告警 0: 无告警
	int iAlarmOut;													//< 告警输出状态,用掩码表示通道号,bit0代表通道一,以此类推 1: 有告警 0: 无告警
};

///< 通道状态
struct NET_SDK_DVR_CHANNELSTATE
{
	bool	bRecord;												//< 是否正在录像
	int		iBitrate;												//< 当前码率
};

///< DVR工作状态
///< 命令ID: NET_SDK_WORK_STATE
struct NET_SDK_DVR_WORKSTATE
{
	NET_SDK_DVR_CHANNELSTATE vChnState[SDK_NET_MAX_CHANNUM];		//< 通道状态
	NET_SDK_DVR_ALARMSTATE vAlarmState;								//< 报警状态
};


///< 按键值, 不能随便更改
enum NET_SDK_KeyBoardValue
{
	NET_SDK_KEY_0, 
	NET_SDK_KEY_1,
	NET_SDK_KEY_2, 
	NET_SDK_KEY_3, 
	NET_SDK_KEY_4, 
	NET_SDK_KEY_5, 
	NET_SDK_KEY_6,
	NET_SDK_KEY_7, 
	NET_SDK_KEY_8, 
	NET_SDK_KEY_9,
	NET_SDK_KEY_10,
	NET_SDK_KEY_11, 
	NET_SDK_KEY_12,
	NET_SDK_KEY_13,
	NET_SDK_KEY_14,
	NET_SDK_KEY_15,
	NET_SDK_KEY_16,
	NET_SDK_KEY_10PLUS,
	NET_SDK_KEY_UP = 20,     										//< 上或者云台向上
	NET_SDK_KEY_DOWN,        										//< 下或者云台向下
	NET_SDK_KEY_LEFT,        										//< 左或者云台向左
	NET_SDK_KEY_RIGHT,       										//< 右或者云台向右
	NET_SDK_KEY_SHIFT,												//< Shift建
	NET_SDK_KEY_PGUP,        										//< 上一页
	NET_SDK_KEY_PGDN,        										//< 下一页
	NET_SDK_KEY_RET,         										//< 确认
	NET_SDK_KEY_ESC,         										//< 取消或退出
	NET_SDK_KEY_FUNC,        										//< 切换输入法
	NET_SDK_KEY_PLAY,        										//< 播放/暂停
	NET_SDK_KEY_BACK,        										//< 倒放
	NET_SDK_KEY_STOP,        										//< 停止
	NET_SDK_KEY_FAST,        										//< 快放
	NET_SDK_KEY_SLOW,        										//< 慢放
	NET_SDK_KEY_NEXT,        										//< 下一个文件
	NET_SDK_KEY_PREV,        										//< 上一个文件
	NET_SDK_KEY_REC = 40,    										//< 录像设置
	NET_SDK_KEY_SEARCH,      										//< 录像查询
	NET_SDK_KEY_INFO,        										//< 系统信息
	NET_SDK_KEY_ALARM,       										//< 告警输出
	NET_SDK_KEY_ADDR,        										//< 遥控器地址设置
	NET_SDK_KEY_BACKUP,      										//< 备份
	NET_SDK_KEY_SPLIT,       										//< 画面分割模式切换，每按一次切换到下一个风格模式
	NET_SDK_KEY_SPLIT1,      										//< 单画面
	NET_SDK_KEY_SPLIT4,      										//< 四画面
	NET_SDK_KEY_SPLIT8,      										//< 八画面
	NET_SDK_KEY_SPLIT9,      										//< 九画面
	NET_SDK_KEY_SPLIT16,     										//< 16画面
	NET_SDK_KEY_SHUT,        										//< 关机
	NET_SDK_KEY_MENU,        										//< 菜单
	NET_SDK_KEY_PTZ = 60,    										//< 进入云台控制模式
	NET_SDK_KEY_TELE,        										//< 变倍减
	NET_SDK_KEY_WIDE,        										//< 变倍加
	NET_SDK_KEY_IRIS_SMALL,  										//< 光圈增
	NET_SDK_KEY_IRIS_LARGE,  										//< 光圈减
	NET_SDK_KEY_FOCUS_NEAR,  										//< 聚焦远
	NET_SDK_KEY_FOCUS_FAR,   										//< 聚焦近
	NET_SDK_KEY_BRUSH,       										//< 雨刷
	NET_SDK_KEY_LIGHT,       										//< 灯光
	NET_SDK_KEY_SPRESET,     										//< 设置预置点
	NET_SDK_KEY_GPRESET,     										//< 转至预置点
	NET_SDK_KEY_DPRESET,     										//< 清除预置点 
	NET_SDK_KEY_PATTERN,     										//< 模式
	NET_SDK_KEY_AUTOSCAN,    										//< 自动扫描开始结束
	NET_SDK_KEY_AUTOTOUR,    										//< 自动巡航
	NET_SDK_KEY_AUTOPAN,     										//< 线扫开始/结束
};

/// 按键状态
enum NET_SDK_KeyBoardState
{
	NET_SDK_KEYBOARD_KEYDOWN,										//< 按键按下
	NET_SDK_KEYBOARD_KEYUP,											//< 按键松开
};

///< 按键值
struct NET_SDK_KeyBoardData
{
	int iValue;														//< 键值
	int iState;														//< 按键状态
};

enum NET_SDK_MouseMsg
{
	NET_SDK_MOUSEMOVE,
	NET_SDK_LBUTTONDOWN,
	NET_SDK_LBUTTONUP,
	NET_SDK_LBUTTONDBLCLK,
	NET_SDK_RBUTTONDOWN,
	NET_SDK_RBUTTONUP,
};

struct NET_SDK_MouseData
{
	int   msg;
	short key;
	short x;
	short y;
	short z;
};

///< 升级信息获取
///< 命令ID: NET_SDK_CONFIG_UPGRADEINFO
struct NET_SDK_UpgradeInfo
{
	char			szSerial[64];
	char			szHardware[32];
	char			strVersion[32];
	char			szVendor[32];
	char			strProduct[32];
	unsigned int	uiLogoArea[2];
};

///< 网络报警
struct NET_SDK_AlarmNet
{
	int iEvent;														//< 目前未使用
	int iState;														//< 每bit表示一个通道,bit0:第一通道,0-无报警 1-有报警, 依次类推
};

enum NET_SDK_SERIAL_TYPE
{
	NET_RS232 = 0,													//< 232串口
	NET_RS485 = 1,													//< 485串口
};


enum NET_MEDIA_PACK_TYPE
{
	NET_FILE_HEAD		= 0,	    								//< 文件头
	NET_VIDEO_I_FRAME	= 1,										//< 视频I帧
	NET_VIDEO_B_FRAME	= 2,										//< 视频B帧
	NET_VIDEO_P_FRAME	= 3,										//< 视频P帧
	NET_VIDEO_BP_FRAME	= 4,										//< 视频BP帧
	NET_VIDEO_BBP_FRAME	= 5,										//< 视频B帧B帧P帧
	NET_VIDEO_J_FRAME	= 6,										//< 图片帧
	NET_AUDIO_PACKET	= 10,										//< 音频包
};

typedef struct
{
	int				nPacketType;	//< 包类型,见NET_MEDIA_PACK_TYPE
	char*			pPacketBuffer;	//数据的起始地址，包含我们自己的私有头						
	unsigned int	dwPacketSize;	//包大小--包括我们自己的私有头
	char*			pAVContent;		//音视数据的起始地址，不包含私有头
	unsigned int    dwContentSize;  //数据大小，不包含私有头

	// 绝对时标
	int				nYear;											//< 时标:年		
	int				nMonth;											//< 时标:月
	int				nDay;											//< 时标:日
	int				nHour;											//< 时标:时
	int				nMinute;										//< 时标:分
	int				nSecond;										//< 时标:秒
	unsigned int 	dwTimeStamp;									//< 相对时标低位，单位为毫秒
	unsigned int	dwTimeStampHigh;								//< 相对时标高位，单位为毫秒
	unsigned int	dwFrameNum;										//< 帧序号
	unsigned int	dwFrameRate;									//< 帧率
	unsigned short	uWidth;											//< 图像宽度
	unsigned short	uHeight;										//< 图像高度
	unsigned int    Reserved[6];									//< 保留字段
} NET_SDK_PACKET_INFO_EX;


enum NET_SDK_OEMID
{
	NET_SDK_VENDOR_GENERAL,	//韬视
	NET_SDK_VENDOR_YLTX,	//云领天下
	NET_SDK_VENDOR_ANNI,	//安尼
	NET_SDK_VENDOR_BM,		//北美
	NET_SDK_VENDOR_ICU,
	NET_SDK_VENDOR_ANNI007,
	NET_SDK_VENDOR_ANNI1012,
	NET_SDK_VENDOR_ANNISZY, //神州鹰
	NET_SDK_VENDOR_WANJIAAN,
	NET_SDK_VENDOR_QSEE,
	NET_SDK_VENDOR_ZHDL,	//珠海电力
	NET_SDK_VENDOR_WJA2010148,
	NET_SDK_VENDOR_LBDOOR,   //利堡门铃项目
	NET_SDK_VENDOR_ICU001,  //OEM_ICU001客户
	NET_SDK_VENDOR_RJXSDLSX,   //动力视讯客户
	NET_SDK_VENDOR_WJA2020228, //WJA2020228
	NET_SDK_VENDOR_SUNING,
	NET_SDK_VENDOR_NR
};



///< OEM设置
struct NET_SDK_OEMInfo
{
	int  nOEMID;						//< OEM ID
	char sCompanyName[32];					//< 公司名
	char sTel[32];							//< 电话
	char sAddr[32];						//< 地址
};

struct NET_SDK_CameraAbility
{
	char AFSupport;   //< 是否支持AF：[0-不支持；1-支持]
	char WDRSupport;  //< 是否支持WDR：[0-不支持；1-支持]
	char PTZSupport;  //< 是否支持PTZ：[0-不支持；1-支持]
	char AISupport;   //< 是否支持AI：[0-不支持；1-支持]
	char Reserve[32];
};


///< 曝光配置
struct NET_SDK_ExposureParam
{
	int							level;								//< 曝光等级
	unsigned int				leastTime;							//< 自动曝光时间下限或手动曝光时间，单位微秒
	unsigned int				mostTime;							//< 自动曝光时间上限，单位微秒
};

///< 增益配置
struct NET_SDK_GainParam
{
	int							gain;								//< 自动增益上限(自动增益启用)或固定增益值
	int							autoGain;							//< 自动增益是否启用，0:不开启  1:开启
};

///< 网络摄像头参数
///< 命令ID: NET_SDK_CAMERAPARAM   旧版本
struct NET_SDK_CameraParam
{
	unsigned int				whiteBalance;       				//< 白平衡
	unsigned int				dayNightColor;      				//< 日夜模式，取值有彩色、自动切换和黑白
	unsigned int				elecLevel;          				//< 参考电平值
	unsigned int				apertureMode;       				//< 自动光圈模式
	unsigned int				BLCMode;            				//< 背光补偿模式
	NET_SDK_ExposureParam		exposureParam;						//< 曝光配置
	NET_SDK_GainParam			gainParam;							//< 增益配置
	unsigned int				PictureFlip;						//< 图片上下翻转
	unsigned int				PictureMirror;						//< 图片左右翻转
	unsigned int				RejectFlicker;						//< 日光灯防闪功能
	unsigned int				EsShutter;							//< 电子慢快门功能
	int							ircut_mode;							//< IR-CUT切换 0 = 红外灯同步切换 1 = 自动切换
	int							dnc_thr;							//< 日夜转换阈值
	int							ae_sensitivity;						//< AE灵敏度配置
	int							Day_nfLevel;						//< noise filter 等级，0-5,0不滤波，1-5 值越大滤波效果越明显
	int							Night_nfLevel;						//< noise filter 等级，0-5,0不滤波，1-5 值越大滤波效果越明显
	int							Ircut_swap;							//< ircut 正常序= 0        反序= 1
};
struct NET_SDK_CameraParamAll
{
	NET_SDK_CameraParam   vCameraParamAll[SDK_NET_MAX_CHANNUM];
};

///< 多个摄像头的参数
///< 命令ID: NET_SDK_CAMERAPARAM
struct NET_SDK_CameraParamV2
{
	char   DayNightMode; //< 日夜模式: [0-自动/红外星光；1-彩色；2-黑白].
	char   DNCThreshold; //< 日夜切换阈值[10-50].
	char   IRSwitchMode; //< IRCUT切换模式: [0-红外灯同步切换；1-自动切换].
	char   ImageMirror;   //< 镜像
	char   ImageFlip;     //< 翻转
	char   IRCutSwap;     //< IRCUT反序: [0-正常；1-反序].
	char   FocusMode;     //< 聚焦模式: [0-自动；1-手动；2-半自动].
	char   WDRMode;       //< WDR模式：[0-关闭；1-开启]
	char   ApertureAuto; //< 自动光圈[0-关闭；1-开启]
	char   ElecShutter;   //< 电子快门[0-无；1-弱；2-中；3-强]
	char   Reserve[14];
};

/// 多个通道的摄像头的通用参数
struct NET_SDK_CameraParamAllV2
{
	NET_SDK_CameraParamV2 vCamGeneralParamAll[SDK_NET_MAX_CHANNUM];
};



struct NET_SDK_CameraIspParam
{
	NET_SDK_ExposureParam ExpParam; //< 曝光配置
	NET_SDK_GainParam     GainParam;//< 增益配置
	char   WBMode;    //< 白平衡模式(情景模式)[0-自动；1-低光优先；2-高光优先]
	char   AntiFlicker; //< 日光灯防闪[0-关闭；1-开启]
	char   AESensitive;  //< AE灵敏度[1-10]
	char   BLCEnable; //< 背光补偿使能: 0-关闭；1-开启
	short  BLCLevel;   //< WDR开启时代表WDR等级[0-100]；
	//< WDR关闭时代表背光补偿区域[0-BLC关闭；1-上；2-下；3-左；4-右；5-中心].
	short  ExpRefLevel;  //< 自动曝光参考值[1-255]
	char   DefogEnable; //< 去雾使能[0-关闭；1-开启]
	short  DefogLevel;   //< 去雾等级
	char   NFLevel;    //< 降噪等级[0-自动；1-5].
	char   UserModify;  //< 用户是否修改过[0-未修改；1-已修改]
	char   Reserve[15];
};


typedef enum 
{
	NET_SDK_CAM_ISP_PARAM_MUTILCOLOR,
	NET_SDK_CAM_ISP_PARAM_BLACKWHITE,
	NET_SDK_CAM_ISP_PARAM_MUTILCOLOR_WDR,
	NET_SDK_CAM_ISP_PARAM_BLACKWHITE_WDR,
	NET_SDK_CAM_ISP_PARAM_TYPE_NR
}NET_SDK_CAMERA_ISP_PARAM_TYPE;



/// 日夜(时间段)总的ISP参数集合
struct NET_SDK_CameraIspTotalParam
{
	char   DayNightState; //< 日夜状态[0-Day; 1-Night].注意:此值每次都需要重新获取.
	NET_SDK_CameraIspParam vCamIspParam[NET_SDK_CAM_ISP_PARAM_TYPE_NR];
};

/// 多个通道的摄像头ISP参数
struct NET_SDK_CameraIspParamAll
{
	NET_SDK_CameraIspTotalParam vCamIspTotalParam[SDK_NET_MAX_CHANNUM];
};





enum NET_SDK_DEVICE_TYPE
{
	NET_SDK_DEVICE_TYPE_DVR,										//< 普通DVR设备
	NET_SDK_DEVICE_TYPE_NVR,										//< NVR设备
	NET_SDK_DEVICE_TYPE_IPC,										//< IPC设备
	NET_SDK_DEVICE_TYPE_HVR,										//< 混合dvr
	NET_SDK_DEVICE_TYPE_IVR,										//< 智能dvr
	NET_SDK_DEVICE_TYPE_MVR,										//< 车载dvr
	NET_SDK_DEVICE_TYPE_NR
};

///< 解码器地址设置
struct NET_SDK_NetDecorderConfig
{
	bool	Enable;													//< 是否开启
	char	UserName[SDK_NET_MAX_USERNAME_LENGTH];					//< 用户名
	char	PassWord[SDK_NET_NAME_PASSWORD_LEN];					//< 密码
	char	Address[SDK_NET_MAX_FILTERIP_NUM];						//< IP	
	int		Protocol;												//< 协议
	int		Port;													//< 解码器连接端口
	int		Channel;												//< 解码器连接通道号
	int		Interval;												//< 轮巡的间隔时间(s),0:表示永久
	char	ConfName[SDK_NET_MAX_USERNAME_LENGTH];					//< 配置名称
	int		DevType;												//< 设备类型
	int		StreamType;												//< 连接的码流类型CaptureChannelTypes
};


///< 数字通道的配置
///< 命令ID: NET_SDK_NETDECORDER
struct NET_SDK_NetDigitChnConfig
{
	NET_SDK_BOOL				Enable;								//< 数字通道是否开启		
	int							ConnType;							//<	连接类型, 取DecoderConnectType的值 0 单连接 1 多连接
	int							TourIntv;							//<	多连接时轮巡间隔
	unsigned int				SingleConnId;						//< 单连接时的连接配置ID, 从1开始，0表示无效
	NET_SDK_BOOL				EnCheckTime;						//< 开启对时
	int							ConfNum;							//< 多连接时的数目
	NET_SDK_NetDecorderConfig	vNetDecorderConf[SDK_NET_MAX_MULTINET_NUM]; //< 网络设备通道配置表
};

///< 所有数字通道的配置
///< 命令ID: NET_SDK_NETDECORDER
struct NET_SDK_NetDecorderConfigAll
{
	NET_SDK_NetDigitChnConfig DigitChnConf[SDK_NET_MAX_CHANNUM];
};

///< 解码器地址设置
struct NET_SDK_NetDecorderConfig_V4
{
	bool	Enable;													//< 是否开启
	char	UserName[SDK_NET_MAX_USERNAME_LENGTH];					//< 用户名
	char	PassWord[SDK_NET_NAME_PASSWORD_LEN];					//< 密码
	char	Address[SDK_NET_URL_ADDRESS_LENGTH];						//< IP	
	char	Address2[SDK_NET_URL_ADDRESS_LENGTH];						//< IP	
	int		Protocol;												//< 协议
	int		Port;													//< 解码器连接端口
	int		Channel;												//< 解码器连接通道号
	int		Interval;												//< 轮巡的间隔时间(s),0:表示永久
	char	ConfName[SDK_NET_MAX_USERNAME_LENGTH];					//< 配置名称
	int		DevType;												//< 设备类型
	int		StreamType;												//< 连接的码流类型CaptureChannelTypes
};


struct NET_SDK_NetDigitChnConfig_V4
{
	NET_SDK_BOOL				Enable;								//< 数字通道是否开启		
	int							ConnType;							//<	连接类型, 取DecoderConnectType的值 0 单连接 1 多连接
	int							TourIntv;							//<	多连接时轮巡间隔
	unsigned int				SingleConnId;						//< 单连接时的连接配置ID, 从1开始，0表示无效
	NET_SDK_BOOL				EnCheckTime;						//< 开启对时
	int							ConfNum;							//< 多连接时的数目
	NET_SDK_NetDecorderConfig_V4	vNetDecorderConf[4]; //< 网络设备通道配置表
};


struct NET_SDK_NetDecorderConfigAll_V4
{
	NET_SDK_NetDigitChnConfig_V4 DigitChnConf[SDK_NET_MAX_CHANNUM];
};



///< 通道模式汇总
#define SDK_NET_MAX_HVR_CHNCAP	32

///< 一种通道模式的信息
struct NET_SDK_HVR_CHNCAP 
{
	short nD1Chn;		// 支持的D1路数
	short n4MChn;		// 支持的4M路数
	short n960HChn;		// 支持的960H路数
	short n6MChn;
	short n720PChn;		// 支持的720P路数
	short n8MChn;		// 支持的8M路数
	short n1080PChn;	// 支持的1080P路数
	short nH4MChn;		// 支持的4M-N路数
	short nCIFChn;		// 支持的CIF通道数
	short nResv4;
	short n3MChn;    	// 支持的3M路数
	short nResv3;
	short n960PChn;  	// 支持的960P路数
	short nResv2;
	short n5MChn;    	// 支持的5M路数
	short nResv1;    	// 支持的5M路数
};

///< 设备的通道模式信息
struct NET_SDK_CAPTURE_HVRCAP 
{
	NET_SDK_HVR_CHNCAP		DigitalCap;								//< 支持的数字通道信息
	NET_SDK_HVR_CHNCAP		AnalogCap;								//< 支持的模拟通道信息
	int						MaxPlayBackWayChn;						//< 支持的最大回放路数
};

///< 设备所有的通道模式
struct NET_SDK_CAPTURE_TOTAL_HVRCAP 
{
	int						nHVRCap;								//< 实际支持的模式
	NET_SDK_CAPTURE_HVRCAP	HVRCap[SDK_NET_MAX_HVR_CHNCAP];			//< 所有模式的汇总
};

///< 通道模式配置
///< 命令ID: NET_SDK_CONFIG_CHANNEL_MODE
struct NET_SDK_NetDecorderChnModeConfig
{
	NET_SDK_CAPTURE_TOTAL_HVRCAP 	HVRTotalCap;
	int								HVRCurCapMode;					//< 设置的时候值设为小于0是总体设置(增、删), 大于等于32是恢复默认
};


#define  MAX_PROTOCOL_NAME_LEN		16

#define  MAX_SEARCH_DECORDER_NUM	64

enum SearchProtocl
{
	PROTOCOL_Private	= 0,										//< 以私有协议搜索
	PROTOCOL_Onvif		= 1,										//< 以Onvif协议搜索
	PROTOCOL_NetIP		= 3,
	PROTOCOL_All		= -1										//< 全部协议
};


///< 设备(NVR)支持的设备搜索协议
///< 对应NET_SDK_CONFIG_ABILITY_SEARCHPRO
struct NET_SDK_SEARCHPROTOCOLFUNC
{
	int							nProNum;							//< 协议个数(一般均包括了"NONE", 因此实际协议数目为nProNum - 1)
	char						vSearchProtocol[32][32]; 			//< 每个协议最多由32个字符组成,一般的格式是xxx_0, xxx_1, xxx表示协议名称, _后面的数字表示SearchProtocl,应用层进行解析
																	//< note: 一般第一个都是NONE,这个可以不用理会,如果不支持任何搜索协议,也将只有NONE这一个返回
};

///< 设备远程搜索出来的设备信息
struct NET_SDK_SearchByRemote_Device
{
	char						sDevName[SDK_NET_MAX_USER_LENGTH];	//< 设备名称
	int							nDevType;							//< 设备类型
	NET_SDK_CONFIG_IPAddress	DevIP;								//< 设备IP
	int							nPort;								//< 设备端口
	char						sMacAddr[SDK_NET_MAX_MAC_LEN];		//< Mac地址
	char						sUserName[SDK_NET_MAX_USER_LENGTH];	//< 用户登录名
	char						sUserPwd[SDK_NET_MAX_USER_LENGTH];	//< 用户登录密码
	int							nProtocol;							//< 协议,见SearchProtocl
};

///< 设备远程搜索出来的全部设备
struct NET_SDK_SearchByRemote_DeviceAll
{
	int 							nDevNumber;								//< 搜索结果设备数目
	NET_SDK_SearchByRemote_Device	vDeviceAll[MAX_SEARCH_DECORDER_NUM];	//< 搜索出来的设备
};

///< 云领天下添加云配置协议
struct NET_SDK_YLTX_Cloud
{
	NET_SDK_BOOL		bEnableCloud;
	char	szServerPath[64];
	int		nPort;	
	char	szID[32];
	char	szPassword[32];
	char	szName[64];	
	char    szReserverse[64];
};


///< 网络端口配置------------
struct NET_SDK_NetPortConfig
{
	int nOnvifServerPort;   //ONVIF 端口
	int nreserved[15];
};



struct NET_SDK_AnniPort
{
	int TCPPort;			///< TCP侦听端口
	int MobilePort;
	char rev[32];			///< 保留字段
};

//智能相关---


#define NET_IMP_MAX_OSC_NUM			4
/** 最大边界点数 */
#define NET_IMP_MAX_BOUNDARY_POINT_NUM	8
#define NET_IMP_MAX_POINT_NUM 10 
#define NET_IMP_NAME_BUF_SIZE 16
/** URP单绊线最多条数 */
#define NET_IMP_URP_MAX_TRIPWIRE_CNT 8
/** 坐标点 */


/** 周界检测模式 */
typedef enum
{
	NET_IMP_URP_PMODE_INTRUSION = 0,			/**< 入侵 */
	NET_IMP_URP_PMODE_ENTER,				/**< 进入 */
	NET_IMP_URP_PMODE_EXIT				/**< 离开 */
} URP_PERIMETER_MODE_E;

typedef struct 
{
	short s16X;					/**< x */
	short s16Y;					/**< y */
}NET_SDK_URP_IMP_POINT_S;

/** 线结构 */
typedef struct 
{
	NET_SDK_URP_IMP_POINT_S stStartPt;			/**< 线段起点 */
	NET_SDK_URP_IMP_POINT_S stEndPt;			/**< 线段终点 */
}NET_SDK_URP_LINE_S;
//added by mzhang 2011-11-14 14:00:14
typedef struct 
{
	int s32Valid;
	int s32PointNum;
	NET_SDK_URP_IMP_POINT_S astPoint[NET_IMP_MAX_BOUNDARY_POINT_NUM];
} NET_SDK_URP_POLYGON_REGION_S;
typedef struct 
{
	int s32Valid; //是否有效
	char as8Name[NET_IMP_NAME_BUF_SIZE]; //区域名称
	NET_SDK_URP_POLYGON_REGION_S stOscRg; //要检测区域定义
	NET_SDK_URP_POLYGON_REGION_S astSubRgA; //检测区域中的无效子区域
	NET_SDK_URP_POLYGON_REGION_S astSubRgB; //检测区域中的无效子区域
	NET_SDK_URP_POLYGON_REGION_S astSubRgC; //检测区域中的无效子区域
} NET_SDK_URP_OSC_SPECL_REGIONS_S;
typedef struct 
{
	int s32TimeMin; //时间约束
	int s32SizeMin; //最小尺寸
	int s32SizeMax; //最大尺寸
} NET_SDK_URP_OSC_LMT_PARA_S;

typedef struct 
{
	int s32SceneType; //场景类型
	int s32CameraType; //相机类型
	NET_SDK_URP_OSC_SPECL_REGIONS_S astSpclRgs[NET_IMP_MAX_OSC_NUM]; //要处理的区域个数
	NET_SDK_URP_OSC_LMT_PARA_S stOscPara; //一些约束
} NET_SDK_URP_OSC_RULE_PARA_S;


/** URP周界检测边界点 */
typedef struct 
{
	int					s32BoundaryPtNum;					/**< 边界点数目 */
	NET_SDK_URP_IMP_POINT_S		astBoundaryPts[NET_IMP_MAX_BOUNDARY_POINT_NUM];	/**< 边界点集合 */
}NET_SDK_URP_PERIMETER_LIMIT_BOUNDARY_S;

/** URP周界检测限制参数 */
typedef struct 
{
	int s32MinDist;						/**< 最小像素距离 */
	int s32MinTime;						/**< 最短时间 */
	int	s32DirectionLimit;					/**< 是否做方向限制 */
	int s32ForbiddenDirection;					/**< 禁止方向角度(单位: 角度) */
	NET_SDK_URP_PERIMETER_LIMIT_BOUNDARY_S stBoundary;			/**< 周界边界区域 */
}NET_SDK_URP_PERIMETER_LIMIT_PARA_S;

/** URP周界检测规则参数 */
typedef struct 
{
	int s32TypeLimit;						/**< 目标类型限制 */
	int s32TypeHuman;						/**< 目标类别：人(限定类型时使用) */
	int s32TypeVehicle;						/**< 目标类别：车 */
	int s32Mode;						/**< 周界模式 */
	NET_SDK_URP_PERIMETER_LIMIT_PARA_S stLimitPara;				/**< 周界限制参数 */
} NET_SDK_URP_PERIMETER_RULE_PARA_S;

typedef struct 
{
	int     s32Valid;						/**< 是否有效 */
	int     s32IsDoubleDirection;				/**< 表示该绊线是否为双向绊线(0: 否, 1: 是) */
	int     s32ForbiddenDirection;				/**< 单绊线禁止方向角度(单位: 度) */
	NET_SDK_URP_LINE_S	stLine;						/**< 单绊线位置 */
}NET_SDK_URP_TRIPWIRE_S;

/** URP单绊线限制参数 */
typedef struct 
{
	int s32MinDist;						/**< 最小像素距离 */
	int s32MinTime;						/**< 最短时间 */
}NET_SDK_URP_TRIPWIRE_LIMIT_PARA_S;
/** URP单绊线规则参数 */
typedef struct 
{
	int s32TypeLimit;						/**< 目标类型限制 */
	int s32TypeHuman;						/**< 目标类别：人(限定类型时使用) */
	int s32TypeVehicle;						/**< 目标类别：车 */
	NET_SDK_URP_TRIPWIRE_S astLines[NET_IMP_URP_MAX_TRIPWIRE_CNT];		/**< 单绊线 */
	NET_SDK_URP_TRIPWIRE_LIMIT_PARA_S stLimitPara;				/**< 单绊线限制参数 */
} NET_SDK_URP_TRIPWIRE_RULE_PARA_S;

typedef struct 
{
	int iShowTrack;						/// 是否显示轨迹
	int iShowRule;						/// 是否显示规则
	int iLevel;						   /// 警戒级别2：低级；1：中级；0: 高级
	int iPerimeterEnable;					/// 周界规则使能
	NET_SDK_URP_PERIMETER_RULE_PARA_S	stPerimeterRulePara;	/**< 周界检测 */
	int iTripWireEnable;					/// 单绊线规则使能
	NET_SDK_URP_TRIPWIRE_RULE_PARA_S	stTripwireRulePara;	/**< 单绊线检测 */
}NET_SDK_PEA_RULE_S;


typedef struct 
{
	int iShowTrack;				/// 是否显示轨迹
	int iShowRule;						     /// 是否显示规则
	int iLevel;						     /// 警戒级别2：低级；1：中级；0: 高级
	int iAbandumEnable;		   	/// 物品遗留使能
	NET_SDK_URP_OSC_RULE_PARA_S stObjAbandumRulePara; /// 物品遗留参数
	int iStolenEnable;			  	 /// 物品被盗使能
	NET_SDK_URP_OSC_RULE_PARA_S stObjStolenRulePara;   /// 物品被盗参数
	int iNoParkingEnable;		 	  	 /// 非法停车使能
	NET_SDK_URP_OSC_RULE_PARA_S stNoParkingRulePara;   /// 非法停车参数
}NET_SDK_OSC_RULE_S;


typedef struct 
{
	int iLevel;						     /// 灵敏度档位，1-5档，数值越大越灵敏越易报警
	int itBrightAbnmlEnable;				///< 亮度异常使能
	int iClarityEnable;					///< 清晰度检测使能
	int iNoiseEnable;					///< 噪声检测使能
	int iColorEnable;					///< 偏色检测使能
	int iFreezeEnable;					///< 画面冻结检测使能
	int iNosignalEnable;					///< 信号缺失检测使能
	int iChangeEnable;					///< 场景变换检测使能
	int iInterfereEnable;					///< 人为干扰检测使能 
	int iPtzLoseCtlEnable;					///< PTZ失控检测使能

}NET_SDK_AVD_RULE_S;

typedef struct 
{
	int     s32RulePointNum;        /* CPC2 Rule points Num */
	int     s32InOutFlag[10];       /* CPC2 Rule For In Out Flag */
	unsigned int     u32WalkFlag;            /* The person Walk Direation: 0 is UpDown, 1 is LeftRight*/
	NET_SDK_URP_IMP_POINT_S	stRulePoint[10];	    /* CPC2 Rule points */
	int     s32Sizemin;				/* Minimum Size in pixels */
	int     s32Sizemax;				/* Maximum Size in pixels */
	int     s32Countmax;			/* Maximum targets couted in one frame ?*/
	int     s32Sensitivity;			/* Algorithm Sensitivity ?*/
	unsigned int     u32Flag;				/* Algorithm Flag (reserved)*/
}NET_SDK_CPC_RULE_S;

//各种算法的规则配置集合
typedef struct tagRuleConfig
{
	NET_SDK_PEA_RULE_S stRulePea;   //周界检测与绊线配置
	NET_SDK_OSC_RULE_S stRuleOSC;	//物品盗移、滞留，非法停车配置
	NET_SDK_AVD_RULE_S stRuleAVD;	//异常视频信号诊断配置
	NET_SDK_CPC_RULE_S stRuleCPC;	//人头计数算法配置
}NET_SDK_RuleConfig;


//一个通道的智能分析配置
typedef struct tagAnalyzeConfig
{
	bool         bEnable;      //是否启用视频分析功能
	int          moduleType;   //使用的那种算法模块
	NET_SDK_EventHandler hEvent;  //联动事件
	NET_SDK_RuleConfig   stRuleConfig; //各种算法的规则配置
}NET_SDK_AnalyzeConfig;

//智能分析能力
struct NET_SDK_AnalyzeAbility
{
	unsigned int uIntelPEA; //智能PEA支持，位对应通道
	unsigned int uIntelOSC; //智能OSC支持，位对应通道
	unsigned int uIntelAVD; //智能AVD支持，位对应通道
	unsigned int uIntelCPC; //人流量记数支持，位对应通道
	unsigned int uIntelVFD;
	unsigned int uIntelIPD;
	unsigned int uIntelRes[6];
};

/// 自定义标题配置
struct NET_SDK_CUSTOMTITLE
{
	NET_SDK_VIDEO_WIDGET	customTitle;
	int				textAlign;//0 左对齐 1 右对齐
	char			strText[SDK_NET_CUSTOM_TITLE_MAX_LINE][SDK_NET_CHANNEL_NAME_MAX_LEN];
};

/// 自定义标题
struct NET_SDK_CustomTitleConfigAll
{
	NET_SDK_CUSTOMTITLE vCustomTitleConfigAll[SDK_NET_MAX_CHANNUM];
};




//所有通道的智能分析配置
typedef struct 
{
	NET_SDK_AnalyzeConfig vAnalyzeAll[SDK_NET_MAX_ANALYIZE_CHANNEL];
}NET_SDK_AnalyzeConfigAll;


struct NET_SDK_CPCLink
{
	int NoteTime;
	int ClearHour; //OSD叠加人数清零时间，－1为不清零
	NET_SDK_VIDEO_WIDGET CPCInfo;
};

struct NET_SDK_AnalyzeLink
{
	NET_SDK_CPCLink CPCLinkConfig;
};

struct NET_SDK_AnalyzeLinkAll
{
	NET_SDK_AnalyzeLink vAnalyzeLinkAll[SDK_NET_MAX_ANALYIZE_CHANNEL];
};

// Anni DDNS配置
struct NET_SDK_ANNI_DDNS
{
	NET_SDK_BOOL  Enable;	///< 是否开启
	NET_SDK_BOOL  Online;	///< 是否在线
	NET_SDK_BOOL  AutoMode; ///< 模式: 手动, 自动
	int Interval;			///< 保活间隔时间

	char DDNSKey[SDK_NET_NAME_PASSWORD_LEN];	///< DDNS类型: E-Video , PPADDNS
	char DomainName[SDK_NET_NAME_PASSWORD_LEN];	///< 域名
	NET_SDK_RemoteServerConfig Server;		///< DDNS服务器
};


// 窗口拖动配置
/// 视频通道配置
struct NET_SDK_VideoChannel
{
	int iChnType;		///< 通道类型   默认填1
	int iChn;			///< 通道号
};

struct NET_SDK_VideoChannelAll
{
	NET_SDK_VideoChannel vVideoChannel[SDK_NET_MAX_CHANNUM];  //窗口对应通道
};

enum NET_SDK_WindowStyle
{
		/// 只输出一个通道，组合序号对应的就是输出的通道号。
		split1,	
		split2,	
		split4,	
		split8,
		split9,	
		split16,
		splitPIP,
	
		split6,
		
		split12,
		split25,
		split36,	
		split13,		
		split5,
		split10,
		split20,
		split3,
		splitNR,
};

struct NET_SDK_SystemLastState
{
	int nLastSpt;   ///< 记录上次手动切换分割模式,设备启动时切换到最后一次分割状态           NET_SDK_WindowStyle
	int nLastSubSpt;	///< 记录上次手动切换分割模式,设备启动时切换到最后一次分割状态       /// 同时输出2*2四个通道，组合序号0输出0-3通道，组合序号1输出4-7通道，依次类推。
	NET_SDK_TIMESECTION tsWorkHour;			///这个值不要改，直接用get返回后的值，默认是不开启，0-24
};


// 颜色设置：

enum NET_SDK_COLOR_NUM{
	COL_BRIGHTNESS=0,
	COL_CONTRAST,
	COL_SATURATION,
	COL_HUE,
	COL_VSHARPNESS,
	COL_HSHARPNESS,
	COL_UGAIN,
	COL_VGAIN,
	COL_YFIR_PEAK,
	COL_TFSTRENGTH,
	COL_SFSTRENGTH,
	COL_MAXPARAM
};

//ZHDL 操作文件一些命令
enum ENUM_ZHDLOperations
{
	NET_ZHDL_OPR_PLAYFILE,   //播放或者关闭
	NET_ZHDL_OPR_DELFILE,    //删除文件
	NET_ZHDL_OPR_NR,
};

struct NET_SDK_COLOR_BASE
{
	int color_default;
	int LimitHigh;
	int LimitLow;
};

struct NET_SDK_VIDEO_CUSTOM_COLOR{
	int VideoChannel;
	int VideoFormat;
	int VideoSySFormat;
	int Videotype;
	NET_SDK_COLOR_BASE ColorBase[COL_MAXPARAM];
};

struct NET_SDK_ZHDLFileInfo
{
	int  action; // 1 播放 0 停止
	int  volume;
	unsigned int fileLen;
	char fileName[SDK_NET_ZHDL_AUDIO_NAME_LEN];
};
//上传或播放文件
struct NET_SDK_ZHDLFileInfo_T
{
	NET_SDK_ZHDLFileInfo info;
	char pathName[256];
};

//音乐文件
struct NET_SDK_ZHDLAudioFileList
{
	char strName[SDK_NET_ZHDL_AUDIO_NUM][SDK_NET_ZHDL_AUDIO_NAME_LEN];
};


struct NET_SDK_ZHDLAudioConfig
{
	char 		fileName[SDK_NET_ZHDL_AUDIO_NAME_LEN]; //播放文件名
	unsigned int		weeks; 		//播放星期 按位表示 0 星期日 1 星期一...
	NET_SDK_TIMESECTION	time;		//配置时间段
	int			volume;		//播放音量
};


struct NET_SDK_ZHDLAudioConfigAll
{
	NET_SDK_ZHDLAudioConfig vAudioCfg[SDK_NET_ZHDL_AUDIO_NUM];
};

enum NET_SDK_ZHDLLedModeTypes
{
	NET_ZHDLLED_MODE_CLOSED,	//关闭警灯
	NET_ZHDLLED_MODE_AUTO,		//警灯自动模式：光敏联动（夜晚自动点亮）
	NET_ZHDLLED_MODE_CONFIG,	//警灯配置模式
	NET_ZHDLLED_MODE_NR,		
};

struct NET_SDK_ZHDLLedConfig
{ 
	int			iLedMode;			//NET_SDK_ZHDLLedModeTypes,警灯模式
	NET_SDK_CONFIG_WORKSHEET  worksheet;
};

typedef enum EZ_SDK_IMAGE_SIZE_TYPE
{
	EZ_SDK_IMAGE_SIZE_D1, //704x576
	EZ_SDK_IMAGE_SIZE_D1_NTSC, //704x480
	EZ_SDK_IMAGE_SIZE_H1080P,  //960x1080
	EZ_SDK_IMAGE_SIZE_CIF,  //352x288
	EZ_SDK_IMAGE_SIZE_CIF_NTSC,  //352x240
	EZ_SDK_IMAGE_SIZE_VGA,  //640x480
	EZ_SDK_IMAGE_SIZE_NVGA,  //640x360
	EZ_SDK_IMAGE_SIZE_QVGA,  //320x240
	EZ_SDK_IMAGE_SIZE_SVGA,  //800x600
	EZ_SDK_IMAGE_SIZE_960H,  //960x576
	EZ_SDK_IMAGE_SIZE_960H_NTSC,  //960x480
	EZ_SDK_IMAGE_SIZE_720x480,  //720x480
	EZ_SDK_IMAGE_SIZE_720P,  //1280x720
	EZ_SDK_IMAGE_SIZE_1_3M,  //1280x960
	EZ_SDK_IMAGE_SIZE_SXGA,  //1280x1024
	EZ_SDK_IMAGE_SIZE_1080P,  //1920x1080
	EZ_SDK_IMAGE_SIZE_4M,  //2560x1440  原先是2_5但这个值没什么用，和IPC 修改一致直接改成4M	
	EZ_SDK_IMAGE_SIZE_3M,  //2048x1536
	EZ_SDK_IMAGE_SIZE_5M,  //2592x1944
	EZ_SDK_IMAGE_SIZE_3M_2048x1520,  //2048x1520
	EZ_SDK_IMAGE_SIZE_4M_2592x1520,  //2592x1520
	EZ_SDK_IMAGE_SIZE_720x576,  //720x576
	EZ_SDK_IMAGE_SIZE_3M_2304x1296,  //2304x1296
	EZ_SDK_IMAGE_SIZE_4M_2688x1520,  //2688x1520
	EZ_SDK_IMAGE_SIZE_8M_3840x2160, //4k
	EZ_SDK_IMAGE_SIZE_H4M,  	
	EZ_SDK_IMAGE_SIZE_H3M,
	EZ_SDK_IMAGE_SIZE_NR,
}EZ_SDK_IMAGE_SIZE_TYPE;



struct NET_SDK_DIGI_ENConfig
{
	unsigned int		iCompressionMask;		//	支持的数字通道编码方式掩码
	unsigned int		iResolutionMask;		//	分辨率掩码EZ_SDK_IMAGE_SIZE_TYPE
	unsigned int		iFpsMask;				//	fps掩码  -1就是25，没获取到
	int				    iCompression;			//  压缩模式 	
	int					iResolution;			//  分辨率 参照枚举CaptureImageSize	
	int					iBitRateControl;		//  码流控制 参照枚举CaptureBitrateControlType
	int					iQuality;				//  码流的画质 档次1-6		
	int					nFPS;					//  帧率值，NTSC/PAL不区分,负数表示多秒一帧		
	int					nBitRate;				// 设备只接收实际的码流值而不是下标。
	int					iGOP;					// i帧间隔秒数
	int					reserved[6];				
};


// 数字通道的编码配置
struct  NET_SDK_DIGI_Config
{
	NET_SDK_DIGI_ENConfig	maincfg;
	NET_SDK_DIGI_ENConfig   subcfg;
};
struct NET_SDK_DIGI_ConfigAll
{
	NET_SDK_DIGI_Config digiEncode[SDK_NET_MAX_CHANNUM];
};

 struct NET_SDK_DROPBOX
{
	NET_SDK_BOOL Enable;
	char AppKey[32];
	char AppSecret[32];
	char Code[64];
	char Token[128]; ///<注意:该字段不可随意修改!!!
	int	 TokenVailid;///<注意:该字段不可随意修改!!!	
	unsigned int Record;	/// 录象掩码
	unsigned int SnapShot;	/// 抓图掩码
	char Reserve[16];

};

 struct NET_SDK_DROPBOXV2
 {
	 NET_SDK_BOOL Enable;
	 char AppKey[32];
	 char AppSecret[32];
	 char Code[64];
	 char Token[128]; ///<注意:该字段不可随意修改!!!
	 int	 TokenVailid;///<注意:该字段不可随意修改!!!	
	 unsigned int Record;	/// 录象掩码
	 unsigned int SnapShot;	/// 抓图掩码
	 char Reserve[16];
	 NET_SDK_CONFIG_WORKSHEET  schedule;
 };

 struct NET_SDK_TIMEZONE
 {
	 int iFirstUserTimeZone;		///< 
	 int iTimeMin;			///< 分钟
 };
 enum NET_SDK_NetIPVersion
 {
	 IP_VERSION_4,
	 IP_VERSION_6,
 };

 struct NET_SDK_NetIPVersionConfig
 {
	 short IPVersion; ///< 参照NetIPVersion
	 short Reserve;
 };

 struct NET_SDK_NetCommonIPv6Config
 {
	 char LinkAddr[SDK_NET_MAX_DDNS_IPSIZE];		///<链路地址 
	 char HostIP[SDK_NET_MAX_DDNS_IPSIZE];			///< IP地址
	 char Gateway[SDK_NET_MAX_DDNS_IPSIZE];			///< 默认网管
	 char PrimaryDNS[SDK_NET_MAX_DDNS_IPSIZE];	    ///< DNS
	 char SecondaryDNS[SDK_NET_MAX_DDNS_IPSIZE];	///< 备用DNS	
	 int  IPNum;			    
 };

 struct NET_SDK_CONFIG_8021X
 {
	 NET_SDK_BOOL Enable;
	 char Username[32];
	 char Password[32];
	 int  Prototype; //认证方法 EAP-MD5\EAP-PEAP
	 char Reserved[56];
 };

 struct NET_SDK_CONFIG_GB28181
 {
	 NET_SDK_BOOL bEnable;				///< 是否启用注册
	 int LocalPort;					///< 本地端口
	 char ServerID[SDK_NET_NAME_PASSWORD_LEN];	///< 服务器id
	 char ServerDomain[SDK_NET_PATH_NAME_LEN];	///< 服务器域
	 char RegistrarAddr[SDK_NET_PATH_NAME_LEN];	///< 注册服务器地址
	 int RegistrarPort;				///< 注册服务器端口
	 char Username[SDK_NET_NAME_PASSWORD_LEN];	///< 用户名称
	 char AuthID[SDK_NET_NAME_PASSWORD_LEN];	///< 验证id
	 char Password[SDK_NET_NAME_PASSWORD_LEN];	///< 验证密码
	 int Expires;						///< 注册有效期
	 short AliveTime;					///< 保活时间，暂未使用
	 short HbeatTime;					///< 心跳发送间隔
	 short HbeatCounts;					///< 最大心跳超时次数
	 unsigned int RegInterval;					///< 如果注册失败,与上一次注册时间间隔(秒),最少60秒(默认)
	 char Reserve[8];
 };

 ///< 设备目录结构，用于28181协议
 ///< 设备目录结构，用于28181协议
 struct NET_SDK_DEVICE_CATALOG_VIDEOID
 {
	 char VideoID[SDK_NET_MAX_SIP_ID_LEN];

 };
struct NET_SDK_DEVICE_CATALOG_ALARMINID
{
	char AlarmInID[SDK_NET_MAX_SIP_ID_LEN];

};

 struct NET_SDK_DEVICE_CATALOG
 {
	 NET_SDK_DEVICE_CATALOG_VIDEOID   DevCatalog[SDK_NET_MAX_CHANNUM];
	 NET_SDK_DEVICE_CATALOG_ALARMINID AlarmInID[SDK_NET_MAX_CHANNUM];
	 
 };

 struct NET_SDK_HDDTEST
 {
	 int iRet;			//成功，失败
	 int iMask;			//MASK 标识有几个SATA 口
 };

 struct NET_SDK_OperationMonitor
 {
	 int srcChn;
	 int dstChn;
	 int stream;
	 int reserved;

 };
 enum NET_SDK_IdType{
	 IDTYPE_LT,
	 IDTYPE_DN,
	 IDTYPE_TS,
	 IDTYPE_ZS,
	 IDTYPE_ALL
 };

 struct NET_SDK_NET_ZSKJ
 {
	 int Enable;
	 char UID[36];
	 char Server[32];
	 char Reserve[36];
 };



 struct NET_SDK_Apply_CloudId
 {
	 int  nIDtype;
	 char reserved[32];
 };
 
 
 //门铃留言配置
 struct NET_SDK_DoorMsgConfig
 {
	 int		iOpenMsg;		///<打开留言功能
	 int		iLockTip;		///<开锁提示音
	 int 		iMsgTip;		///<留言提示音
	 int		iMsgTime;		///<留言时间
	 int		iCustomTip;		///<自定义语言
 };

struct NET_SDK_DoorMsgAll
{
	NET_SDK_DoorMsgConfig  DoorMsgConfig[32];
};

 //门铃铃声设置
 struct NET_SDK_DoorRingConfig
 {
	 int	iRingDoor1;		///<Door1铃声
	 int 	iRingDoor2;		///<Door2铃声
	 int 	iRingVoloum;	///<铃声大小
	 int 	iRingTime;		///<铃声时间
	 int 	iLockDoor1;		///<Door1开锁时间
	 int 	iLockDoor2;		///<Door2开锁时间
	 NET_SDK_BOOL	bkeyVoloum;		///按键声
 };

 //门铃普通配置
 struct NET_SDK_DoorGeneralConfig
 {
	 int						iDoorCallRecord;	///<呼叫记录
	 int						iDoorNoBreak;		///<免打扰
	 NET_SDK_TIMESECTION		TimeSection;		/// <免打扰时间段
 };

 //门铃输入
 struct NET_SDK_DoorDisplayConfig
 {
	 int	iDoorPartOut;		///<分机输出
	 int 	iScreenSave;		///<屏保
 };

 struct NET_SDK_ServerUpgradeInfo
 {
	 char szfileName[128];
	 char szfiledate[32];
	 int    nFileLevel;
	 char  szChanngeLog[1024];
 };

 //GoogleDrive云存储
 typedef struct NET_SDK_GOOGLE_DRIVE
 {
	 int Enable;
	 char ClientID[96];
	 char ClientSecret[32];

	 char DeviceCode[128];    ///< A value that Google uniquely assigns to identify the device that runs the app requesting authorization. Identifies the device. 获取Token时需要此值.
	 //char UserCode[64];       ///< A case-sensitive value that identifies to Google the scopes that the application is requesting access to.
	 //char VerifURL[64];       ///< A URL that the user must navigate to, on a separate device, to enter the user_code and grant or deny access to your application. 
	 short CodeExpires;    ///< Code的有效期.
	 short Interval;       ///< 间隔时间(秒).Code获取成功后,设备需要每隔一段时间去查询用户是否已经完成授权.该值由Google服务器返回.

	 char AccessToken[256];   ///< The token that your application sends to authorize a Google API request. 有有效期限制!
	 char RefreshToken[256]; ///< AccessToken到期后使用该值获取新的有效Token. 注意:此值禁止修改!!! Google发放该值有次数限制,达到限制后不再发放新的,旧的也不能使用了!!!
	 unsigned int TokenExpires;       ///< The remaining lifetime of the access token in seconds. 
	 unsigned int TokenGetTime;       ///< 获取到有效Token的时间time(NULL).
	 NET_SDK_BOOL TokenValid;         ///< AccessToken是否有效. 该值目前只能:获取成功置TRUE, 到期重新获取失败置FALSE.
	 unsigned int Record;	///< 录象掩码
	 unsigned int Snapshot;	///< 抓图掩码
	 char Reserve[16];
 };

 ///< SNMP配置
 typedef struct NET_SDK_SnmpV3UserConfig
 {
	 char UserName[32];			/* 用户名 */
	 char SecurityLevel;			/* 用户安全级别 1:no auth,no priv  2:auth,no priv  3:auth,priv*/	
	 char AuthAlgorithm;			/* 认证算法 0 MD5；1 SHA */
	 char PrivAlgorithm;			/* 私钥算法 0 DES；1 AES */
	 char res;
	 char AuthPasswd[16];		/* 认证密码 */
	 char PrivPasswd[16];		/* 私钥密码 */
 };

 typedef struct NET_SDK_NetSnmpAgentConfig
 {
	 bool bEnableV1;				/* 是否开启v1 */							
	 bool bEnableV2c;			/* 是否开启v2c */		
	 bool bEnableV3;				/* 是否开启v3 */	
	 short SnmpPort;				/* SNMP的端口(默认是161) */

	 char ReadCommunity[64];		/* v1和v2c的只读权限的团体名 */
	 char WriteCommunity[64];	/* v1和v2c的读写权限的团体名 */

	 char TrapAddr[64];			/* Trap接收服务器IP */
	 char TrapCommunity[64];		/* Trap团体名 */
	 short TrapPort;				/* Trap接收服务器端口(默认为162) */

	 NET_SDK_SnmpV3UserConfig ReadOnlyUser;			/* v3只读用户 */
	 NET_SDK_SnmpV3UserConfig ReadWriteUser;			/* v3读写用户 */

	 char reserve[16];	///< 保留字段
 };
  typedef struct NET_SDK_NetDlxsConfig
  {
		char ServerName[SDK_NET_NAME_PASSWORD_LEN];						//< 服务名
		int Port;														//< 端口号
  };
 struct NET_SDK_FtpServerConfigV2
 {
	 bool						bEnable;							//< 服务器使能     
	 NET_SDK_RemoteServerConfig	Server;								//< FTP服务器
	 char cRemoteDir[SDK_NET_MAX_PATH_LENGTH];						//< 远程目录
	 int							iMaxFileLen;						//< 文件最大长度
	 NET_SDK_CONFIG_WORKSHEET	schedule;		// 时间段

 };

#ifdef FACE_DETECT
 typedef void (CALL_METHOD *fFaceDetectCallback)(long lFaceChannel,int channel,int ntype,char* pBuf, unsigned long dwBufLen, long dwUser);
 struct NET_SDK_FDLibBaseCfg
 {
	 int id;			//表示list中子项个数,从"1"开始赋值,依次增加
	 int FDID;		//表示人脸库唯一ID
	 char name[64];			//人脸比对库名称
	 int thresholdValue;		//检测阈值,阈值越大检测准确率越高, 范围[0,100]
	 char customInfo[128];	//人脸库附加信息
 };
 struct NET_SDK_FDLibBaseCfgList
 {
	 int FDNum;
	 NET_SDK_FDLibBaseCfg FDLibBaseCfg[10];
 };
 struct NET_SDK_FDSearchDescription
 {
	 int searchResultPosition;//查询结果在结果列表中的起始位置
	 int maxResults;			//本次查询条数
	 int FDID;		//人脸比对库唯一标示ID", 如果有这个节点表示指定人脸库查询，否则查询所有人脸库
	 char name[64];	 //名
	 int province;	//省份
	 int city;		//城市
	 char sex;		//性别：0-男，1-女，0xff-未知
	 char ageGroup; //年龄段
	 char res;
	 char certificateType;//证件类型：0-身份证，1-警官证，2-军官证，3-护照，4-其他，0xff-未知
	 char certificateNumber[32];//证件号
	 //目标检索搜索（以图搜图）
	 char PID[64];//检索条件图片在设备中唯一标示id,以图搜图的前提是把检测图片导入设备中进行分析识别
 };


 struct NET_SDK_FDMatch
 {
	 int FDID;//人脸比对库唯一标示ID
	 char bornTime[12];// 出生日期
	 char name[64];//名
	 int province;//省份
	 int city;	//城市
	 char sex;	//性别
	 char ageGroup; //年龄段
	 char res;
	 char certificateType;//证件类型：0-身份证，1-警官证，2-军官证，3-护照，4-其他，0xff-未知
	 char certificateNumber[32];//证件号
	 char telephone[16]; //电话
	 char PID[64];//图片数据对应的ID值
 };

 struct NET_SDK_FDSearchResult
 {
	 int responseStatus;//响应状态
	 int numOfMatches;//本次查询的匹配结果个数
	 int totalMatches;//总的匹配个数
	 NET_SDK_FDMatch FDMatch[64];
 };

 enum Net_ageGroup{
	 teenage,
	 youth,
	 middleage,
	 oldage,
	 age_unknown
 };

 enum Net_genderType
 {
	 male,
	 female,
	 gender_unknown
 };

struct NET_SDK_FaceAttribute
 {
	 int  age;					//Net_ageGroup
	 int genderType;			//Net_genderType
	 unsigned char	bWithGlasses;
	 unsigned char	bWithHat;
	 unsigned char	reser1[2];
	 int		reser2[8];

 };
struct NET_SDK_FDCameraInfo
{
	char cameraIP[16];
	int  cameraPort;
	int  channel;
};
//时间结构
typedef struct NET_SDK_DateTime								
{
	unsigned int second		:6;				//	秒	0-59		
	unsigned int minute		:6;				//	分	0-59		
	unsigned int hour		:5;				//	时	0-23		
	unsigned int day		:5;				//	日	1-31		
	unsigned int month		:4;				//	月	1-12		
	unsigned int year		:6;				//	年	2000-2063	
};

struct NET_SDK_FDMatchAlarm
{
	int 	channel;
	float	similarity; //相似度
	int		age;	 	//年龄
	char	sex;		//性别
	char	ageGroup; 	//年龄段
	char	bWithGlasses;
	char	bWithHat;	
	NET_SDK_DateTime datetime;	//时间
	NET_SDK_FDMatch matchInfo;	//人脸库中的相似人脸信息
	NET_SDK_FDCameraInfo cameraInfo; //前端信息
};
 //人脸信息
//人脸信息
typedef struct NET_SDK_FaceMsgHead
{
	int fullLen;				//全图长度
	int fullPos;				//全图所在起始位置： 回调buf 的 偏移
	int faceLen;				//人脸长度
	int facePos;				//人脸位置
	int similaLen;				//相似图片的长度（即 图库中的图片）
	int similaPos;				//相似图片的位置偏移（）
	int attrLen;				//属性长度
	int attrPos;				//属性起始位置
	int reserved[2];
};




 typedef struct NET_SDK_Face_IntRange
 {
	 int Min;
	 int Max;
 };

 typedef struct NET_SDK_Face_StringRange
 {
	 char Min[8];
	 char Max[8];
 };

 typedef struct NET_SDK_Face_AngleConfig
 {
	 NET_SDK_Face_IntRange YawRange;    ///< 转动角度
	 NET_SDK_Face_IntRange TiltRange;   ///< 倾斜角度
	 NET_SDK_Face_IntRange PitchRange;  ///< 俯仰角度
 };

 typedef struct NET_SDK_Face_MinSizeConfig
 {
	 NET_SDK_Face_IntRange SizeRange;
	 int MinSize;  ///< 人脸最小尺寸
 };

 ///< 人脸外扩系数,float类型
 typedef struct NET_SDK_Face_ExpansionConfig
 {
	 NET_SDK_Face_StringRange Range;
	 char Expansion[8];
 };

 typedef struct NET_SDK_Face_OptimizeConfig
 {
	 NET_SDK_Face_IntRange Range;
	 int  OptimizeFrame; ///< 优选帧数
 };

 typedef struct NET_SDK_Face_CaptureConfig
 {
	 char FaceEnable; ///< 人脸抓拍使能
	 char PanoramaEn;  ///< 全景图抓拍使能
	 char FaceRgnEn;  ///< 人脸画框使能
	 char HdShdRgnEn;///< 头肩(HeadShoulder)画框使能
	 char HumanRgnEn;///< 人形画框使能
	 char CapType; ///< 抓拍类型: [0-Face人脸; 1-HeadShoulder头肩; 2-Humanoid人形]
	 char Reserve[30];

	 //	int  ROI[32]; ///< 区域设置 //!todo:用掩码方式还是矩形坐标方式?需要看算法是否支持.
	 NET_SDK_Face_AngleConfig FaceAngle;    ///< 人脸角度
	 NET_SDK_Face_MinSizeConfig  MinSize;   ///< 人脸最小尺寸
	 NET_SDK_Face_ExpansionConfig Expansion;///< 人脸外扩系数
	 NET_SDK_Face_OptimizeConfig Optimize; ///< 优选帧数
 };
 NET_SDK_API long CALL_METHOD NET_SDK_FaceDetectMsg(long lLoginID, fFaceDetectCallback cbfaceDetect, long dwUser=0);
 NET_SDK_API bool CALL_METHOD NET_SDK_StopFaceMsg(long lFaceHandle);
 NET_SDK_API long CALL_METHOD NET_SDK_GetFDLibBaseCfg(long lLoginID,NET_SDK_FDLibBaseCfgList *FDList);
 NET_SDK_API long CALL_METHOD NET_SDK_FDSearch(long lLoginID,NET_SDK_FDSearchDescription *SearchDescription,NET_SDK_FDSearchResult *SearchResult);
#endif
 typedef struct NET_SDK_DANAIDFile
 {
	 char szID[256];
	 char szFileName[256];
 };
 typedef struct NET_SDK_WeekConfig
 {
	 char IsShow;     ///< 是否显示星期:[0-不显示; 1-显示]
	 char Reserve[3];
 };

///< 服务器断开回调原形
typedef void (CALL_METHOD *fNetDisConnect)(long lLoginID, char *pchDVRIP, long nDVRPort, unsigned long dwUser);

///< 原始数据回调原形
typedef int(CALL_METHOD *fNetRealDataCallBack) (long lRealHandle, long dwDataType, unsigned char *pBuffer,long lbufsize,long dwUser);

///< 原始数据回调原型-带有帧具体信息
typedef int(CALL_METHOD *fNetRealDataCallBack_EX) (long lRealHandle, const NET_SDK_PACKET_INFO_EX *pFrame, long dwUser);

///< 回放录像进度回调原形
typedef void(CALL_METHOD *fNetDownLoadPosCallBack) (long lPlayHandle, long lTotalSize, long lDownLoadSize, long dwUser);

///< 消息（报警）回调原形
typedef bool (CALL_METHOD *fNetMessCallBack)(long lLoginID, char *pBuf, unsigned long dwBufLen, long dwUser);

///< 升级设备程序回调原形
typedef void(CALL_METHOD *fNetUpgradeCallBack) (long lLoginID, long lUpgradechannel, int nTotalSize, int nSendSize, long dwUser);

///< 语音对讲的音频数据回调函数原形
typedef void (CALL_METHOD *fNetAudioDataCallBack)(long lVoiceHandle, char *pDataBuf, long dwBufSize, char byAudioFlag, long dwUser);

///< 预链接状态改变 回调原形
typedef void (CALL_METHOD *fGlinkStatusChanged)(char* glinkID, int nStauts);

typedef void (CALL_METHOD *fDevSearchCallbakc)(NET_SDK_SEARCH_DEVINFO* devinfo,long dwUser);

/*
 * @func:   NET_SDK_Init
 * @brief:  NetSdk库初始化
 * @parm:   fNetDisConnect cbDisConnect	处理断线的回调函数
 * @parm:   unsigned long dwUser	用户自定义数据
 * @return: NET_SDK_API long :  成功返回 1, 失败返回 0
 */
NET_SDK_API long CALL_METHOD NET_SDK_Init(fNetDisConnect cbDisConnect, unsigned long dwUser);


/*
 * @func:   NET_SDK_Cleanup
 * @brief:  NetSdk库反初始化
 * @return: NET_SDK_API bool 
 */
NET_SDK_API bool CALL_METHOD NET_SDK_Cleanup();

/*
 * @func:   NET_SDK_GetLastError
 * @brief:  获取错误信息
 * @return: NET_SDK_API long CALL_METHOD
 */
NET_SDK_API long CALL_METHOD NET_SDK_GetLastError();

/*
 * @func:   NET_SDK_SetConnectTime
 * @brief:  设置连接设备超时时间和尝试次数
 * @parm:   long nWaitTime 单位ms 默认5000ms
 * @parm:   long nTryTimes 次数   默认3次
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SetConnectTime(long nWaitTime, long nTryTimes);

/*
 * @func:   NET_SDK_Login
 * @brief:  登录设备
 * @parm:   char * sDVRIP			设备IP
 * @parm:   unsigned short wDVRPort 设备TCP断开
 * @parm:   char * sUserName		登录用户名
 * @parm:   char * sPassword		登录密码
 * @parm:   LPNET_SDK_DEVICEINFO lpDeviceInfo	登录成功返回的设备信息
 * @parm:   int nType				登录类型 0==web 1 ==升级工具 2 == 搜索工具
 * @parm:   int * error				错误码
 * @return: NET_SDK_API long        成功返回>0 失败返回<=0
 */
NET_SDK_API long CALL_METHOD NET_SDK_Login(char *sDVRIP, unsigned short wDVRPort, char *sUserName, char *sPassword,
							   LPNET_SDK_DEVICEINFO lpDeviceInfo, int nType, int *error,int nWaitTime=0,int nTryTimes=0);

/*
 * @func:   NET_SDK_Logout
 * @brief:  退出登录
 * @parm:   long lLoginID  NET_SDK_Login的有效返回值
 * @return: NET_SDK_API long 
 */
NET_SDK_API long CALL_METHOD NET_SDK_Logout(long lLoginID);

/*
 * @func:   NET_SDK_SetDVRMessCallBack
 * @brief:  设置接收DVR信息回调, 例如报警信息,以ID号区分不同的消息
 * @parm:   fNetMessCallBack cbAlarmcallback
 * @parm:   unsigned long lUser
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SetDVRMessCallBack(fNetMessCallBack cbAlarmcallback, unsigned long lUser);

/*
 * @func:   NET_SDK_SetupAlarmChan
 * @brief:  建立报警上传通道
 * @parm:   long lLoginID
 * @return: NET_SDK_API long CALL_METHOD
 */
NET_SDK_API long CALL_METHOD NET_SDK_SetupAlarmChan(long lLoginID);

/*
 * @func:   NET_SDK_CloseAlarmChan
 * @brief:  关闭报警上传通道
 * @parm:   long lLoginID
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_CloseAlarmChan(long lLoginID);


/*
 * @func:   NET_SDK_GetDevConfig
 * @brief:  获取远程设备相关配置
 * @parm:   long lLoginID					NET_SDK_Login的有效返回值
 * @parm:   unsigned long dwCommand			配置类型, 见NET_SDK_CONFIG_TYPE
 * @parm:   int nChannelNO					需要获取配置的通道号, -1表示全部通道
 * @parm:   char* lpOutBuffer				缓冲区	 
 * @parm:   unsigned long dwOutBufferSize	缓冲区大小
 * @parm:   unsigned long* lpBytesReturned	返回的数据大小
 * @parm:   int waittime					等待超时时间				
 * @return: NET_SDK_API long
 */
NET_SDK_API long  CALL_METHOD NET_SDK_GetDevConfig(long lLoginID, unsigned long dwCommand, int nChannelNO, char * lpOutBuffer, unsigned long dwOutBufferSize, unsigned long* lpBytesReturned, int waittime = 1000);


/*
 * @func:   NET_SDK_GetDevConfigV2          V2，可兼容NET_SDK_GetDevConfig， 但为了其他应用不至于改动太大，前面的接口不废弃
 * @brief:  获取远程设备相关配置
 * @parm:   long lLoginID					NET_SDK_Login的有效返回值
 * @parm:   unsigned long dwCommand			配置类型, 见NET_SDK_CONFIG_TYPE
 * @parm:   int nChannelNO					需要获取配置的通道号, -1表示全部通道
 * @parm:   char *lpInBuffer,               传入参数，用于传给设备
 * @parm:   unsigned long dwInBufferSize    输入参数大
 * @parm:   char* lpOutBuffer				缓冲区	 
 * @parm:   unsigned long dwOutBufferSize	缓冲区大小
 * @parm:   unsigned long* lpBytesReturned	返回的数据大小
 * @parm:   int waittime					等待超时时间				
 * @return: NET_SDK_API long
 */

NET_SDK_API long CALL_METHOD NET_SDK_GetDevConfigV2(long lLoginID, unsigned long dwCommand, int nChannelNO,char *lpInBuffer, unsigned long dwInBufferSize, char * lpOutBuffer, unsigned long dwOutBufferSize, unsigned long* lpBytesReturned, int waittime = 1000);
/*
 * @func:   NET_SDK_SetDevConfig
 * @brief:  设置远程设备相关配置
 * @parm:   long lLoginID					NET_SDK_Login的有效返回值
 * @parm:   unsigned long dwCommand			配置类型, 见NET_SDK_CONFIG_TYPE
 * @parm:   int nChannelNO					需要设置的通道号, -1表示全部通道
 * @parm:   char * lpInBuffer				设置的数据缓冲区指针
 * @parm:   unsigned long dwInBufferSize    设置的数据的大小
 * @parm:   int waittime				    等待超时时间
 * @return: NET_SDK_API long
 */
NET_SDK_API long  CALL_METHOD NET_SDK_SetDevConfig(long lLoginID, unsigned long dwCommand, int nChannelNO, char * lpInBuffer, unsigned long dwInBufferSize, int waittime = 1000);

/*
 * @func:   NET_SDK_SetConfigOverNet
 * @brief:  跨网段设置设备配置，目前只支持对网络配置进行设置
 * @parm:   unsigned long dwCommand
 * @parm:   int nChannelNO
 * @parm:   char * lpInBuffer
 * @parm:   unsigned long dwInBufferSize
 * @parm:   int waittime
 * @return: NET_SDK_API long
 */
NET_SDK_API long CALL_METHOD NET_SDK_SetConfigOverNet(unsigned long dwCommand, int nChannelNO, char * lpInBuffer, unsigned long dwInBufferSize, int waittime = 1000);

/*
 * @func:   NET_SDK_FindDVRLog
 * @brief:  查询日志
 * @parm:   long lLoginID							NET_SDK_Login的有效返回值
 * @parm:   NET_SDK_LogSearchCondition* pFindParam	指定查询条件
 * @parm:   NET_SDK_LogList* pRetBuffer				返回的日志列表
 * @parm:   long lBufSize							返回的数据大小
 * @parm:   int waittime							等待超时时间
 * @return: NET_SDK_API bool
 */
NET_SDK_API bool CALL_METHOD NET_SDK_FindDVRLog(long lLoginID, NET_SDK_LogSearchCondition *pFindParam, NET_SDK_LogList *pRetBuffer, long lBufSize, int waittime = 2000);

/*
 * @func:   NET_SDK_RealPlay
 * @brief:  打开实时预览
 * @parm:   long lLoginID                           NET_SDK_Login的有效返回值
 * @parm:   LPNET_SDK_CLIENTINFO lpClientInfo       预览方式
 * @return: NET_SDK_API long						返回预览句柄
 */
NET_SDK_API long CALL_METHOD NET_SDK_RealPlay(long lLoginID, LPNET_SDK_CLIENTINFO lpClientInfo,int nWaittimes=0);

/*
 * @func:   NET_SDK_StopRealPlay
 * @brief:  停止实时预览
 * @parm:   long lRealHandle						NET_SDK_RealPlay的有效返回值
 * @return: NET_SDK_API bool
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StopRealPlay(long lRealHandle);


/*
 * @func:   NET_SDK_PauseRealPlay
 * @brief:  暂停实时预览
 * @parm:   long lRealHandle						NET_SDK_RealPlay的有效返回值
 * @parm:   bool bPause								true 暂停 false 继续预览
 * @return: NET_SDK_API long
 */
NET_SDK_API long CALL_METHOD NET_SDK_PauseRealPlay(long lRealHandle, bool bPause);

/*
 * @func:   NET_SDK_SetRealDataCallBack
 * @brief:  设置实时预览的回调函数
 * @parm:   long lRealHandle					   NET_SDK_RealPlay的有效返回值
 * @parm:   fNetRealDataCallBack cbRealData		   预览回调, 用户自己在此函数中处理客户端收到的实时视频数据,如显示、保存等
 * @parm:   long dwUser							   用户自定义数据
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SetRealDataCallBack(long lRealHandle,fNetRealDataCallBack cbRealData, long dwUser);

/*
 * @func:   NET_SDK_DelRealDataCallBack
 * @brief:  清除实时预览的回调函数接口 该接口需要在NET_SDK_StopRealPlay前调用
 * @parm:   long lRealHandle						NET_SDK_RealPlay的有效返回值
 * @parm:   fNetRealDataCallBack cbRealData			预览回调
 * @parm:   long dwUser								用户自定义数据			
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_DelRealDataCallBack(long lRealHandle,fNetRealDataCallBack cbRealData, long dwUser);

/*
 * @func:    NET_SDK_SetRealDataCallBack_EX
 * @brief:   设置实时预览的回调函数 EX版本
 * @param:   long lRealHandle						NET_SDK_RealPlay的有效返回值
 * @param:   fNetRealDataCallBack_EX cbRealDataEX   预览回调, 用户自己在此函数中处理客户端收到的实时视频数据,如显示、保存等
 * @param:   long dwUser							用户自定义数据
 * @return:  NET_SDK_API bool CALL_METHOD
 * @note:    None
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SetRealDataCallBack_EX(long lRealHandle,fNetRealDataCallBack_EX cbRealDataEX, long dwUser);

/*
 * @func:    NET_SDK_DelRealDataCallBack_EX
 * @brief:   清除实时预览的回调函数接口(EX版本) 该接口需要在NET_SDK_StopRealPlay前调用
 * @param:   long lRealHandle						NET_SDK_RealPlay的有效返回值
 * @param:   fNetRealDataCallBack_EX cbRealDataEX	预览回调
 * @param:   long dwUser							用户自定义数据
 * @return:  NET_SDK_API bool CALL_METHOD
 * @note:    None
 */
NET_SDK_API bool CALL_METHOD NET_SDK_DelRealDataCallBack_EX(long lRealHandle,fNetRealDataCallBack_EX cbRealDataEX, long dwUser);

/*
 * @func:   NET_SDK_FindFileByName
 * @brief:  根据文件名查询录像
 * @parm:   long lLoginID                           NET_SDK_Login的有效返回值				
 * @parm:   NET_SDK_FINDINFO* lpFindInfo            查询录像的条件
 * @parm:   NET_SDK_FILE_DATA* lpFileData           查询结果
 * @parm:   int lMaxCount                           一次查询指定允许的最大查询数目
 * @parm:   int* findcount							返回的查询结果数目
 * @parm:   int waittime							等待超时时间
 * @return: NET_SDK_API long
 */
NET_SDK_API long CALL_METHOD NET_SDK_FindFileByName(long lLoginID, NET_SDK_FINDINFO* lpFindInfo, NET_SDK_FILE_DATA* lpFileData, int lMaxCount, int* findcount, int waittime = 5000);

/*
 * @func:   NET_SDK_FindFileByTime
 * @brief:  根据时间查询录像
 * @parm:   long lLoginID							NET_SDK_Login的有效返回值				
 * @parm:   NET_SDK_SearchByTime* lpFindInfo		查询录像的条件
 * @parm:   NET_SDK_SearchByTimeResult* lpFileData  结果列表
 * @parm:   int waittime							等待超时时间
 * @return: NET_SDK_API long
 */
NET_SDK_API long CALL_METHOD NET_SDK_FindFileByTime(long lLoginID, NET_SDK_SearchByTime* lpFindInfo, NET_SDK_SearchByTimeResult *lpFileData, int waittime = 10000);

/*
 * @func:   NET_SDK_PlayBackByName
 * @brief:  根据文件名进行回放
 * @parm:   long lLoginID									 登录句柄
 * @parm:   NET_SDK_FILE_DATA* sPlayBackFile				 回放文件的信息
 * @parm:   fNetDownLoadPosCallBack cbDownLoadPos			 进度回调
 * @parm:   fNetRealDataCallBack fDownLoadDataCallBack       回放回调
 * @parm:   long dwDataUser									 用户自定义数据, 2个回调共用1个自定义数据
 * @return: NET_SDK_API long 回放句柄
 */
NET_SDK_API long CALL_METHOD NET_SDK_PlayBackByName(long lLoginID, NET_SDK_FILE_DATA* sPlayBackFile, fNetDownLoadPosCallBack cbDownLoadPos, fNetRealDataCallBack fDownLoadDataCallBack, long dwDataUser);


NET_SDK_API long CALL_METHOD NET_SDK_PlayBackByName_Ex(long lLoginID, NET_SDK_FILE_DATA* sPlayBackFile, fNetDownLoadPosCallBack cbDownLoadPos, fNetRealDataCallBack_EX fDownLoadDataCallBack, long dwDataUser);

/*
 * @func:   NET_SDK_PlayBackByTime
 * @brief:  按时间进行录像回放
 * @parm:   long lLoginID
 * @parm:   NET_SDK_FINDINFO* lpFindInfo
 * @parm:   fNetRealDataCallBack fDownLoadDataCallBack
 * @parm:   long dwDataUser
 * @parm:   fNetDownLoadPosCallBack cbDownLoadPos
 * @parm:   long dwPosUser
 * @return: NET_SDK_API long 回放句柄
 */
NET_SDK_API long CALL_METHOD NET_SDK_PlayBackByTime(long lLoginID, NET_SDK_FINDINFO* lpFindInfo,fNetRealDataCallBack fDownLoadDataCallBack, long dwDataUser,
											fNetDownLoadPosCallBack cbDownLoadPos, long dwPosUser);

NET_SDK_API long CALL_METHOD NET_SDK_PlayBackByTime_Ex(long lLoginID, NET_SDK_FINDINFO* lpFindInfo, fNetRealDataCallBack_EX fDownLoadDataCallBack, long dwDataUser,
													   fNetDownLoadPosCallBack cbDownLoadPos, long dwPosUser);

/*
 * @func:   NET_SDK_StopPlayBack
 * @brief:  停止回放
 * @parm:   long lPlayHandle
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StopPlayBack(long lPlayHandle);

/*
 * @func:   NET_SDK_PlayBackControl
 * @brief:  回放控制分,暂停,定位等等
 * @parm:   long lPlayHandle
 * @parm:   long lControlCode
 * @parm:   long lCtrlValue
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_PlayBackControl(long lPlayHandle, long lControlCode,long lCtrlValue);

/*
 * @func:   NET_SDK_GetFileByName
 * @brief:  录像下载,用户可以不使用回调，自己通过NET_SDK_GetDownloadPos获取进度
 * @parm:   long lLoginID
 * @parm:   NET_SDK_FILE_DATA * sPlayBackFile
 * @parm:   char * sSavedFileName
 * @parm:   fNetDownLoadPosCallBack cbDownLoadPos
 * @parm:   long dwDataUser
 * @return: NET_SDK_API long CALL_METHOD
 */
NET_SDK_API long CALL_METHOD NET_SDK_GetFileByName(long lLoginID,NET_SDK_FILE_DATA *sPlayBackFile,char *sSavedFileName, 
											fNetDownLoadPosCallBack cbDownLoadPos = NULL, long dwDataUser = 0 );



NET_SDK_API long CALL_METHOD NET_SDK_GetFileByNameV2(long lLoginID,NET_SDK_FILE_DATA *sPlayBackFile,fNetDownLoadPosCallBack cbDownLoadPos = NULL, fNetRealDataCallBack fDownLoadDataCallBack=NULL,long dwDataUser = 0 );

/*
 * @func:   NET_SDK_GetFileByTime
 * @brief:  录像下载,用户可以不使用回调，自己通过NET_SDK_GetDownloadPos获取进度
 * @parm:   long lLoginID
 * @parm:   NET_SDK_FINDINFO * lpFindInfo
 * @parm:   char * sSavedFileDIR
 * @parm:   bool bMerge
 * @parm:   fNetDownLoadPosCallBack cbDownLoadPos
 * @parm:   long dwDataUser
 * @return: NET_SDK_API long CALL_METHOD
 */
NET_SDK_API long CALL_METHOD NET_SDK_GetFileByTime(long lLoginID, NET_SDK_FINDINFO* lpFindInfo, char *sSavedFileDIR, bool bMerge = false,
											fNetDownLoadPosCallBack cbDownLoadPos = NULL, long dwDataUser = 0 );

NET_SDK_API long CALL_METHOD NET_SDK_GetFileByTime_V2(long lLoginID, NET_SDK_FINDINFO* lpFindInfo, char *sSavedFileDIR, bool bMerge = false,
												   fNetDownLoadPosCallBack cbDownLoadPos = NULL, long dwDataUser = 0,int nFileType=0);//0默认为裸码流1：AVI


NET_SDK_API long CALL_METHOD NET_SDK_GetFileByTime_V3(long lLoginID, NET_SDK_FINDINFO* lpFindInfo, fNetDownLoadPosCallBack cbDownLoadPos, fNetRealDataCallBack fDownLoadDataCallBack, long dwDataUser);

NET_SDK_API long CALL_METHOD NET_SDK_GetFileByTime_V4(long lLoginID, NET_SDK_FINDINFO* lpFindInfo, char *sSavedFileDIR, bool bMerge = false,
													  fNetDownLoadPosCallBack cbDownLoadPos = NULL, long dwDataUser = 0,int nFileType=0);//0默认为裸码流1：AVI

/*
 * @func:   NET_SDK_StopGetFile
 * @brief:  停止下载录像文件
 * @parm:   long lFileHandle
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StopGetFile(long lFileHandle);

/*
 * @func:   NET_SDK_GetDownloadPos
 * @brief:  获取下载进度
 * @parm:   long lFileHandle
 * @return: NET_SDK_API int CALL_METHOD
 */
NET_SDK_API int CALL_METHOD NET_SDK_GetDownloadPos(long lFileHandle);

/*
 * @func:   NET_SDK_Upgrade
 * @brief:  开始升级
 * @parm:   long lLoginID
 * @parm:   char * sFileName
 * @parm:   int nType
 * @parm:   fNetUpgradeCallBack cbUpgrade
 * @parm:   long dwUser
 * @return: NET_SDK_API long CALL_METHOD
 */
NET_SDK_API long CALL_METHOD NET_SDK_Upgrade(long lLoginID, char *sFileName, int nType = 0, fNetUpgradeCallBack cbUpgrade = NULL, long dwUser = 0);


/*
 * @func:   NET_SDK_GetUpgradeState
 * @brief:  获取升级状态 1 成功， 2 正在升级 3 失败
 * @parm:   long lUpgradeHandle
 * @return: NET_SDK_API int CALL_METHOD
 */
NET_SDK_API int CALL_METHOD NET_SDK_GetUpgradeState(long lUpgradeHandle);

/*
 * @func:   NET_SDK_StartUpgradeFromServer
 * @brief:  开始升级
 * @parm:   long lLoginID
 * @parm:   NET_SDK_ServerUpgradeInfo* upinfo  升级的文件信息
 * @parm:   fNetUpgradeCallBack cbUpgrade
 * @parm:   long dwUser
 * @return: NET_SDK_API long CALL_METHOD  升级句柄
 */

NET_SDK_API long CALL_METHOD NET_SDK_StartUpgradeFromServer(long lLoginID, NET_SDK_ServerUpgradeInfo* upgradeinfo, fNetUpgradeCallBack cbUpgrade /*= NULL*/, long dwUser /*= 0*/);

/*
 * @func:   NET_SDK_CheckUpgradeFromServer
 * @brief:  从服务器上检测是否有新的升级包
 * @parm:   long lLoginID
 * @parm:   NET_SDK_ServerUpgradeInfo  返回的升级信息
 * @parm:   long nWaitTime  等待时间
 * @return: NET_SDK_API int CALL_METHOD   0：成功
 */
NET_SDK_API int CALL_METHOD NET_SDK_CheckUpgradeFromServer(long lLoginID, NET_SDK_ServerUpgradeInfo* NET_SDK_CheckUpgradeFromServer, int nWaitTime);


/*
 * @func:   NET_SDK_CloseUpgradeHandle
 * @brief:  关闭升级
 * @parm:   long lUpgradeHandle
 * @return: NET_SDK_API long CALL_METHOD
 */
NET_SDK_API long CALL_METHOD NET_SDK_CloseUpgradeHandle(long lUpgradeHandle);

/*
 * @func:   NET_SDK_PTZControl
 * @brief:  云台控制，包括预置点设置，巡航路线，快速定位等等, 如果需要指定云台速度, lParm1表示速度
 * @parm:   long lLoginID
 * @parm:   int nChannelNo
 * @parm:   long lPTZCommand
 * @parm:   long lParam1
 * @parm:   long lParam2
 * @parm:   long lParam3
 * @parm:   bool bStop
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_PTZControl(long lLoginID,int nChannelNo, long lPTZCommand, 
									long lParam1, long lParam2, long lParam3, bool bStop = false);

/*
 * @func:   NET_SDK_ControlDVR
 * @brief:  设备控制: 返回值 
 * @parm:   long lLoginID
 * @parm:   int type
 * @parm:   int waittime
 * @return: NET_SDK_API bool true 成功, false 失败
 */
NET_SDK_API bool CALL_METHOD NET_SDK_ControlDVR(long lLoginID, int type, int waittime = 2000);

/*
 * @func:   NET_SDK_SearchDevice
 * @brief:  搜索局域网内的设备
 * @parm:   char * szBuf
 * @parm:   int nBufLen
 * @parm:   int * pRetLen
 * @parm:   int nSearchTime
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SearchDevice(char* szBuf, int nBufLen, int* pRetLen, int nSearchTime);

/*
 * @func:   NET_SDK_StartVoiceCom_MR
 * @brief:  开启语音对讲
 * @parm:   long lLoginID				登录ID
 * @parm:   fNetAudioDataCallBack pVcb  接收对讲语音数据回调
 * @parm:   long dwDataUser				用户自定义数据
 * @return: NET_SDK_API long
 */
NET_SDK_API long CALL_METHOD NET_SDK_StartVoiceCom_MR(long lLoginID, fNetAudioDataCallBack pVcb, long dwDataUser);

/*
 * @func:   NET_SDK_VoiceComSendData
 * @brief:  客户端往设备发送对讲数据
 * @parm:   long lVoiceHandle
 * @parm:   char * pSendBuf
 * @parm:   long lBufSize
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_VoiceComSendData(long lVoiceHandle, char *pSendBuf, long lBufSize);

/*
 * @func:   NET_SDK_StopVoiceCom
 * @brief:  停止语音对讲
 * @parm:   long lVoiceHandle
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StopVoiceCom(long lVoiceHandle);

/*
 * @func:   NET_SDK_SetTalkMode
 * @brief:  设置对讲音频编码方式, 用户可以不设置, 默认为G711A编码
 * @parm:   long lLoginID
 * @parm:   NET_SDK_AudioInFormatConfig* pTalkMode
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SetTalkMode(long lLoginID, NET_SDK_AudioInFormatConfig* pTalkMode);

/*
 * @func:   NET_SDK_StartDVRRecord
 * @brief:  远程开启设备录像
 * @parm:   long lLoginID
 * @parm:   int nChannelNo
 * @parm:   long lRecordType  录像模式, 见NET_SDK_RecordModeTypes
 * @return: NET_SDK_API bool
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StartDVRRecord(long lLoginID, int nChannelNo ,long lRecordType);

/*
 * @func:   NET_SDK_StopDVRRecord
 * @brief:  远程停止设备录像
 * @parm:   long lLoginID
 * @parm:   int nChannelNo
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StopDVRRecord(long lLoginID, int nChannelNo);

/*
 * @func:   NET_SDK_SetSystemDateTime
 * @brief:  远程设置设备系统时间
 * @parm:   long lLoginID
 * @parm:   NET_SDK_SYSTEM_TIME * pSysTime
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SetSystemDateTime(long lLoginID, NET_SDK_SYSTEM_TIME *pSysTime);

/*
 * @func:   NET_SDK_GetDVRWorkState
 * @brief:  获取设备状态
 * @parm:   long lLoginID
 * @parm:   NET_SDK_DVR_WORKSTATE * pWorkState
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_GetDVRWorkState(long lLoginID, NET_SDK_DVR_WORKSTATE *pWorkState);

/*
 * @func:   NET_SDK_ClickKey
 * @brief: 
 * @parm:   long lLoginID
 * @parm:   NET_SDK_KeyBoardData * pKeyBoardData
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_ClickKey(long lLoginID, NET_SDK_KeyBoardData *pKeyBoardData);


/*
 * @func:   NET_SDK_ClickMouse
 * @brief: 
 * @parm:   long lLoginID
 * @parm:   NET_SDK_MouseData * pMouseData
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_ClickMouse(long lLoginID, NET_SDK_MouseData *pMouseData);

/*
 * @func:   NET_SDK_StorageManage
 * @brief:  设备磁盘管理
 * @parm:   long lLoginID
 * @parm:   NET_SDK_StorageDeviceControl * pStorageCtl
 * @return: NET_SDK_API int CALL_METHOD
 */
NET_SDK_API int CALL_METHOD NET_SDK_StorageManage(long lLoginID, NET_SDK_StorageDeviceControl *pStorageCtl);

/*
 * @func:   NET_SDK_SendNetAlarmMsg
 * @brief:  
 * @parm:   long lLoginID
 * @parm:   NET_SDK_AlarmNet * pAlarmInfo
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SendNetAlarmMsg(long lLoginID, NET_SDK_AlarmNet *pAlarmInfo);

/*
 * @func:   NET_SDK_CatchPic
 * @brief:  抓图, 保存到文件
 * @parm:   long lLoginID
 * @parm:   int nChannel
 * @parm:   char * sFileName
 * @return: NET_SDK_API bool CALL_METHOD
 * @note:   文件是jpg格式, nChannel取值从-2开始, -2 对设备的活动窗口截屏, 图像为bmp
 *			-1 对整个设备全局截屏, 图像为bmp
 *			>= 0  通道号, 对通道视频截图, 图像为jpg格式
 */
NET_SDK_API bool CALL_METHOD NET_SDK_CatchPic(long lLoginID, int nChannel, char *sFileName);

/*
 * @func:   NET_SDK_CatchPicInBuffer
 * @brief:  抓图, 数据保存到buffer
 * @parm:   long lLoginID
 * @parm:   int nChannel
 * @parm:   char * pBuffer
 * @parm:   int nBufLen
 * @parm:   int * pPicLen
 * @return: NET_SDK_API bool CALL_METHOD
 * @note:   nChannel取值从-2开始, -2 对设备的活动窗口截屏, buffer里面的内容为bmp图像
 *			-1 对整个设备全局截屏, buffer里面的内容为bmp图像
 *			>= 0  通道号, 对通道视频截图, buffer里面的内容为jpg图像
 */
NET_SDK_API bool CALL_METHOD NET_SDK_CatchPicInBuffer(long lLoginID, int nChannel, char *pBuffer, int nBufLen, int *pPicLen);


/*
 * @func:    NET_SDK_StartAlarmCenterListen
 * @brief:  
 * @param:   int nPort
 * @param:   fNetMessCallBack cbAlarmCenter
 * @param:   unsigned long dwDataUser
 * @return:  NET_SDK_API bool CALL_METHOD
 * @note:    None
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StartAlarmCenterListen(int nPort, fNetMessCallBack cbAlarmCenter, unsigned long dwDataUser);

/*
 * @func:    NET_SDK_StopAlarmCenterListen
 * @brief:  
 * @return:  NET_SDK_API bool CALL_METHOD
 * @note:    None
 */
NET_SDK_API bool CALL_METHOD NET_SDK_StopAlarmCenterListen();

/*
 * @func:   NET_SDK_SerialWrite
 * @brief:  写透明串口232,485
 * @parm:   long lLoginID
 * @parm:   NET_SDK_SERIAL_TYPE nType
 * @parm:   char * pBuffer
 * @parm:   int nBufLen
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SerialWrite(long lLoginID, NET_SDK_SERIAL_TYPE nType, char *pBuffer, int nBufLen);

/*
 * @func:   NET_SDK_SerialRead
 * @brief:  读透明串口232,485
 * @parm:   long lLoginID
 * @parm:   NET_SDK_SERIAL_TYPE nType
 * @parm:   char * pBuffer
 * @parm:   int nBufLen
 * @parm:   int * pReadLen
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SerialRead(long lLoginID, NET_SDK_SERIAL_TYPE nType, char *pBuffer, int nBufLen, int *pReadLen);

/*
 * @func:   NET_SDK_GetDDNSInfo
 * @brief:  获取DDNS服务信息
 * @parm:   NET_SearchMode & searchmode
 * @parm:   NET_DDNS_INFO * pDevicInfo
 * @parm:   int maxDeviceNum
 * @parm:   int & nretNum
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_GetDDNSInfo(NET_SearchMode &searchmode, NET_DDNS_INFO *pDevicInfo, int maxDeviceNum, int &nretNum);

/*
 * @func:   NET_SDK_MakeKeyFrame
 * @brief:  强制I帧
 * @parm:   long lLoginID
 * @parm:   int nChannel	通道号
 * @parm:   int nStream		0表示主码流，为1表示子码流
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_MakeKeyFrame(long lLoginID, int nChannel, int nStream);

/*
 * @func:   NET_SDK_GetOEMInfo
 * @brief: 
 * @parm:   long lLoginID
 * @parm:   NET_SDK_OEMInfo * pOEMInfo
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_GetOEMInfo(long lLoginID, NET_SDK_OEMInfo *pOEMInfo);


/*
 *  @func:    	 NET_SDK_SearchDeviceByRemote
 *  @brief:   	 通过远程设备搜索其他设备
 *  @param[in]:  long lLoginID			登录ID
 *  @param[in]:  SearchProtocl protocol 以何种协议搜索设备
 *  @param[out]:  NET_SDK_SearchByRemote_DeviceAll * resultlist 搜索结果
 *  @param[int]: int waittime 等待超时时间,单位毫秒,默认15000毫秒
 *  @return:  	 NET_SDK_API bool CALL_METHOD 函数调用成功返回true, 失败返回false
 *  @note:    	 此接口是阻塞式的 
 */
NET_SDK_API bool CALL_METHOD NET_SDK_SearchDeviceByRemote(long lLoginID, SearchProtocl protocol, NET_SDK_SearchByRemote_DeviceAll* resultlist, int waittime = 15000);

//-------------the follow is add for glink cloud function ---begin

/*
 *  @func:    	 NET_SDK_InitGlinkClient
 *  @brief:   	 初始化Glink
 *  @param clientName		客户端名称
 *  @param firstStartTime	客户端首次启用时间
 *  @param clientUDID		客户端的UDID，ios可以随便指定值
 *  @param version			客户端版本号
 *  @param type				客户端类型
 *  @return					成功返回0，失败返回负数
 *  @note:    				此接口是阻塞式的 
 */

NET_SDK_API int CALL_METHOD NET_SDK_InitGlink(const char* clientName,  const char* firstStartTime, const char* clientUDID, int version, int type);

/*
 * @func:   NET_SDK_GlinkStatusChangeCallback
 * @brief:  设置接收glinkID 
 * @parm:   fGlinkStatusChanged cbglinkStatusChanged
 * @parm:   unsigned long lUser
 * @return: NET_SDK_API bool CALL_METHOD
 */
NET_SDK_API bool CALL_METHOD NET_SDK_GlinkStatusChangeCallback(fGlinkStatusChanged cbglinkStatusChanged, unsigned long lUser);


/*
 * @func:   NET_SDK_GetIDPreStatus
 * @brief:  获取预链接状态
 * @parm:   fGlinkStatusChanged cbglinkStatusChanged
 * @parm:   unsigned long lUser
 * @return: int ,0:为初始状态，表明未返回  -5400未返回  -2 设备离线  -1 非法IG 1： 在内网 2在外网 3 同在内外网
 */
NET_SDK_API int CALL_METHOD NET_SDK_GetIDPreStatus(const char* gnkID);
/*
 *  @func:    	 NET_SDK_AddPreLink
 *  @brief:   	 添加预链接  
 *  @param[in]:  const char* gnkID  浪涛云ID
 *  @note:    	 此接口是异步模式的，ID 状态通过 NET_SDK_GlinkStatusChangeCallback所设置的回调函数返回
 */
NET_SDK_API bool CALL_METHOD NET_SDK_AddPreLink(const char* gnkID);

/*
 *  @func:    	 NET_SDK_EnableAudioSend
 *  @brief:   	 发送音频数据
 *  @param[in]:  视频通道句柄，是否开启
 *  @note:    	 设备只在云登录的情况下处理该问题，其他登录方式下，音频默认发送
 */
NET_SDK_API bool CALL_METHOD NET_SDK_EnableAudioSend(long lRealHandle, bool bEnable);

NET_SDK_API bool CALL_METHOD NET_SDK_DebugTest(long lLoginID, unsigned long dwCommand, int nChannelNO,char* lpinbuffer,unsigned long insize, char * lpOutBuffer, unsigned long dwOutBufferSize, unsigned long* lpBytesReturned, int waittime = 1000);

NET_SDK_API bool CALL_METHOD NET_SDK_StartSearch( fDevSearchCallbakc serchcb, long dwuser);

NET_SDK_API bool CALL_METHOD NET_SDK_StopSearch();

NET_SDK_API long CALL_METHOD NET_SDK_UpGradeMusicFile(long lLoginID, NET_SDK_ZHDLFileInfo_T info,  fNetUpgradeCallBack cbUpgrade = NULL, long dwUser = 0);

NET_SDK_API long CALL_METHOD NET_SDK_CloseMusicUpgradeHandle(long lUpgradeHandle);

NET_SDK_API bool CALL_METHOD NET_SDK_GetMusicConfig(long lLoginID, char * lpOutBuffer,unsigned long dwOutBufferSize,unsigned long* lpBytesReturned,int waittime/*=500*/);

NET_SDK_API bool CALL_METHOD NET_SDK_SetMusicConfig(long lLoginID, unsigned long dwCommand, char * lpInBuffer,unsigned long dwInBufferSize,int waittime/*=500*/);

NET_SDK_API void CALL_METHOD NET_SDK_MD5Encrypt(signed char *strOutput, unsigned char *strInput);
//-------------the follow is add for Tutk cloud function ---begin

/*
*  @func:    	 NET_SDK_InitTUTK
*  @brief:   	 初始化TUTK
*  @return					成功返回true，失败返回false
*  @note:    				此接口是阻塞式的 
*/

NET_SDK_API bool CALL_METHOD NET_SDK_InitTUTK();
//-------------the follow is add for Zskj cloud function ---begin

/*
*  @func:    	 NET_SDK_InitTUTK
*  @brief:   	 初始化TUTK
*  @return					成功返回true，失败返回false
*  @note:    				此接口是阻塞式的 
*/

NET_SDK_API bool CALL_METHOD NET_SDK_InitZSKJ();


#ifdef __cplusplus
}
#endif

#endif


