首页 > 其他分享 >获取门禁记录方式-实时获取

获取门禁记录方式-实时获取

时间:2023-05-27 09:12:48浏览次数:30  
标签:CHCNetSDK 实时 获取 布防 NET 门禁 struAcsAlarmInfo DVR

实时获取

开启门禁布防,每次门禁有记录产生都会主动发送信息,其中布防的方式有两种,一种是布防后只能开启一个监听,该监听海康的4200软件也在使用,因此建议在使用期间不要开启4200;另一种监听能开启多个,不过感觉这个不靠谱,建议用第一个,毕竟4200都在用。

注意:使用实时获取时,人员编号不要有字母,例如“001”是可以的,但是“ry001”不行,因为在回调函数中只能获取到dwEmployeeNo变量而不能获取byte数组的变量信息,例如编号是“ry001”时,dwEmployeeNo为空。注意!注意!注意!

流程
  1. NET_DVR_Init(初始化)

  2. NET_DVR_SetDVRMessageCallBack_V50(设置报警回调函数)

    1. 引用方法
    [DllImport(@"..\..\runtime\hk\HCNetSDK.dll")]
    public static extern bool NET_DVR_SetDVRMessageCallBack_V50(int iIndex, MSGCallBack fMessageCallBack, IntPtr pUser);
    
    1. 参数说明

      参数 说明
      iIndex 默认为1
      fMessageCallBack CHCNetSDK.MSGCallBack的回调函数
      pUser IntPtr.Zero
      返回值 true:成功;false:失败
    2. 代码举例

      CHCNetSDK.MSGCallBack m_falarmData一定不能为局部变量

      //设置报警回调函数,m_falarmData不能为局部变量,因为一旦设置为局部变量,回调函数则无法调用
      m_falarmData = new CHCNetSDK.MSGCallBack(MsgCallback);
      if (!CHCNetSDK.NET_DVR_SetDVRMessageCallBack_V50(1, m_falarmData, IntPtr.Zero))
      {
          _logerror.Error("回调函数初始化失败");
      }
      

      MsgCallback类会在“步骤6”中体现

  3. NET_DVR_Login_V40(登录获得UserId)

  4. NET_DVR_SetupAlarmChan_V41(设置布防)

    目的是布防,并且获得布防句柄,alarmHandle

    1. 引用方法
    [DllImport(@"..\..\runtime\hk\HCNetSDK.dll")]
    public static extern int NET_DVR_SetupAlarmChan_V41(int lUserID, ref NET_DVR_SETUPALARM_PARAM lpSetupParam);
    
    1. 参数说明

      参数 说明
      lUserID 登录句柄
      lpSetupParam 声明即可,一般不用赋值,如果赋值请参看海康SDK说明
      返回值 布防句柄,后期撤防时需要该句柄进行撤防
    2. 代码举例

      // 设置布防参数
      CHCNetSDK.NET_DVR_SETUPALARM_PARAM struSetupAlarmParam = new CHCNetSDK.NET_DVR_SETUPALARM_PARAM();
      struSetupAlarmParam.dwSize = (uint)Marshal.SizeOf(struSetupAlarmParam);
      //布防优先级 0最高,1次之,我自己设置的是1
      struSetupAlarmParam.byLevel = 1;
      // 上传报警信息类型,只要设备不太老建议使用1,因为旧版本的回调函数是全局的,如果多类设备布防时会有问题
      struSetupAlarmParam.byAlarmInfoType = 1;
      // 布防类型:0-客户端布防,1-实时布防,和4200抢占该状态
      struSetupAlarmParam.byDeployType = (byte)0;
      // 布防
      int alarmHandle = CHCNetSDK.NET_DVR_SetupAlarmChan_V41(userId, ref struSetupAlarmParam);
      
  5. 门禁产生记录(有人刷脸/指纹)

    人为刷一次已经布防的门禁,让他产生记录

  6. 进入回调函数,通过判断lCommand为CHCNetSDK.COMM_ALARM_ACS时,开始解析门禁记录

    产生记录后会触发MsgCallback方法

    private void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
    

    参数说明

    参数 说明
    lCommand 命令
    pAlarmer 报警设备信息
    pAlarmInfo 报警记录信息

    代码举例

    public static readonly object _mj = new object();
    private void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
    {
        switch (lCommand)
        {
            case CHCNetSDK.COMM_ALARM_ACS:
                //进入门禁触发该方法
                lock (_mj)
                {
                    ProcessCommAlarmACS(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
                }
                System.GC.Collect();
                break;
            // 报警主机触发该方法    
            case CHCNetSDK.COMM_ALARMHOST_CID_ALARM://报警主机CID报警上传
                break;
            default:
                break;
        }
    }
    

    ProcessCommAlarmACS方法

    private void ProcessCommAlarmACS(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
    {
        try
        {
            // 登录句柄
            int userId = pAlarmer.lUserID;
            // 门禁记录保存的entity,可自行设置
            AcessLogEntity acessLogEntity = new AcessLogEntity();
            // 将pAlarmInfo转换为NET_DVR_ACS_ALARM_INFO,门禁记录的struct
            CHCNetSDK.NET_DVR_ACS_ALARM_INFO struAcsAlarmInfo = (CHCNetSDK.NET_DVR_ACS_ALARM_INFO)Marshal.PtrToStructure(pAlarmInfo,
                typeof(CHCNetSDK.NET_DVR_ACS_ALARM_INFO));
            // 参见主动获取中的“AcessLogEntity.GetMinorType”
            if (AcessLogEntity.GetMinorType(struAcsAlarmInfo.dwMinor).Length < 1)
            {
                return;
            }
            char[] csTmp = new char[256];
    		// 获得门禁记录时间
            acessLogEntity.AccessTime = String.Format("{0,4}-{1:D2}-{2} {3:D2}:{4:D2}:{5:D2}", 
                                                      struAcsAlarmInfo.struTime.dwYear,
                                                      struAcsAlarmInfo.struTime.dwMonth,
                                                      struAcsAlarmInfo.struTime.dwDay,
                                                      struAcsAlarmInfo.struTime.dwHour,
                                                      struAcsAlarmInfo.struTime.dwMinute,
                                                      struAcsAlarmInfo.struTime.dwSecond);
    		// 获得人员编号,这里的类型是uint,人员管理中的人员编号一定要设置为整形,不能带字母
            uint pin = struAcsAlarmInfo.struAcsEventInfo.dwEmployeeNo;
            acessLogEntity.Name = Person[pin].Name;
            acessLogEntity.Verify = AcessLogEntity.GetMinorType(struAcsAlarmInfo.dwMinor);
            acessLogEntity.Pin = String.Format("{0}", pin);
            // 后续还有其他逻辑,因和实时获取记录无关,因此删除
        }
        catch (Exception ex)
        {
            _logerror.Error("门禁报错", ex);
        }
    
    }
    
  7. NET_DVR_CloseAlarmChan_V30(撤防)

    1. 引用方法
    [DllImport(@"..\..\runtime\hk\HCNetSDK.dll")]
    public static extern int NET_DVR_Login_V40(ref NET_DVR_USER_LOGIN_INFO pLoginInfo, ref NET_DVR_DEVICEINFO_V40 lpDeviceInfo);
    
    1. 参数说明

      参数 说明
      pLoginInfo 登录时需要的信息:
      sDeviceAddress:设备地址
      wPort:端口号
      sUserName:用户名
      sPassword:密码
      lpDeviceInfo 声明即可,一般不用赋值,如果赋值请参看海康SDK说明
      返回值 登录句柄,当返回值不等于-1时即为登录成功,该句柄后期会一直使用
    2. 代码举例

  8. NET_DVR_Logout(注销)

  9. NET_DVR_Cleanup(结束)

标签:CHCNetSDK,实时,获取,布防,NET,门禁,struAcsAlarmInfo,DVR
From: https://www.cnblogs.com/wanghun315/p/17436249.html

相关文章

  • SpringMVC —— 关于获取请求参数的注解
    1、@RequestParam的3个作用?①起别名②设置默认值③给list集合赋值2、@RequestParam、@RequestBody、@PathVariable分别用于获取什么样格式的请求数据??号传值的参数json对象格式参数路径传值参数......
  • 操作系统(3.4.2)--实时调度算法的分类
    按调度方式分类:非抢占式调度算法、抢占式调度算法1.非抢占式调度算法1)非抢占式轮转调度算法调度程序每次选择队列中的第一个任务投入运行。当时间片结束后,便把它挂在轮转队列的末尾,等待下次调度运行,而调度程序再选择下一个(队首)任务运行。这种调度算法可获得数秒至数十秒的响应时......
  • 获取门禁记录方式-主动获取
    主动获取类似于获取门禁记录,通过代入的查询条件获取范围内的记录信息,使用该方式时需要注意时间范围不要重复或者获取数据后有查重操作,否则会出现重复的情况。流程中的1,2,6,7的代码请参见《获取门禁记录方式-公用方法》流程NET_DVR_Init(初始化)NET_DVR_Login_V40(登录获得Us......
  • 门禁获取门禁记录-公用部分说明
    公用部分NET_DVR_Init(初始化)boolCHCNetSDK.NET_DVR_Init()初始化海康组件返回值:true:初始化成功false:失败,失败原因:海康SDK分32位和64位,项目中目标平台一定要与SDK一致(项目右键->属性->生成->目标平台)DllImport的HCNetSDK.dll路径不对,如果使用绝对路径也不对时,路径不要......
  • EasyDSS如何调用接口获取录像MP4文件合成状态?
    EasyDSS互联网视频云服务的视频直播/点播功能支持视频采集、编辑、上传、媒体资源管理、自动化转码处理、分发服务等,帮助用户快速搭建拥有极致观看体验、安全可靠的视频直播点播应用。有用户反馈在调用接口时,会出现合成中的字样,并不知道合成的录像MP4文件是否已经合成完毕。今天我......
  • Shopee|Lazada电商平台api接口,接入获取商品评论|根据关键词取商品列表API说明示例
     Shopee和Lazada是东南亚地区广受欢迎的电商平台。它们的模式非常类似,都是以C2C(消费者到消费者)、B2C(企业到消费者)和O2O(线上到线下)为主要销售模式。用户可以在平台上购买商品或者将自己的商品出售给其他用户。这些平台提供了较高的使用便利性,比如支持多种支付方式、商品搜索......
  • Lazada平台如何获取信息并调用呢?
    LazadaisoneofthelargestonlinemarketplacesinSoutheastAsia.Itoffersawidevarietyofproductsacrosscategoriessuchaselectronics,fashion,homeandliving,andhealthandbeauty.OneofthekeyreasonsforitssuccessisitsAPIsorApplicat......
  • java连接TD数据库获取数据
    1.目录结构2.创建springboot的项目,添加pom依赖3.配置数据库连接池4.配置数据库映射实体5.配置dao层6.书写对应的xml格式的对应这里举例一个查询最新的一个数据7.Service层8.Controller层通过接口返回给前端9.初始化数据库10.通过接口获取lastone可以......
  • FLEX实践—获取当前窗口大小
       在FLEX中获取当前窗口的长度与宽度使用下面的方法:   Application.application.width   Application.application.height    在设置弹出窗口的长与宽的时候可以根据比例来设置,而不用将其长与宽设置为固定值。这样做的好处是考虑到了IE窗口的大小,通过比例设置可......
  • js获取抖音视频信息配合服务器自动下载
    引入axios方便发送请求解析当前页面获取视频信息把数据发送到服务器注意端口号,1024以上浏览器可能会拦截,认为不安全重复发送,防止连续重复发送,手动清除定时器点击查看代码//导入axios.posletscript=document.createElement('script');script.src="https://unpkg.......