海康威视SDK

Posted 摧残一生 涅槃重生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了海康威视SDK相关的知识,希望对你有一定的参考价值。

门禁/报警主机获取用户信息

方法及参数

  1. 调用方法:NET_DVR_GetAlarmDeviceUser(userId, 1, ref NET_DVR_ALARM_DEVICE_USER);

    //HCNetSDK中声明类
    [DllImport(@"..\\..\\runtime\\hk\\HCNetSDK.dll")]
    public static extern bool NET_DVR_GetAlarmDeviceUser(int lUserID, int lUserIndex, ref NET_DVR_ALARM_DEVICE_USER lpDeviceUser);
    
    参数 说明
    lUserID 登录时返回的句柄
    lUserIndex 门禁的起始码是1;报警主机的起始码是0。设置错误时,错误码会现实11.
    lpDeviceUser NET_DVR_ALARM_DEVICE_USER 类,返回配置信息
    返回值 true为成功,false为失败
  2. 声明变量类:NET_DVR_ALARM_DEVICE_USER

    如果HCNetSDK.cs中不存在,需自己手动添加,添加时一定要参考HCNetSDK.h文件

    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct NET_DVR_ALARM_DEVICE_USER
    
        public Int64 dwSize;                 // 结构体大小
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = NAME_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sUserName;    // 用户名
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sPassword;    // 密码
        NET_DVR_IPADDR struUserIP;                    /* 用户IP地址(为0时表示允许任何地址) */
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)]
        public byte[] byMACAddr;            /* 物理地址 */
        public byte byUserType; // 0-普通用户(操作员) 1-管理员用户 2-安装员用户 3-制造商用户
        public byte byAlarmOnRight;         // 布防权限
        public byte byAlarmOffRight;        // 撤防权限
        public byte byBypassRight;          // 旁路权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = MAX_RIGHT, ArraySubType = UnmanagedType.I1)]
        public byte[] byOtherRight;  // 其他权限
        // 0 -- 日志权限
        // 1 -- 重启关机
        // 2 -- 参数设置权限
        // 3 -- 参数获取权限
        // 4 -- 恢复默认参数权限
        // 5 -- 警号输出权限
        // 6 -- PTZ 控制权限
        // 7 -- 远程升级权限
        // 8 -- 远程预览
        // 9 -- 远程手动录像
        // 10 -- 远程回放
        // 11 -- 消警
        // 12 -- 强制布防
        // 13 -- 永久旁路
        // 14 -- 添加更改个人授权代码
        // 15 -- 调试模式
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetPreviewRight;    // 远程可以预览的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetRecordRight;    // 远程可以录像的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetPlaybackRight; // 远程可以回放的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetPTZRight;        // 远程可以PTZ的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        //BYTE    byPriority;                                        // 优先级,0xff-无,0--低,1--中,2--高
        //无(表示不支持优先级的设置)
        //低(默认权限:包括远程回放,远程查看日志和状态,远程关机/重启)
        //中(包括远程控制云台,远程手动录像,远程回放,语音对讲和远程预览,本地备份,本地/远程关机/重启)
        //高(管理员)
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sOriginalPassword;        // 原始密码
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sKeypadPassword;        // 键盘密码
        public byte[] byUserEnabled;        // 用户是否开启使用:0-无效,1-开启,2-不开启
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 135, ArraySubType = UnmanagedType.I1)]
        public byte[] byRes2;                  // 保留字节
    
    

调用代码

uint error = 0;
// 声明NET_DVR_ALARM_DEVICE_USER变量
CHCNetSDK.NET_DVR_ALARM_DEVICE_USER alarmDeviceUser = new CHCNetSDK.NET_DVR_ALARM_DEVICE_USER();
// 调用获取配置信息方法
if(CHCNetSDK.NET_DVR_GetAlarmDeviceUser(userId, 1, ref alarmDeviceUser))
	//返回成功
else
	//查看错误码
	error = CHCNetSDK.NET_DVR_GetLastError();

门禁/报警主机设置密码

方法及参数

  1. 使用方法

    1. CHCNetSDK.NET_DVR_GetAlarmDeviceUser同上

    2. NET_DVR_SetAlarmDeviceUser(userId, 1, ref alarmDeviceUser)

      [DllImport(@"..\\..\\runtime\\hk\\HCNetSDK.dll")]
      public static extern bool NET_DVR_SetAlarmDeviceUser(int lUserID, int lUserIndex, ref NET_DVR_ALARM_DEVICE_USER lpDeviceUser);
      
      参数 说明
      lUserID 登录时返回的句柄
      lUserIndex 门禁:admin默认为1
      报警主机:默认从0开始
      lpDeviceUser 需要设置的用户参数
      返回值 true为成功,false为失败

步骤:

通过NET_DVR_GetAlarmDeviceUser方法获得用户参数后,将密码和原始密码分别赋值给sPassword和sOriginalPassword,然后调用NET_DVR_SetAlarmDeviceUser方法即可。

注意:返回的sPassword参数为空,是无法获得到密码的

代码实现:

// 门禁设置密码
CHCNetSDK.NET_DVR_ALARM_DEVICE_USER alarmDeviceUser = new CHCNetSDK.NET_DVR_ALARM_DEVICE_USER();
// 调用获取配置信息方法
CHCNetSDK.NET_DVR_GetAlarmDeviceUser(userId, 1, ref alarmDeviceUser);
// 设置新密码
Encoding.UTF8.GetBytes("a7777777").CopyTo(alarmDeviceUser.sPassword, 0);
// 原始密码
Encoding.UTF8.GetBytes("a88888888").CopyTo(alarmDeviceUser.sOriginalPassword, 0);
bool b = CHCNetSDK.NET_DVR_SetAlarmDeviceUser(userId, 1, ref alarmDeviceUser);
uint error = CHCNetSDK.NET_DVR_GetLastError();

当出现错误码为11时,请注意是否为struct类型中设置的变量长度不对,例如sUserName的长度应设置为32,而自己设置成了64。

具体数值请参考:SDK中头文件夹的HCNetSDK.h文件。

海康摄像SDK开发笔记:海康威视网络摄像头SDK介绍与模块功能

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/1116396032

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:三方库开发技术


前言

  视频监控、人脸识别等应用中经常使用到摄像头,当前占据主流视频监控摄像头就是海康和大华两家,都可通过自家的sdk或者是onvif方式使用和控制摄像头。
  本文章讲解海康的sdk方式。


海康

  海康(海康威视)是以视频为核心的智能物联网解决方案和大数据服务提供商,在视频行业是当前实打实的老大哥,当然还有大华,其他不多做介绍。

海康设备网络SDK下载

  下载地址:https://www.hikvision.com/cn/download_61.html
  在这里插入图片描述
  在ubuntu16.04 x86_64上开发,下载SDK_Linux64版本,可查看详细描述,右上角下载:
  在这里插入图片描述
  点击下载:
  在这里插入图片描述
  解压后:
  在这里插入图片描述
  海康威视SDK自带QtDemo,不过是qt4.7版本的,笔者使用qt5版本。


海康SDK概述与使用流程

初始化SDK

  海康sdk有其固有的使用流程,如下图:
  在这里插入图片描述

初始化SDK(NET_DVR_Init)

  对整个网络SDK系统的初始化,内存预分配等。

设置连接超时时间(NET_DVR_SetConnectTime)可选

  设置SDK中的网络连接超时时间,不调用则使用默认值。

异常回调函数(NET_DVR_SetDVRMessage或NET_DVR_SetExceptionCallBack_V30)

  sdk中大部分模块的功能是异步异常,海康提供此接口用于接收预览、报警、回放、透明通道和语音对讲等模块发生异常信息。用户可以在初始化 SDK 后就设置该回调函数,在应用层对各个模块异常消息的接收和处理。

从解析服务器获得设备的 IP 地址(NET_DVR_GetDVRIPByResolveSvr_EX)

  该接口提供一种在仅知道设备名称(或 DDNS 域名)或者序列号的情况下,从解析服务器获得设备 IP 地址的方法。如:当前设备是通过拨号上网方式获取到动态 IP 地址,而运行了我公司 IPServer 软件的服务器即为解析服务器或者设备注册到我公司 DDNS 服务器上,我们可以通过此接口输入服务器的地址、设备的名称或序列号等信息查询该设备的 IP 地址。(注意:由此看来不能达到没有任何配置的情况下,直接使用该函数搜索到局域网内的所有摄像头信息)。

用户注册设备(NET_DVR_Login_V30)

  实现用户的注册功能,注册成功后,返回的用户 ID 作为其他功
能操作的唯一标识, SDK 允许最大注册用户数为 512 个。就设备而言, V3.0 以上版本支持的设备允许有 32 个注册用户名,而且同时最多允许 128 个用户注册; V3.0 以下版本支持的设备允许有 16 个注册用户名,而且同时最多允许 128 个用户注册。
  登录后才可进行功能其他功能的调用(除了报警模块不需要登录)。

释放SDK(NET_DVR_Cleanup)

  不再使用sdk后,释放其使用的资源。

SDK功能模块

  在这里插入图片描述

预览模块

  从设备取实时码流,解码显示以及播放控制等功能,同时支持软解码和解码卡解码。

回放和下载模块

  可以通过按时间和按文件名的方式远程回放或者下载设备的录像文件,后续可以进行解码或者存储。同时还支持断点续传功能(需要设备支持)。

参数配置模块

  设置和获取设备的参数,主要包括设备参数、网络参数、通道压缩参数、串口参数、报警参数、异常参数、交易信息和用户配置等参数信息。

远程设备维护模块

  实现关闭设备、重启设备、恢复默认值、远程硬盘格式化、远程升级和配置文件导入/导出等维护工作。

语音对讲转发模块

  语音对讲转发模块:实现和设备的语音数据对讲和语音数据获取,音频编码格式可以指定。

报警模块

  报警模块:处理设备上传的各种报警信号。报警分为“布防”和“监听”两种方式,在采用监听方式并且不 需要获取用户 ID 的情况下,报警模块可以无需进行“用户注册”操作步骤。

透明通道模块

  透明通道模块:透明通道是将 IP 数据报文解析后直接发送到串行口的一种技术。实际上起到了延伸串行设备控制距离的作用。可利用 IP 网络控制多种串行设备,如控制解码器、矩阵、报警主机、门禁、仪器仪表等串行设备,对用户来说,只看到点对点传输,无须关心网络传输过程,所以称为串口透明通道。SDK提供485和232串口作为透明通道功能,其中要将 232 串口作为透明通道使用,首先必须在232串口的配置信息(NET_DVR_RS232CFG)中将工作模式选为透明通道,这样232串口才可作为透明通道使用。

云台控制模块

  云台控制模块:实现对云台的基本操作、预置点、巡航、轨迹和透明云台的控制。SDK将云台控制分为两种模式:一种是通过图像预览返回的句柄进行控制;另一种是无预览限制,通过用户注册ID号进行云台控制。

IP通道概念与相关说明

模拟输入

  DVR 视频输入接模拟摄像机,其通道称为模拟通道; 混合型 DVR、 NVR 等设备支持 IPC 接入,通道称IP 通道(或者数字通道),配置相关参数时需调用 IP 接入配置参数来进行资源的获取和重新分配。

模拟通道个数

  客户端通过注册设备(NET_DVR_Login_V30)返回的设备信息 NET_DVR_DEVICEINFO_V30 获取模拟通道个数(byChanNum)、模拟通道起始通道号(byStartChan)和设备支持的最大 IP 通道数(byIPChanNum + byHighDChanNum * 256)、数字通道起始通道号(byStartDChan)。

通道号

  从 byStartChan 到 byStartChan + byChanNum - 1 对应为模拟通道的通道号,IP 通道的通道号为 byStartDChan到 byStartDChan + (byIPChanNum + byHighDChanNum * 256) - 1。 DVR 只有模拟通道, NVR 只有 IP 通道,混合型 DVR 同时支持模拟通道和 IP 通道。

单设备的多IP通道

  如果设备支持 IP 通道个数大于 0,则可以通过远程参数配置接口 NET_DVR_GetDVRConfig(配置命令:NET_DVR_GET_IPPARACFG_V40)可以获取得到设备详细的 IP 资源信息(NET_DVR_IPPARACFG_V40),包括模拟通道是否禁用(byAnalogChanEnable)、 IP 通道个数(dwDChanNum)、 IP 通道起始通道号(dwStartDChan)、 IP 通道取流模式、 IP 通道有效状态和在线状态等。通过远程参数配置接口NET_DVR_SetDVRConfig(配置命令: NET_DVR_SET_IPPARACFG_V40)可对设备进行 IP 资源配置,包括添加、修改、删除 IP 通道等。

报警

  混合型 DVR 或 NVR 的 IP 报警输入和报警输出的通道是在音视频 IP 通道资源分配好后,由设备自动分配的。 如果要对 IP 报警参数进行配置,首先通过命令 NET_DVR_GET_IPALARMINCFG_V40NET_DVR_GET_IPALARMOUTCFG_V40 获取 IP 报警输入资源(NET_DVR_IPALARMINCFG_V40) 和 IP 报警输出资源(NET_DVR_IPALARMOUTCFG_V40)。 然后通过命令 NET_DVR_SET_ALARMINCFG_V40 可以配置报警数相关参数(NET_DVR_ALARMINCFG_V40),包括报警输入名称、报警器类型、布防时间、联动方式等,通过命令 NET_DVR_SET_ALARMOUTCFG_V30 可以配置报警输出相关参数(NET_DVR_ALARMOUTCFG_V30),比如报警输出名称、布防时间、输出报警延时等。 相关接口:NET_DVR_GetDVRConfigNET_DVR_SetDVRConfig


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/1116396032

以上是关于海康威视SDK的主要内容,如果未能解决你的问题,请参考以下文章

海康威视SDK

海康威视SDK

海康摄像SDK开发笔记:海康威视网络摄像头SDK介绍与模块功能

海康摄像SDK开发笔记:海康威视网络摄像头SDK介绍与模块功能

java如何通过海康威视SDK捕捉ip摄像头流?

Unity3D开发之——海康威视摄像机SDK集成