本文主要是博主使用海康SDK进行人流量统计的摸索过程,在这里简单记录一下。

查询文档,能实现人流量统计大概有两种方式,报警或者监听,

这边我选择了监听方式,NET_DVR_StartListen_V30 这个接口,启动监听,它可以接收设备主动上传的报警信息并且支持多线程。

我们需要编写一个回调函数来接受数据(处理业务逻辑),

NET_DVR_ALARMER 是一个报警信息结构体,这边需要 COMM_ALARM_PDC 这个类型的数据,其实是一个宏,用来判断接受数据的类型,这里对应的结构体为NET_DVR_PDC_ALRAM_INFO 具体参数可以查阅文档。到这里这里大概对于SDK的调用有个了解。那么开始动手。

首先创建一个人流量demo ,导入SDK必要头文件以及相应的资源文件。

(ps:这里很多dll并不需要)

直接上代码:

 1 #include <stdio.h>
2 #include <iostream>
3 #include "HCNetSDK.h"
4 using namespace std;
5
6 void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void*pUser)
7 {
8
9 cout << "进入回调" << endl;//判断一下没有进入回调 记得在设备那边设置回调的地址和端口不然会无法进入回调
10 NET_DVR_PDC_ALRAM_INFO struPdcALramInfo;//数据结构体
11 memcpy(&struPdcALramInfo, pAlarmInfo, sizeof(NET_DVR_PDC_ALRAM_INFO));
12 switch (lCommand)//消息类型
13 {
14 cout << lCommand << endl;
15 case COMM_ALARM_PDC:
16 {
17 if (struPdcALramInfo.byMode == 0)
18 {
19 //测试显示数据
20 cout << "当前时间:" << struPdcALramInfo.uStatModeParam.struStatFrame.dwRelativeTime << endl;
21 cout << "进来人数:" << struPdcALramInfo.dwEnterNum << endl;
22 cout << "离开人数" << struPdcALramInfo.dwLeaveNum << endl;
23 break;
24 }
25
26 }
27 default:break;
28 }
29 }
30 void main() {
31
32 NET_DVR_Init();// 初始化
33 NET_DVR_SetConnectTime(2000, 1);//设置连接时间与重连时间
34 NET_DVR_SetReconnect(10000, true);
35 LONG lUserID;// 注册设备
36 NET_DVR_DEVICEINFO_V30 struDeviceInfo;
37 char ip[32] = "192.168.x.64";//设备的IP地址 需要和电脑端ip在同一个网段
38 char user[32] = "xxx";//登录名
39 char userPass[32] = "xxx";//密码 不需要多说了吧
40
41 lUserID = NET_DVR_Login_V30(ip, 8000, user, userPass, &struDeviceInfo);//这里端口号为8000
42 if (lUserID < 0)
43 {
44 printf("Login error, %d\n", NET_DVR_GetLastError());//如果登录失败,这里会有原因的,可查看文档对症下药
45 NET_DVR_Cleanup();
46 return;
47 }
48 else
49 {
50 cout<<"Login success lUserID:"<< lUserID <<endl;
51 }
52
53 char localIP[16] = "192.168.x.60";//本地的Ip 设置回调用的
54
55 NET_DVR_NETCFG_V30 myNETCFG;//配置报警主机和端口
56 memcpy(&(myNETCFG.struAlarmHostIpAddr.sIpV4), localIP, sizeof(myNETCFG.struAlarmHostIpAddr.sIpV4));//内存拷贝
57 cout << myNETCFG.struAlarmHostIpAddr.sIpV4 << endl;//可以忽略
58 myNETCFG.wAlarmHostIpPort =8000;
59 BOOL isSuccess = NET_DVR_SetDVRMessageCallBack_V30(MessageCallback, &myNETCFG);//设置报警回调函数
60 if (isSuccess)
61 {
62 cout << "设置回调成功" << endl;
63 }
64 LONG lHandle;//启用监听
65 lHandle = NET_DVR_StartListen_V30(NULL, 8000, MessageCallback, NULL);
66 if (lHandle < 0)
67 {
68 printf("NET_DVR_StartListen_V30 error, %d\n", NET_DVR_GetLastError());
69 NET_DVR_Logout(lUserID);
70 NET_DVR_Cleanup();
71 return;
72 }
73 Sleep(5000);//这里是为了测试所以写了个休眠卡主线程也可以理解为监听时长
74 if (!NET_DVR_StopListen_V30(lHandle))//结束监听
75 {
76 printf("NET_DVR_StopListen_V30 error, %d\n", NET_DVR_GetLastError());
77 NET_DVR_Logout(lUserID);
78 NET_DVR_Cleanup();
79 return;
80 }
81 NET_DVR_Logout(lUserID);//注销用户
82 NET_DVR_Cleanup(); //释放 SDK 资源
83 return;
84 }

实时人流量监测——海康威视sdk初体验的更多相关文章

  1. OPhone SDK初体验

    OPhone SDK初体验 write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 背景说明 中国伟大的垄断龙头,世界上也是顶尖的中移动最 ...

  2. nRF51822 SDK初体验

    作为两家BLE芯片大厂之一,nordic不像TI那么开放,nordic的开发资料是很难找的. 今天有幸得到nordic的BLE芯片nRF51822的SDK,看了一下.   首先,nordic号称协议栈 ...

  3. 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验

    [阿里云产品公测]消息队列服务MQS java SDK 机器人应用初体验 作者:阿里云用户啊里新人   初体验 之 测评环境 由于MQS支持外网访问,因此我在本地做了一些简单测试(可能有些业余),之后 ...

  4. Apache Beam入门及Java SDK开发初体验

    1 什么是Apache Beam Apache Beam是一个开源的统一的大数据编程模型,它本身并不提供执行引擎,而是支持各种平台如GCP Dataflow.Spark.Flink等.通过Apache ...

  5. Microsoft IoT Starter Kit 开发初体验

    1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...

  6. 【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

    [阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实 ...

  7. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  8. 痞子衡嵌入式:MCUXpresso Config Tools初体验(Pins, Clocks, Peripherals)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso Config Tools三大件(Pins, Clocks, Peripherals). 不知道大家有没有这样的感受 ...

  9. 【微服务】Nacos初体验

    SpringCloud - Nacos初体验 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...

随机推荐

  1. 【第4题】 什么是https

    https是基于http和SSL/TLS实现的一个协议,他可以保证在网络上传输的数据都是加密的,从而保证数据安全. 接下来我们从http协议开始,提出想法并逐步进行分析,最终实现Https. 1. h ...

  2. css3/sass 样式记录

    css3 width: calc(50% - 10px) sass 1.奇偶行 .classNameA { background:red; &:nth-child(even) { backgr ...

  3. 剑指Offer-1.二维数组中的查找(C++/Java)

    题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  4. Ubuntu下的录GIF神器——Peek

    最近一直在找Ubuntu下面录GIF好用方便的软件一直没找到,很多都是要获取录屏四角的坐标,现在终于找到了,就是我们的录GIF神器——Peek. 1 获取Peek的ppa源 sudo add-apt- ...

  5. Velocity与Jsp、Freemarker的对比

    在java领域,表现层技术主要有三种:jsp.freemarker.velocity.jsp是大家最熟悉的技术 优点: 1.功能强大,可以写java代码 2.支持jsp标签(jsp tag) 3.支持 ...

  6. Ubuntu上的apt/apt-get等命令的实质意义和区别

    Ubuntu上的apt/apt-get等命令的实质意义和区别 一.前言 在使用apt和apt-get命令的时候我们常常会疑惑这两者有什么区别,因为大多数时间这两个命令能做很多相同的事情. 二.APT/ ...

  7. (三十九)golang--反序列化

    反序列化:是指将json字符串反序列化成原来的数据类型. import ( "encoding/json" "fmt" ) type monster struc ...

  8. golang基础之第一个go程序

    编写 Hello World 创建文件 hello.go,不写入任何内容.按照如下的命令尝试进行编译 $ go run hello.go 将会打印出如下错误: package main: hello. ...

  9. gradle 多模块Springboot项目 compile project引用其他模块的坑

    本来以为子项目中compile project(':xxx'),就能引用其他模块了,因为之后idea也没在引用时候标红 然而我gradle build的时候,居然各种找不到引用模块的类 最后在stac ...

  10. Java代码开发之《安全规约》

    安全规约 1. [强制]隶属于用户个人的页面或者功能必须进行权限控制校验.     说明:防止没有做水平权限校验就可随意访问.修改.删除别人的数据,比如查看他人的私信内容.修改 他人的订单. 2. [ ...