IPC_SDK编程指南3) 获取配置信息Hik.NET_DVR_FOCUSMODE_CFG focusModeCfg = new Hik.NET_DVR_FOCUSMODE_CFG();//实例化聚焦模式结构体Int32 size = Marshal.SizeOf(focusModeCfg);//获取结构体大小IntPtr ptrCfg = Marshal.AllocHGlobal(size);//设置指针空间大小Hik.NET_DVR_GetDVRConfig(_userId, 3305, _channelId, ptrCfg, (UInt32)size, ref dwReturn);//获取聚焦模式信息的指针focusModeCfg = (Hik.NET_DVR_FOCUSMODE_CFG)Marshal.PtrToStructure(ptrCfg, typeof(Hik.NET_DVR_FOCUSMODE_CFG));//指针转换为聚焦模式结构体Marshal.FreeHGlobal(ptrCfg);//释放指针4) 聚焦模式切换命令0自动1手动2半自动5) 聚焦模式切换结构体NET_DVR_FOCUSMODE_CFG6) 设置配置信息Hik.NET_DVR_FOCUSMODE_CFG focusModeCfg = 获取配置信息();Int32 size = Marshal.SizeOf(focusModeCfg);//获取结构体大小IntPtr ptrCfg = Marshal.AllocHGlobal(size);//设置指针空间大小focusModeCfg.byFocusMode = (byte)聚焦模式命令;Marshal.StructureToPtr(focusModeCfg, ptrCfg, false);//结构体转换为指针Hik.NET_DVR_SetDVRConfig(_userId, Hik.NET_DVR_SET_FOCUSMODECFG, _channelId, ptrCfg, (uint)size);//设置聚焦模式Marshal.FreeHGlobal(ptrCfg);//释放指针12. OSD字符设置1) 设备配置命令1030;//获取叠加字符操作命令1031;//设置叠加字符操作命令2) 通道号或者组号ChannelId//登录IPC设备时获取的通道号3) 获取配置信息Hik.NET_DVR_SHOWSTRING_V30 struShowStrCfg = new Hik.NET_DVR_SHOWSTRING_V30();//初始化叠加字符结构体Int32 size = Marshal.SizeOf(struShowStrCfg);//获取结构体空间大小IntPtr ptr = Marshal.AllocHGlobal(size);//设置指针大小Hik.NET_DVR_GetDVRConfig(_userId, 1030, _channelId, ptr, (UInt32)size, ref dwReturn);//获取配置信息struShowStrCfg = (Hik.NET_DVR_SHOWSTRING_V30)Marshal.PtrToStructure(ptr, typeof(Hik.NET_DVR_SHOWSTRING_V30));//指针转换为结构体Marshal.FreeHGlobal(ptr);//释放指针4) 叠加字符结构体NET_DVR_SHOWSTRINGINFO struStringInfo;/* 要显示的字符内容 */说明:设置叠加字符需要为其属性赋值。5) 设置配置信息Hik.NET_DVR_SHOWSTRING_V30 struShowStrCfg =获取叠加字符配置信息();Int32 size = Marshal.SizeOf(struShowStrCfg);//获取结构体空间大小IntPtr ptr = Marshal.AllocHGlobal(size);//设置指针空间大小String osd = '海康智能监控视频一';struShowStrCfg.struStringInfo[0].wShowString = 1;//1为显示,0为不显示struShowStrCfg.struStringInfo[0].sString = osd;//叠加的字符串struShowStrCfg.struStringInfo[0].wStringSize = (ushort)(osd.Length * 2);//字符串大小struShowStrCfg.struStringInfo[0].wShowStringTopLeftX = 0;//坐标struShowStrCfg.struStringInfo[0].wShowStringTopLeftY = 0;//坐标Marshal.StructureToPtr(struShowStrCfg, ptr, false);//街头体转换为指针Hik.NET_DVR_SetDVRConfig(_userId, 1031, _channelId, ptr, (UInt32)size);//设置配置信息Marshal.FreeHGlobal(ptr);//释放指针说明:可以叠加显示多个字符串。13. 球机定位速度设置1) 设备配置命令3270;//获取PTZ基本参数信息3271;//设置PTZ基本参数信息2) 通道号或者组号ChannelId//登录IPC设备时获取的通道号3) 获取配置信息Hik.NET_DVR_PTZ_BASICPARAMCFG basicParamCfg = new Hik.NET_DVR_PTZ_BASICPARAMCFG();//初始化PTZ基本参数结构体Int32 size = Marshal.SizeOf(basicParamCfg);//获取结构体空间大小IntPtr ptr = Marshal.AllocHGlobal(size);//设置指针大小Hik.NET_DVR_GetDVRConfig(userId, 3270, _channelId, ptr, (UInt32)size, ref bytesReturned);//获取配置参数指针basicParamCfg = (Hik.NET_DVR_PTZ_BASICPARAMCFG)Marshal.PtrToStructure(ptr, typeof(Hik.NET_DVR_PTZ_BASICPARAMCFG));//指针转换为结构体Marshal.FreeHGlobal(ptr);//释放指针4) 球机定位速度命令1-85) 球机定位速度结构体Hik.NET_DVR_PTZ_BASICPARAMCFG basicParamCfg6) 设置配置信息Hik.NET_DVR_PTZ_BASICPARAMCFG basicParamCfg = 获取配置信息();Int32 size = Marshal.SizeOf(basicParamCfg);//获取结构体空间大小IntPtr ptr = Marshal.AllocHGlobal(size);//设置指针空间大小basicParamCfg.byPresetSpeed = (byte)速度值;Marshal.StructureToPtr(basicParamCfg, ptr, false);//结构体转换为指针Hik.NET_DVR_SetDVRConfig(userId, 3271, _channelId, ptr, size);//设置配置信息Marshal.FreeHGlobal(ptr);//释放指针14. 获取球机转动范围1) 设备配置命令294;//云台获取PTZ范围2) 通道号或者组号ChannelId//登录IPC设备时获取的通道号3) 获取配置信息Hik.NET_DVR_PTZSCOPE PTZScope = new Hik.NET_DVR_PTZSCOPE();//初始化球机范围信息结构体Int32 size = Marshal.SizeOf(PTZScope);//获取结构体空间大小IntPtr ptrScope = Marshal.AllocHGlobal(size);//设置指针空间大小Hik.NET_DVR_GetDVRConfig(_userId, 294, _channelId, ptrScope, (UInt32)size, ref result);//获取配置信息PTZScope = (Hik.NET_DVR_PTZSCOPE)Marshal.PtrToStructure(ptrScope, typeof(Hik.NET_DVR_PTZSCOPE));//指针转换为结构体Marshal.FreeHGlobal(ptrScope);//释放指针4) 球机转动范围结构体Hik.NET_DVR_PTZSCOPE PTZScope15. 球机定位使用球机定位功能前,需先设置球机定位速度和获取球机转动范围,再根据球机转动范围信息来操作球机定位功能。1) 设备配置命令292;//云台设置PTZ位置293;//云台获取PTZ位置2) 通道号或者组号ChannelId//登录IPC设备时获取的通道号3) 获取配置信息//用精简方式实现Int32 size = Marshal.SizeOf(typeof(Hik.NET_DVR_PTZPOS));//获取球机位置信息结构体大小IntPtr ptrPTZ = Marshal.AllocHGlobal(size);//设置指针空间大小Hik.NET_DVR_GetDVRConfig(_userId, 293, _channelId, ptrPTZ, (UInt32)size, ref result);//获取球机位置配置信息Hik.NET_DVR_PTZPOS PTZPos = (Hik.NET_DVR_PTZPOS)Marshal.PtrToStructure(ptrPTZ, typeof(Hik.NET_DVR_PTZPOS));//指针转换为结构体Marshal.FreeHGlobal(ptrPTZ);//释放指针4) 透雾切换结构体Hik.NET_DVR_PTZPOS PTZPos5) 设置配置信息Hik.NET_DVR_PTZPOS PTZPos = 获取球机位置信息();Int32 size = Marshal.SizeOf(PTZPos);//获取结构体空间大小IntPtr ptr = Marshal.AllocHGlobal(size);//设置指针空间大小PTZPos.wAction = 1;//-表示定位PTZ参数//本结构体中的wAction参数是设置时的操作类型,因此获取时该参数无效。实际显示的PTZ值是获取到的十六进制值的十分之一,如获取的水平参数P的值是0x1750,实际显示的P值为175度;获取到的垂直参数T的值是0x0789,实际显示的T值为78.9度;获取到的变倍参数Z的值是0x1100,实际显示的Z值为110度。String temp = '0x' + Convert.ToString(horAngle * 10);//实际显示的PTZ值是获取到的十六进制值的十分之一,所以需要把输入的数值乘以10再拼成十六进制字符串PTZPos.wPanPos = Convert.ToUInt16(temp, 16);//转换为16进制水平角度if (pitAngle >= 0)//判断俯仰角度的正负。由于零方位角的设置不同,会导致出现负的俯仰角度,所以处理方式不同 PTZPos.wTiltPos = Convert.ToUInt16('0x' + Convert.ToString(pitAngle * 10), 16);else PTZPos.wTiltPos = Convert.ToUInt16('0x' + Convert.ToString((pitAngle + 360) * 10), 16);PTZPos.wZoomPos = Convert.ToUInt16('0x' + Convert.ToString(viewAngle * 10), 16);Marshal.StructureToPtr(PTZPos, ptr, false);//结构体转换为指针Hik.NET_DVR_SetDVRConfig(_userId, 292, _channelId, ptr, (uint)size);//设置配置Marshal.FreeHGlobal(ptr);//释放指针16. 零方位角控制1) 设备配置命令3283;// 零方位角控制2) 通道号或者组号ChannelId//登录IPC设备时获取的通道号3) 零方位角控制命令SET = 0,//设置GOTO = 1,//调用CLE = 2//清除4) 零方位角控制结构体Hik.NET_DVR_INITIALPOSITIONCTRL initialPositionCtrl5) 设置控制信息Hik.NET_DVR_INITIALPOSITIONCTRL initialPositionCtrl = new Hik.NET_DVR_INITIALPOSITIONCTRL();//初始化零方位角控制结构体Int32 size = Marshal.SizeOf(initialPositionCtrl);//获取结构体空间大小IntPtr ptr = Marshal.AllocHGlobal(size);//设置指针大小initialPositionCtrl.dwSize = (uint)size;//结构体大小initialPositionCtrl.dwChan = (uint)_channelId;//播放通道号initialPositionCtrl.byWorkMode = (byte)command;//零方位角控制命令Marshal.StructureToPtr(initialPositionCtrl, ptr, false);//结构体转换为指针Hik.NET_DVR_RemoteControl(_userId, (uint)3283, ptr, (uint)size);//零方位角控制Marshal.FreeHGlobal(ptr);//释放指针17. 录像回放此功能需要硬盘录像机支持。需要先登录NVR设备。在登录和获取数字通道号后,根据设备所对应的通道号操作相关IPC设备的一些基础功能。1) 设备配置命令1;//开始播放2;//停止播放3;//暂停播放4;//恢复播放5;//快放6;//慢放7;//正常速度8;//单帧放9;//打开声音10;//关闭声音11;//调节音量12;//改变文件回放的进度13;//获取文件回放的进度14;//获取当前已经播放的时间(按文件回放的时候有效)15;//获取当前已经播放的帧数(按文件回放的时候有效)16;//获取当前播放文件总的帧数(按文件回放的时候有效)17;//获取当前播放文件总的时间(按文件回放的时候有效)20;//丢B帧24;//设置码流速度25;//保持与设备的心跳(如果回调阻塞,建议2秒发送一次)26;//按绝对时间定位27;//获取按时间回放对应时间段内的所有文件的总长度29;//倒放切换为正放30;//正放切换为倒放32;//设置转封装类型33;//正放切换为倒放2) 初始化录像回放结构体Hik.NET_DVR_VOD_PARA struVodPara = new Hik.NET_DVR_VOD_PARA();//初始化录像回放结构体struVodPara.dwSize = (uint)Marshal.SizeOf(struVodPara);//获取结构体空间大小struVodPara.struIDInfo.dwChannel = (uint)_ipChannelId; //数字通道号 Channel number,海康设备数字通道号从33开始 //struVodPara.hWnd = this.pictureBoxVideo.Handle;//不使用回调获取回放视频时,使用此属性设置回放窗口句柄 struVodPara.hWnd = IntPtr.Zero;//使用回调获取回放视频时,需如此设置回放窗口句柄//设置回放的开始时间 Set the starting time to search video filesstruVodPara.struBeginTime.dwYear = (uint)dateTimeStart.Value.Year;struVodPara.struBeginTime.dwMonth = (uint)dateTimeStart.Value.Month;struVodPara.struBeginTime.dwDay = (uint)dateTimeStart.Value.Day;struVodPara.struBeginTime.dwHour = (uint)dateTimeStart.Value.Hour;struVodPara.struBeginTime.dwMinute = (uint)dateTimeStart.Value.Minute;struVodPara.struBeginTime.dwSecond = (uint)dateTimeStart.Value.Second;//设置回放的结束时间 Set the stopping time to search video filesstruVodPara.struEndTime.dwYear = (uint)dateTimeEnd.Value.Year;struVodPara.struEndTime.dwMonth = (uint)dateTimeEnd.Value.Month;struVodPara.struEndTime.dwDay = (uint)dateTimeEnd.Value.Day;struVodPara.struEndTime.dwHour = (uint)dateTimeEnd.Value.Hour;struVodPara.struEndTime.dwMinute = (uint)dateTimeEnd.Value.Minute;struVodPara.struEndTime.dwSecond = (uint)dateTimeEnd.Value.Second;3) 获取录像回放播放句柄目前根据需求只实现根据录像起止时间范围播放录像视频,其他功能请参考SDK功能说明文档。//按时间回放 Playback by time_realHandle = Hik.NET_DVR_PlayBackByTime_V40(_NVRUserId, ref struVodPara);// struVodPara为录像回放结构体4) 录像数据回调函数的使用///