import ctypes import sys from ctypes import * # 回调函数类型定义 fun_ctype = WINFUNCTYPE # 指针函数类型 if 'linux' in sys.platform: fun_ctype = CFUNCTYPE # 云台控制命令 LIGHT_PWRON = 2 #接通灯光电源 WIPER_PWRON = 3 #接通雨刷开关 FAN_PWRON = 4 #接通风扇开关 HEATER_PWRON = 5 #接通加热器开关 AUX_PWRON1 = 6 #接通辅助设备开关 AUX_PWRON2 = 7 #接通辅助设备开关 ZOOM_IN = 11 #焦距变大(倍率变大) ZOOM_OUT = 12 #焦距变小(倍率变小) FOCUS_NEAR = 13 #焦点前调 FOCUS_FAR = 14 #焦点后调 IRIS_OPEN = 15 #光圈扩大 IRIS_CLOSE = 16 #光圈缩小 TILT_UP = 21 #云台上仰 TILT_DOWN = 22 #云台下俯 PAN_LEFT = 23 #云台左转 PAN_RIGHT = 24 #云台右转 UP_LEFT = 25 #云台上仰和左转 UP_RIGHT = 26 #云台上仰和右转 DOWN_LEFT = 27 #云台下俯和左转 DOWN_RIGHT = 28 #云台下俯和右转 PAN_AUTO = 29 #云台左右自动扫描 TILT_DOWN_ZOOM_IN = 58 #云台下俯和焦距变大(倍率变大) TILT_DOWN_ZOOM_OUT = 59 #云台下俯和焦距变小(倍率变小) PAN_LEFT_ZOOM_IN = 60 #云台左转和焦距变大(倍率变大) PAN_LEFT_ZOOM_OUT = 61 #云台左转和焦距变小(倍率变小) PAN_RIGHT_ZOOM_IN = 62 #云台右转和焦距变大(倍率变大) PAN_RIGHT_ZOOM_OUT = 63 #云台右转和焦距变小(倍率变小) UP_LEFT_ZOOM_IN = 64 #云台上仰和左转和焦距变大(倍率变大) UP_LEFT_ZOOM_OUT = 65 #云台上仰和左转和焦距变小(倍率变小) UP_RIGHT_ZOOM_IN = 66 #云台上仰和右转和焦距变大(倍率变大) UP_RIGHT_ZOOM_OUT = 67 #云台上仰和右转和焦距变小(倍率变小) DOWN_LEFT_ZOOM_IN = 68 #云台下俯和左转和焦距变大(倍率变大) DOWN_LEFT_ZOOM_OUT = 69 #云台下俯和左转和焦距变小(倍率变小) DOWN_RIGHT_ZOOM_IN = 70 #云台下俯和右转和焦距变大(倍率变大) DOWN_RIGHT_ZOOM_OUT = 71 #云台下俯和右转和焦距变小(倍率变小) TILT_UP_ZOOM_IN = 72 #云台上仰和焦距变大(倍率变大) TILT_UP_ZOOM_OUT = 73 #云台上仰和焦距变小(倍率变小) # 码流回调数据类型 NET_DVR_SYSHEAD = 1 NET_DVR_STREAMDATA = 2 NET_DVR_AUDIOSTREAMDATA = 3 NET_DVR_PRIVATE_DATA = 112 # 设备参数结构体 V30 class NET_DVR_DEVICEINFO_V30(ctypes.Structure): _fields_ = [ ("sSerialNumber", c_byte * 48), # 序列号 ("byAlarmInPortNum", c_byte), # 模拟报警输入个数 ("byAlarmOutPortNum", c_byte), # 模拟报警输出个数 ("byDiskNum", c_byte), # 硬盘个数 ("byDVRType", c_byte), # 设备类型 ("byChanNum", c_byte), # 设备模拟通道个数,数字(IP)通道最大个数为byIPChanNum + byHighDChanNum*256 ("byStartChan", c_byte), # 模拟通道的起始通道号,从1开始。数字通道的起始通道号见下面参数byStartDChan ("byAudioChanNum", c_byte), # 设备语音对讲通道数 ("byIPChanNum", c_byte), # 设备最大数字通道个数,低8位,高8位见byHighDChanNum ("byZeroChanNum", c_byte), # 零通道编码个数 ("byMainProto", c_byte), # 主码流传输协议类型:0- private,1- rtsp,2- 同时支持私有协议和rtsp协议取流(默认采用私有协议取流) ("bySubProto", c_byte), # 子码流传输协议类型:0- private,1- rtsp,2- 同时支持私有协议和rtsp协议取流(默认采用私有协议取流) ("bySupport", c_byte), # 能力,位与结果为0表示不支持,1表示支持 # bySupport & 0x1,表示是否支持智能搜索 # bySupport & 0x2,表示是否支持备份 # bySupport & 0x4,表示是否支持压缩参数能力获取 # bySupport & 0x8, 表示是否支持双网卡 # bySupport & 0x10, 表示支持远程SADP # bySupport & 0x20, 表示支持Raid卡功能 # bySupport & 0x40, 表示支持IPSAN目录查找 # bySupport & 0x80, 表示支持rtp over rtsp ("bySupport1", c_byte), # 能力集扩充,位与结果为0表示不支持,1表示支持 # bySupport1 & 0x1, 表示是否支持snmp v30 # bySupport1 & 0x2, 表示是否支持区分回放和下载 # bySupport1 & 0x4, 表示是否支持布防优先级 # bySupport1 & 0x8, 表示智能设备是否支持布防时间段扩展 # bySupport1 & 0x10,表示是否支持多磁盘数(超过33个) # bySupport1 & 0x20,表示是否支持rtsp over http # bySupport1 & 0x80,表示是否支持车牌新报警信息,且还表示是否支持NET_DVR_IPPARACFG_V40配置 ("bySupport2", c_byte), # 能力集扩充,位与结果为0表示不支持,1表示支持 # bySupport2 & 0x1, 表示解码器是否支持通过URL取流解码 # bySupport2 & 0x2, 表示是否支持FTPV40 # bySupport2 & 0x4, 表示是否支持ANR(断网录像) # bySupport2 & 0x20, 表示是否支持单独获取设备状态子项 # bySupport2 & 0x40, 表示是否是码流加密设备 ("wDevType", c_uint16), # 设备型号,详见下文列表 ("bySupport3", c_byte), # 能力集扩展,位与结果:0- 不支持,1- 支持 # bySupport3 & 0x1, 表示是否支持多码流 # bySupport3 & 0x4, 表示是否支持按组配置,具体包含通道图像参数、报警输入参数、IP报警输入/输出接入参数、用户参数、设备工作状态、JPEG抓图、定时和时间抓图、硬盘盘组管理等 # bySupport3 & 0x20, 表示是否支持通过DDNS域名解析取流 ("byMultiStreamProto", c_byte), # 是否支持多码流,按位表示,位与结果:0-不支持,1-支持 # byMultiStreamProto & 0x1, 表示是否支持码流3 # byMultiStreamProto & 0x2, 表示是否支持码流4 # byMultiStreamProto & 0x40,表示是否支持主码流 # byMultiStreamProto & 0x80,表示是否支持子码流 ("byStartDChan", c_byte), # 起始数字通道号,0表示无数字通道,比如DVR或IPC ("byStartDTalkChan", c_byte), # 起始数字对讲通道号,区别于模拟对讲通道号,0表示无数字对讲通道 ("byHighDChanNum", c_byte), # 数字通道个数,高8位 ("bySupport4", c_byte), # 能力集扩展,按位表示,位与结果:0- 不支持,1- 支持 # bySupport4 & 0x01, 表示是否所有码流类型同时支持RTSP和私有协议 # bySupport4 & 0x10, 表示是否支持域名方式挂载网络硬盘 ("byLanguageType", c_byte), # 支持语种能力,按位表示,位与结果:0- 不支持,1- 支持 # byLanguageType ==0,表示老设备,不支持该字段 # byLanguageType & 0x1,表示是否支持中文 # byLanguageType & 0x2,表示是否支持英文 ("byVoiceInChanNum", c_byte), # 音频输入通道数 ("byStartVoiceInChanNo", c_byte), # 音频输入起始通道号,0表示无效 ("bySupport5", c_byte ), # 按位表示,0-不支持,1-支持,bit0-支持多码流 ("bySupport6", c_byte), # 按位表示,0-不支持,1-支持 # bySupport6 & 0x1 表示设备是否支持压缩 # bySupport6 & 0x2 表示是否支持流ID方式配置流来源扩展命令,DVR_SET_STREAM_SRC_INFO_V40 # bySupport6 & 0x4 表示是否支持事件搜索V40接口 # bySupport6 & 0x8 表示是否支持扩展智能侦测配置命令 # bySupport6 & 0x40 表示图片查询结果V40扩展 ("byMirrorChanNum", c_byte), # 镜像通道个数,录播主机中用于表示导播通道 ("wStartMirrorChanNo", c_uint16), # 起始镜像通道号 ("bySupport7", c_byte), # 能力,按位表示,0-不支持,1-支持 # bySupport7 & 0x1 表示设备是否支持NET_VCA_RULECFG_V42扩展 # bySupport7 & 0x2 表示设备是否支持IPC HVT 模式扩展 # bySupport7 & 0x04 表示设备是否支持返回锁定时间 # bySupport7 & 0x08 表示设置云台PTZ位置时,是否支持带通道号 # bySupport7 & 0x10 表示设备是否支持双系统升级备份 # bySupport7 & 0x20 表示设备是否支持OSD字符叠加V50 # bySupport7 & 0x80 表示设备是否支持报文加密 ("byRes2", c_byte)] # 保留,置为0 LPNET_DVR_DEVICEINFO_V30 = POINTER(NET_DVR_DEVICEINFO_V30) # 设备参数结构体 V40 class NET_DVR_DEVICEINFO_V40(ctypes.Structure): _fields_ = [ ('struDeviceV30', NET_DVR_DEVICEINFO_V30), # 设备信息 ('bySupportLock', c_byte), # 设备支持锁定功能,该字段由SDK根据设备返回值来赋值的。bySupportLock为1时,dwSurplusLockTime和byRetryLoginTime有效 ('byRetryLoginTime', c_byte), # 剩余可尝试登陆的次数,用户名,密码错误时,此参数有效 ('byPasswordLevel', c_byte), # admin密码安全等级 ('byProxyType', c_byte), # 代理类型,0-不使用代理, 1-使用socks5代理, 2-使用EHome代理 ('dwSurplusLockTime', c_uint32), # 剩余时间,单位秒,用户锁定时,此参数有效 ('byCharEncodeType', c_byte), # 字符编码类型 ('bySupportDev5', c_byte), # 支持v50版本的设备参数获取,设备名称和设备类型名称长度扩展为64字节 ('bySupport', c_byte), # 能力集扩展,位与结果:0- 不支持,1- 支持 ('byLoginMode', c_byte), # 登录模式:0- Private登录,1- ISAPI登录 ('dwOEMCode', c_uint32), # OEM Code ('iResidualValidity', c_uint32), # 该用户密码剩余有效天数,单位:天,返回负值,表示密码已经超期使用,例如“-3表示密码已经超期使用3天” ('byResidualValidity', c_byte), # iResidualValidity字段是否有效,0-无效,1-有效 ('bySingleStartDTalkChan', c_byte), # 独立音轨接入的设备,起始接入通道号,0-为保留字节,无实际含义,音轨通道号不能从0开始 ('bySingleDTalkChanNums', c_byte), # 独立音轨接入的设备的通道总数,0-表示不支持 ('byPassWordResetLevel', c_byte), # 0-无效, # 1- 管理员创建一个非管理员用户为其设置密码,该非管理员用户正确登录设备后要提示“请修改初始登录密码”,未修改的情况下,用户每次登入都会进行提醒; # 2- 当非管理员用户的密码被管理员修改,该非管理员用户再次正确登录设备后,需要提示“请重新设置登录密码”,未修改的情况下,用户每次登入都会进行提醒。 ('bySupportStreamEncrypt', c_byte), # 能力集扩展,位与结果:0- 不支持,1- 支持 # bySupportStreamEncrypt & 0x1 表示是否支持RTP/TLS取流 # bySupportStreamEncrypt & 0x2 表示是否支持SRTP/UDP取流 # bySupportStreamEncrypt & 0x4 表示是否支持SRTP/MULTICAST取流 ('byMarketType', c_byte), # 0-无效(未知类型),1-经销型,2-行业型 ('byRes2', c_byte * 238) #保留,置为0 ] LPNET_DVR_DEVICEINFO_V40 = POINTER(NET_DVR_DEVICEINFO_V40) # 异步登录回调函数 fLoginResultCallBack = CFUNCTYPE(None, c_uint32, c_uint32, LPNET_DVR_DEVICEINFO_V30, c_void_p) # NET_DVR_Login_V40()参数 class NET_DVR_USER_LOGIN_INFO(Structure): _fields_ = [ ("sDeviceAddress", c_char * 129), # 设备地址,IP 或者普通域名 ("byUseTransport", c_byte), # 是否启用能力集透传:0- 不启用透传,默认;1- 启用透传 ("wPort", c_uint16), # 设备端口号,例如:8000 ("sUserName", c_char * 64), # 登录用户名,例如:admin ("sPassword", c_char * 64), # 登录密码,例如:12345 ("cbLoginResult", fLoginResultCallBack), # 登录状态回调函数,bUseAsynLogin 为1时有效 ("pUser", c_void_p), # 用户数据 ("bUseAsynLogin", c_uint32), # 是否异步登录:0- 否,1- 是 ("byProxyType", c_byte), # 0:不使用代理,1:使用标准代理,2:使用EHome代理 ("byUseUTCTime", c_byte), # 0-不进行转换,默认,1-接口上输入输出全部使用UTC时间,SDK完成UTC时间与设备时区的转换,2-接口上输入输出全部使用平台本地时间,SDK完成平台本地时间与设备时区的转换 ("byLoginMode", c_byte), # 0-Private 1-ISAPI 2-自适应 ("byHttps", c_byte), # 0-不适用tls,1-使用tls 2-自适应 ("iProxyID", c_uint32), # 代理服务器序号,添加代理服务器信息时,相对应的服务器数组下表值 ("byVerifyMode", c_byte), # 认证方式,0-不认证,1-双向认证,2-单向认证;认证仅在使用TLS的时候生效; ("byRes2", c_byte * 119)] LPNET_DVR_USER_LOGIN_INFO = POINTER(NET_DVR_USER_LOGIN_INFO) # 组件库加载路径信息 class NET_DVR_LOCAL_SDK_PATH(Structure): pass LPNET_DVR_LOCAL_SDK_PATH = POINTER(NET_DVR_LOCAL_SDK_PATH) NET_DVR_LOCAL_SDK_PATH._fields_ = [ ('sPath', c_char * 256), # 组件库地址 ('byRes', c_byte * 128), ] # 定义预览参数结构体 class NET_DVR_PREVIEWINFO(Structure): pass LPNET_DVR_PREVIEWINFO = POINTER(NET_DVR_PREVIEWINFO) NET_DVR_PREVIEWINFO._fields_ = [ ('lChannel', c_uint32), # 通道号 ('dwStreamType', c_uint32), # 码流类型,0-主码流,1-子码流,2-码流3,3-码流4, 4-码流5,5-码流6,7-码流7,8-码流8,9-码流9,10-码流10 ('dwLinkMode', c_uint32), # 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP ,6- HRUDP(可靠传输) ,7-RTSP/HTTPS ('hPlayWnd', c_void_p), # 播放窗口的句柄,为NULL表示不播放图象 ('bBlocked', c_uint32), # 0-非阻塞取流, 1-阻塞取流, 如果阻塞SDK内部connect失败将会有5s的超时才能够返回,不适合于轮询取流操作 ('bPassbackRecord', c_uint32), # 0-不启用录像回传,1启用录像回传 ('byPreviewMode', c_ubyte), # 预览模式,0-正常预览,1-延迟预览 ('byStreamID', c_ubyte * 32), # 流ID,lChannel为0xffffffff时启用此参数 ('byProtoType', c_ubyte), # 应用层取流协议,0-私有协议,1-RTSP协议, # 2-SRTP码流加密(对应此结构体中dwLinkMode 字段,支持如下方式, 为1,表示udp传输方式,信令走TLS加密,码流走SRTP加密,为2,表示多播传输方式,信令走TLS加密,码流走SRTP加密) ('byRes1', c_ubyte), ('byVideoCodingType', c_ubyte), # 码流数据编解码类型 0-通用编码数据 1-热成像探测器产生的原始数据 ('dwDisplayBufNum', c_uint32), # 播放库播放缓冲区最大缓冲帧数,范围1-50,置0时默认为1 ('byNPQMode', c_ubyte), # NPQ是直连模式,还是过流媒体:0-直连 1-过流媒体 ('byRecvMetaData', c_ubyte), # 是否接收metadata数据 # 设备是否支持该功能通过GET /ISAPI/System/capabilities 中DeviceCap.SysCap.isSupportMetadata是否存在且为true ('byDataType', c_ubyte), # 数据类型,0-码流数据,1-音频数据 ('byRes', c_ubyte * 213), ] #定义JPEG图像信息结构体 class NET_DVR_JPEGPARA(Structure): pass LPNET_DVR_JPEGPARA = POINTER(NET_DVR_JPEGPARA) NET_DVR_JPEGPARA._fields_ = [ ('wPicSize', c_ushort), ('wPicQuality', c_ushort), ] # 叠加字符 class NET_DVR_SHOWSTRINGINFO(Structure): pass LPNET_DVR_SHOWSTRINGINFO = POINTER(NET_DVR_SHOWSTRINGINFO) NET_DVR_SHOWSTRINGINFO._fields_ = [ ('wShowString', c_ushort), ('wStringSize', c_ushort), ('wShowStringTopLeftX', c_ushort), ('wShowStringTopLeftY', c_ushort), ('sString', c_ubyte * 44), ] # 叠加字符 class NET_DVR_SHOWSTRING_V30(Structure): pass LPNET_DVR_SHOWSTRING_V30 = POINTER(NET_DVR_SHOWSTRING_V30) NET_DVR_SHOWSTRING_V30._fields_ = [ ('dwSize', c_uint32), ('struStringInfo', NET_DVR_SHOWSTRINGINFO * 8), ] # 透传接口输出参数结构体 class NET_DVR_XML_CONFIG_OUTPUT(Structure): pass LPNET_DVR_XML_CONFIG_OUTPUT = POINTER(NET_DVR_XML_CONFIG_OUTPUT) NET_DVR_XML_CONFIG_OUTPUT._fields_ = [ ('dwSize', c_uint32), ('lpOutBuffer', c_void_p), ('dwOutBufferSize', c_uint32), ('dwReturnedXMLSize', c_uint32), ('lpStatusBuffer', c_void_p), ('dwStatusSize', c_uint32), ('byRes', c_ubyte * 32) ] # 透传接口输入参数结构体 class NET_DVR_XML_CONFIG_INPUT(Structure): pass LPNET_DVR_XML_CONFIG_INPUT = POINTER(NET_DVR_XML_CONFIG_INPUT) NET_DVR_XML_CONFIG_INPUT._fields_ = [ ('dwSize', c_uint32), ('lpRequestUrl', c_void_p), ('dwRequestUrlLen', c_uint32), ('lpInBuffer', c_void_p), ('dwInBufferSize', c_uint32), ('dwRecvTimeOut', c_uint32), ('byForceEncrpt', c_ubyte), ('byNumOfMultiPart', c_ubyte), ('byRes', c_ubyte * 30) ] # 报警设备信息结构体 class NET_DVR_ALARMER(Structure): _fields_ = [ ("byUserIDValid", c_byte), # UserID是否有效 0-无效,1-有效 ("bySerialValid", c_byte), # 序列号是否有效 0-无效,1-有效 ("byVersionValid", c_byte), # 版本号是否有效 0-无效,1-有效 ("byDeviceNameValid", c_byte), # 设备名字是否有效 0-无效,1-有效 ("byMacAddrValid", c_byte), # MAC地址是否有效 0-无效,1-有效 ("byLinkPortValid", c_byte), # login端口是否有效 0-无效,1-有效 ("byDeviceIPValid", c_byte), # 设备IP是否有效 0-无效,1-有效 ("bySocketIPValid", c_byte), # socket ip是否有效 0-无效,1-有效 ("lUserID", c_uint32), # NET_DVR_Login()返回值, 布防时有效 ("sSerialNumber", c_byte * 48), # 序列号 ("dwDeviceVersion", c_uint32), # 版本信息 高16位表示主版本,低16位表示次版本 ("sDeviceName", c_byte * 32), # 设备名字 ("byMacAddr", c_byte * 6), # MAC地址 ("wLinkPort", c_uint16), # link port ("sDeviceIP", c_byte * 128), # IP地址 ("sSocketIP", c_byte * 128), # 报警主动上传时的socket IP地址 ("byIpProtocol", c_byte), # Ip协议 0-IPV4, 1-IPV6 ("byRes2", c_byte * 11)] LPNET_DVR_ALARMER = POINTER(NET_DVR_ALARMER) # 报警布防参数结构体 class NET_DVR_SETUPALARM_PARAM(Structure): _fields_ = [ ("dwSize", c_uint32), # 结构体大小 ("byLevel", c_byte), # 布防优先级:0- 一等级(高),1- 二等级(中),2- 三等级(低) ("byAlarmInfoType", c_byte), # 上传报警信息类型(抓拍机支持),0-老报警信息(NET_DVR_PLATE_RESULT),1-新报警信息(NET_ITS_PLATE_RESULT)2012-9-28 ("byRetAlarmTypeV40", c_byte), # 0- 返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO, # 1- 设备支持NET_DVR_ALARMINFO_V40则返回NET_DVR_ALARMINFO_V40,不支持则返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO ("byRetDevInfoVersion", c_byte), # CVR上传报警信息回调结构体版本号 0-COMM_ALARM_DEVICE, 1-COMM_ALARM_DEVICE_V40 ("byRetVQDAlarmType", c_byte), # VQD报警上传类型,0-上传报报警NET_DVR_VQD_DIAGNOSE_INFO,1-上传报警NET_DVR_VQD_ALARM ("byFaceAlarmDetection", c_byte), ("bySupport", c_byte), ("byBrokenNetHttp", c_byte), ("wTaskNo", c_uint16), # 任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应 同时 下发任务结构 NET_DVR_VEHICLE_RECOG_COND中的字段dwTaskNo对应) ("byDeployType", c_byte), # 布防类型:0-客户端布防,1-实时布防 ("byRes1", c_byte * 3), ("byAlarmTypeURL", c_byte), # bit0-表示人脸抓拍报警上传 # 0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断,同时设备需要支持URL的相关服务,当前是”云存储“) ("byCustomCtrl", c_byte)] # Bit0- 表示支持副驾驶人脸子图上传: 0-不上传,1-上传 LPNET_DVR_SETUPALARM_PARAM = POINTER(NET_DVR_SETUPALARM_PARAM) # 上传的报警信息结构体。 class NET_DVR_ALARMINFO_V30(Structure): _fields_ = [ ("dwAlarmType", c_uint32), # 报警类型 ("dwAlarmInputNumber", c_uint32), # 报警输入端口,当报警类型为0、23时有效 ("byAlarmOutputNumber", c_byte * 96), # 触发的报警输出端口,值为1表示该报警端口输出,如byAlarmOutputNumber[0]=1表示触发第1个报警输出口输出,byAlarmOutputNumber[1]=1表示触发第2个报警输出口,依次类推 ("byAlarmRelateChannel", c_byte * 64), # 触发的录像通道,值为1表示该通道录像,如byAlarmRelateChannel[0]=1表示触发第1个通道录像 ("byChannel", c_byte * 64), # 发生报警的通道。当报警类型为2、3、6、9、10、11、13、15、16时有效,如byChannel[0]=1表示第1个通道报警 ("byDiskNumber", c_byte * 33)] # 发生报警的硬盘。当报警类型为1,4,5时有效,byDiskNumber[0]=1表示1号硬盘异常 LPNET_DVR_ALARMINFO_V30 = POINTER(NET_DVR_ALARMINFO_V30) # 报警布防参数结构体 class NET_DVR_SETUPALARM_PARAM(Structure): _fields_ = [ ("dwSize", c_uint32), # 结构体大小 ("byLevel", c_byte), # 布防优先级:0- 一等级(高),1- 二等级(中),2- 三等级(低) ("byAlarmInfoType", c_byte), # 上传报警信息类型(抓拍机支持),0-老报警信息(NET_DVR_PLATE_RESULT),1-新报警信息(NET_ITS_PLATE_RESULT)2012-9-28 ("byRetAlarmTypeV40", c_byte), # 0- 返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO, # 1- 设备支持NET_DVR_ALARMINFO_V40则返回NET_DVR_ALARMINFO_V40,不支持则返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO ("byRetDevInfoVersion", c_byte), # CVR上传报警信息回调结构体版本号 0-COMM_ALARM_DEVICE, 1-COMM_ALARM_DEVICE_V40 ("byRetVQDAlarmType", c_byte), # VQD报警上传类型,0-上传报报警NET_DVR_VQD_DIAGNOSE_INFO,1-上传报警NET_DVR_VQD_ALARM ("byFaceAlarmDetection", c_byte), ("bySupport", c_byte), ("byBrokenNetHttp", c_byte), ("wTaskNo", c_uint16), # 任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应 同时 下发任务结构 NET_DVR_VEHICLE_RECOG_COND中的字段dwTaskNo对应) ("byDeployType", c_byte), # 布防类型:0-客户端布防,1-实时布防 ("byRes1", c_byte * 3), ("byAlarmTypeURL", c_byte), # bit0-表示人脸抓拍报警上传 # 0- 表示二进制传输,1- 表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断,同时设备需要支持URL的相关服务,当前是”云存储“) ("byCustomCtrl", c_byte)] # Bit0- 表示支持副驾驶人脸子图上传: 0-不上传,1-上传,(注:只在公司内部8600/8200等平台开放) LPNET_DVR_SETUPALARM_PARAM = POINTER(NET_DVR_SETUPALARM_PARAM) # 时间参数结构体 class NET_DVR_TIME(Structure): _fields_ = [ ("dwYear", c_uint32), # 年 ("dwMonth", c_uint32), # 月 ("dwDay", c_uint32), # 日 ("dwHour", c_uint32), # 时 ("dwMinute", c_uint32), # 分 ("dwSecond", c_uint32)] # 秒 LPNET_DVR_TIME = POINTER(NET_DVR_TIME) # IP地址结构体 class NET_DVR_IPADDR(Structure): _fields_ = [ ("sIpV4", c_byte * 16), # 设备IPv4地址 ("sIpV6", c_byte * 128)] # 设备IPv6地址 LPNET_DVR_IPADDR = POINTER(NET_DVR_IPADDR) # 门禁主机事件信息 class NET_DVR_ACS_EVENT_INFO(Structure): _fields_ = [ ("dwSize", c_uint32), # 结构体大小 ("byCardNo", c_byte * 32), # 卡号 ("byCardType", c_byte), # 卡类型:1- 普通卡,2- 残障人士卡,3- 非非授权名单卡,4- 巡更卡,5- 胁迫卡,6- 超级卡,7- 来宾卡,8- 解除卡,为0表示无效 ("byAllowListNo", c_byte), # 授权名单单号,取值范围:1~8,0表示无效 ("byReportChannel", c_byte), # 报告上传通道:1- 布防上传,2- 中心组1上传,3- 中心组2上传,0表示无效 ("byCardReaderKind", c_byte), # 读卡器类型:0- 无效,1- IC读卡器,2- 身份证读卡器,3- 二维码读卡器,4- 指纹头 ("dwCardReaderNo", c_uint32), # 读卡器编号,为0表示无效 ("dwDoorNo", c_uint32), # 门编号(或者梯控的楼层编号),为0表示无效(当接的设备为人员通道设备时,门1为进方向,门2为出方向) ("dwVerifyNo", c_uint32), # 多重卡认证序号,为0表示无效 ("dwAlarmInNo", c_uint32), # 报警输入号,为0表示无效 ("dwAlarmOutNo", c_uint32), # 报警输出号,为0表示无效 ("dwCaseSensorNo", c_uint32), # 事件触发器编号 ("dwRs485No", c_uint32), # RS485通道号,为0表示无效 ("dwMultiCardGroupNo", c_uint32), # 群组编号 ("wAccessChannel", c_uint16), # 人员通道号 ("byDeviceNo", c_byte), # 设备编号,为0表示无效 ("byDistractControlNo", c_byte), # 分控器编号,为0表示无效 ("dwEmployeeNo", c_uint32), # 工号,为0无效 ("wLocalControllerID", c_uint16), # 就地控制器编号,0-门禁主机,1-255代表就地控制器 ("byInternetAccess", c_byte), # 网口ID:(1-上行网口1,2-上行网口2,3-下行网口1) ("byType", c_byte), # 防区类型,0:即时防区,1-24小时防区,2-延时防区,3-内部防区,4-钥匙防区,5-火警防区,6-周界防区,7-24小时无声防区, # 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区,0xff-无 ("byMACAddr", c_byte * 6), # 物理地址,为0无效 ("bySwipeCardType", c_byte), # 刷卡类型,0-无效,1-二维码 ("byMask", c_byte), # 是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 ("dwSerialNo", c_uint32), # 事件流水号,为0无效 ("byChannelControllerID", c_byte), # 通道控制器ID,为0无效,1-主通道控制器,2-从通道控制器 ("byChannelControllerLampID", c_byte), # 通道控制器灯板ID,为0无效(有效范围1-255) ("byChannelControllerIRAdaptorID", c_byte), # 通道控制器红外转接板ID,为0无效(有效范围1-255) ("byChannelControllerIREmitterID", c_byte), # 通道控制器红外对射ID,为0无效(有效范围1-255) ("byHelmet", c_byte), # 可选,是否戴安全帽:0-保留,1-未知,2-不戴安全, 3-戴安全帽 ("byRes", c_byte * 3)] # 保留,置为0 LPNET_DVR_ACS_EVENT_INFO = POINTER(NET_DVR_ACS_EVENT_INFO) # 门禁主机报警信息结构体 class NET_DVR_ACS_ALARM_INFO(Structure): _fields_ = [ ("dwSize", c_uint32), # 结构体大小 ("dwMajor", c_uint32), # 报警主类型,具体定义见“Remarks”说明 ("dwMinor", c_uint32), # 报警次类型,次类型含义根据主类型不同而不同,具体定义见“Remarks”说明 ("struTime", NET_DVR_TIME), # 报警时间 ("sNetUser", c_byte * 16), # 网络操作的用户名 ("struRemoteHostAddr", NET_DVR_IPADDR), # 远程主机地址 ("struAcsEventInfo", NET_DVR_ACS_EVENT_INFO), # 报警信息详细参数 ("dwPicDataLen", c_uint32), # 图片数据大小,不为0是表示后面带数据 ("pPicData", c_void_p), # 图片数据缓冲区 ("wInductiveEventType", c_uint16), # 归纳事件类型,0-无效,客户端判断该值为非0值后,报警类型通过归纳事件类型区分,否则通过原有报警主次类型(dwMajor、dwMinor)区分 ("byPicTransType", c_byte), # 图片数据传输方式: 0-二进制;1-url ("byRes1", c_byte), # 保留,置为0 ("dwIOTChannelNo", c_uint32), # IOT通道号 ("pAcsEventInfoExtend", c_void_p), # byAcsEventInfoExtend为1时,表示指向一个NET_DVR_ACS_EVENT_INFO_EXTEND结构体 ("byAcsEventInfoExtend", c_byte), # pAcsEventInfoExtend是否有效:0-无效,1-有效 ("byTimeType", c_byte), # 时间类型:0-设备本地时间,1-UTC时间(struTime的时间) ("byRes2", c_byte), # 保留,置为0 ("byAcsEventInfoExtendV20", c_byte), # pAcsEventInfoExtendV20是否有效:0-无效,1-有效 ("pAcsEventInfoExtendV20", c_void_p), # byAcsEventInfoExtendV20为1时,表示指向一个NET_DVR_ACS_EVENT_INFO_EXTEND_V20结构体 ("byRes", c_byte * 4)] # 保留,置为0 LPNET_DVR_ACS_ALARM_INFO = POINTER(NET_DVR_ACS_ALARM_INFO) # 点坐标参数结构体 class NET_VCA_POINT(Structure): _fields_ = [ ("fX", c_float), ("fY", c_float) ] # 身份证刷卡信息扩展参数 class NET_DVR_ID_CARD_INFO_EXTEND(Structure): _fields_ = [ ("byRemoteCheck", c_ubyte), ("byThermometryUnit", c_ubyte), ("byIsAbnomalTemperature", c_ubyte), ("byRes2", c_ubyte), ("fCurrTemperature", c_float), ("struRegionCoordinates", NET_VCA_POINT), ("dwQRCodeInfoLen",c_uint32), ("dwVisibleLightDataLen",c_uint32), ("dwThermalDataLen",c_uint32), ("pQRCodeInfo", POINTER(c_byte)), ("pVisibleLightData", POINTER(c_byte)), ("pThermalData", POINTER(c_byte)), ("byRes", c_ubyte * 1024) ] # 日期信息结构体 class NET_DVR_DATE(Structure): _fields_ = [ ('wYear', c_ushort), ('byMonth', c_ubyte), ('byDay', c_ubyte) ] # 身份证信息结构体 class NET_DVR_ID_CARD_INFO(Structure): _fields_ = [ ("dwSize",c_uint), ("byName", c_ubyte * 128), ("struBirth",NET_DVR_DATE), ("byAddr", c_ubyte * 280), ("byIDNum", c_ubyte * 32), ("byIssuingAuthority", c_ubyte * 128), ("struStartDate",NET_DVR_DATE), ("struEndDate",NET_DVR_DATE), ("byTermOfValidity", c_ubyte), ("bySex", c_ubyte), ("byNation", c_ubyte), ("byRes", c_ubyte * 101) ] # 时间参数结构体 class NET_DVR_TIME(Structure): _fields_ = [ ("dwYear", c_uint32), ("dwMonth", c_uint32), ("dwDay", c_uint32), ("dwHour", c_uint32), ("dwMinute", c_uint32), ("dwSecond", c_uint32) ] # 时间参数结构体 class NET_DVR_TIME_V30(Structure): _fields_ = [ ('wYear', c_ushort), ('byMonth', c_ubyte), ('byDay', c_ubyte), ('byHour', c_ubyte), ('byMinute', c_ubyte), ('bySecond', c_ubyte), ('byISO8601', c_ubyte), ('wMilliSec', c_ushort), ('cTimeDifferenceH', c_ubyte), ('cTimeDifferenceM', c_ubyte), ] # IP地址结构体 class NET_DVR_IPADDR(Structure): _fields_ = [ ("sIpV4", c_ubyte * 16), ("byIPv6", c_ubyte * 128)] # 身份证刷卡信息上传结构体 class NET_DVR_ID_CARD_INFO_ALARM(Structure): _fields_ = [ ("dwSize",c_uint32), # 结构长度 ("struIDCardCfg", NET_DVR_ID_CARD_INFO), # 身份证信息 ("dwMajor", c_uint32), # 报警主类型,参考宏定义 ("dwMinor", c_uint32), # 报警次类型,参考宏定义 ("struSwipeTime", NET_DVR_TIME_V30), # 刷卡时间 ("byNetUser", c_ubyte * 16), # 网络操作的用户名 ("struRemoteHostAddr", NET_DVR_IPADDR), # 远程主机地址 ("dwCardReaderNo", c_uint32), # 读卡器编号,为0无效 ("dwDoorNo", c_uint32), # 门编号,为0无效 ("dwPicDataLen", c_uint32), # 图片数据大小,不为0是表示后面带数据 ("pPicData", c_void_p), # 身份证图片数据缓冲区,dwPicDataLen不为0时缓冲区里面存放身份证头像的图片数据 ("byCardType", c_ubyte), # 卡类型,1-普通卡,2-残疾人卡,3-非非授权名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 ("byDeviceNo", c_ubyte), # 设备编号,为0时无效(有效范围1-255) ("byMask", c_ubyte), # 是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 ("byRes2", c_ubyte), # 保留,置为0 ("dwFingerPrintDataLen", c_uint32), # 指纹数据大小,不为0是表示后面带数据 ("pFingerPrintData", c_void_p), # 指纹数据缓冲区,dwFingerPrintDataLen不为0时缓冲区里面存放指纹数据 ("dwCapturePicDataLen", c_uint32), # 抓拍图片数据大小,不为0是表示后面带数据 ("pCapturePicData", c_void_p), # 抓拍图片数据缓冲区,dwCapturePicDataLen不为0时缓冲区里面存放设备上摄像机抓拍上传的图片数据 ("dwCertificatePicDataLen", c_uint32), # 证件抓拍图片数据大小,不为0是表示后面带数据 ("pCertificatePicData", c_void_p), # 证件抓拍图片数据缓冲区,dwCertificatePicDataLen不为0时缓冲区里面存放设备上摄像机抓拍上传的证件抓拍图片数据 ("byCardReaderKind", c_ubyte), # 读卡器属于哪一类:0-无效,1-IC读卡器,2-身份证读卡器,3-二维码读卡器,4-指纹头 ("byRes3", c_ubyte * 2), # 保留,置为0 ("byIDCardInfoExtend", c_ubyte), # pIDCardInfoExtend是否有效:0-无效,1-有效 ("pIDCardInfoExtend", POINTER(NET_DVR_ID_CARD_INFO_EXTEND)), # 身份证刷卡扩展事件信息 ("byRes", c_ubyte * 172) # 身份证刷卡扩展事件信息 ] LPNET_DVR_ID_CARD_INFO_ALARM = POINTER(NET_DVR_ID_CARD_INFO_ALARM) # 报警信息回调函数 MSGCallBack_V31 = fun_ctype(c_bool, c_uint32, LPNET_DVR_ALARMER, c_void_p, c_ulong, c_void_p) MSGCallBack = fun_ctype(None, c_uint32, LPNET_DVR_ALARMER, c_void_p, c_ulong, c_void_p) # 码流回调函数 REALDATACALLBACK = fun_ctype(None, c_long, c_ulong, POINTER(c_ubyte), c_ulong, c_void_p)