第一次使用VC++二次开发海康威视设备,记录一下,直接代码

`#include <stdio.h>
#include <WinSock.h>
#include <mysql.h>
#include
#include
#include “Windows.h”
#include “HCNetSDK.h”
using namespace std;

//时间解析宏定义
#define GET_YEAR(time) (((time)>>26) + 2000)
#define GET_MONTH(time) (((time)>>22) & 15)
#define GET_DAY(time) (((time)>>17) & 31)
#define GET_HOUR(time) (((time)>>12) & 31)
#define GET_MINUTE(time) (((time)>>6) & 63)
#define GET_SECOND(time) (((time)>>0) & 63)

MYSQL mysql; //mysql连接
MYSQL_RES* res; //一个结果集结构体
MYSQL_ROW row; //char** 二维数组,存放一条条记录

const char DataBase_UserName[] = “homestead”; //数据库用户名username
const char DataBase_Password[] = “secret”; //数据库密码,填自己的密码
const char DataBase_Host[] = “192.168.10.10”; //数据库连接地址

const char DataBase_Name[] = “XXX”; //database name
unsigned int DataBase_Port = xxxx;

bool ConnectDatabase(); //函数申明
void FreeConnect(); //释放资源

bool ConnectDatabase()
{
//初始化mysql
mysql_init(&mysql); //连接mysql,数据库
//中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
if (!(mysql_real_connect(&mysql, DataBase_Host, DataBase_UserName, DataBase_Password, DataBase_Name, DataBase_Port, NULL, 0)))
{
printf(“Error connecting to database:%s\n”, mysql_error(&mysql));
return false;
}
else
{
//MessageBoxA(NULL, “连接MYSQL数据成功!”, “消息”, MB_OK);
printf(“Connected…\n”);
return true;
}
}

void FreeConnect()
{
//释放资源
//mysql_free_result(res);
mysql_close(&mysql);
}

BOOL CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void* pUser)
{
//以下代码仅供参考,实际应用中不建议在该回调函数中直接处理数据保存文件
//例如可以使用消息的方式(PostMessage)在消息响应函数里进行处理,具体可参考ClientDemo。

switch (lCommand)
{
case COMM_ALARM_PDC: //客流量统计报警信息
{NET_DVR_PDC_ALRAM_INFO struPDCAlarmInfo = { 0 };memcpy(&struPDCAlarmInfo, pAlarmInfo, sizeof(struPDCAlarmInfo));if (struPDCAlarmInfo.byMode == 0) //0-实时统计结果,自上次清零动作(包括设备重启、手动清零或每天零点自动清零)后开始计算的实时数量{NET_DVR_TIME  struAbsTime = { 0 };struAbsTime.dwYear = GET_YEAR(struPDCAlarmInfo.uStatModeParam.struStatFrame.dwAbsTime);struAbsTime.dwMonth = GET_MONTH(struPDCAlarmInfo.uStatModeParam.struStatFrame.dwAbsTime);struAbsTime.dwDay = GET_DAY(struPDCAlarmInfo.uStatModeParam.struStatFrame.dwAbsTime);struAbsTime.dwHour = GET_HOUR(struPDCAlarmInfo.uStatModeParam.struStatFrame.dwAbsTime);struAbsTime.dwMinute = GET_MINUTE(struPDCAlarmInfo.uStatModeParam.struStatFrame.dwAbsTime);struAbsTime.dwSecond = GET_SECOND(struPDCAlarmInfo.uStatModeParam.struStatFrame.dwAbsTime);//设备IP、端口、通道、离开人数、进入人数、是否Smart报警、绝对时间printf("DevIP0:[%s]Port[%d]Channel[%d]single frame:Channel[%d]LeaveNum[%d]EnterNum[%d]Smart[%d]\AbsTime[%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d]\n", struPDCAlarmInfo.struDevInfo.struDevIP.sIpV4, \struPDCAlarmInfo.struDevInfo.wPort, struPDCAlarmInfo.struDevInfo.byChannel, \struPDCAlarmInfo.byChannel, struPDCAlarmInfo.dwLeaveNum, struPDCAlarmInfo.dwEnterNum, \struPDCAlarmInfo.bySmart, struAbsTime.dwYear, struAbsTime.dwMonth, struAbsTime.dwDay, \struAbsTime.dwHour, struAbsTime.dwMinute, struAbsTime.dwSecond);char sql[522] = "";sprintf_s(sql, "insert into hkws (enter,leave,obtime) values (%d,%d,%s);", struPDCAlarmInfo.dwEnterNum, struPDCAlarmInfo.dwLeaveNum, \to_string(struAbsTime.dwYear) + to_string(struAbsTime.dwMonth) + to_string(struAbsTime.dwDay) + to_string(struAbsTime.dwDay) + to_string(struAbsTime.dwHour) \+ to_string(struAbsTime.dwMinute) + to_string(struAbsTime.dwSecond));printf(sql);mysql_query(&mysql, sql);}if (struPDCAlarmInfo.byMode == 1) //1-周期统计结果,设定的统计周期内增加的数量,更新频率即为设定的统计周期(默认15分钟,最小1分钟,最大60分钟){NET_DVR_TIME  struStartTime = { 0 };NET_DVR_TIME  struEndTime = { 0 };struStartTime = struPDCAlarmInfo.uStatModeParam.struStatTime.tmStart;struEndTime = struPDCAlarmInfo.uStatModeParam.struStatTime.tmEnd;//设备IP、端口、通道、离开人数、进入人数、经过人数、是否Smart报警、开始时间、结束时间printf("DevIP1:[%s]Port[%d]Channel[%d]single frame:Channel[%d]LeaveNum[%d]EnterNum[%d]PassingNum[%d]Smart[%d]\StartTime[%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d]EndTime[%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d]\n",struPDCAlarmInfo.struDevInfo.struDevIP.sIpV4, struPDCAlarmInfo.struDevInfo.wPort, \struPDCAlarmInfo.struDevInfo.byChannel, struPDCAlarmInfo.byChannel, struPDCAlarmInfo.dwLeaveNum, \struPDCAlarmInfo.dwEnterNum, struPDCAlarmInfo.dwPassingNum, struPDCAlarmInfo.bySmart, struStartTime.dwYear, \struStartTime.dwMonth, struStartTime.dwDay, struStartTime.dwHour, struStartTime.dwMinute, \struStartTime.dwSecond, struEndTime.dwYear, struEndTime.dwMonth, struEndTime.dwDay, struEndTime.dwHour, \struEndTime.dwMinute, struEndTime.dwSecond);char sql[522] = "";sprintf_s(sql, "insert into hkws (`enter`,`leave`,`obtime`) values (%d,%d,'StartTime[%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d]');", struPDCAlarmInfo.dwEnterNum, struPDCAlarmInfo.dwLeaveNum, \struStartTime.dwYear,struStartTime.dwMonth, struStartTime.dwDay, struStartTime.dwHour, struStartTime.dwMinute, struStartTime.dwSecond);printf(sql);mysql_query(&mysql, sql);}//其他信息处理......break;
}default:
{printf("其他报警,报警信息类型: 0x%x\n", lCommand);break;
}
}return TRUE;

}

void main() {
ConnectDatabase();
//---------------------------------------
// 初始化
NET_DVR_Init();
//设置连接时间与重连时间
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);

//---------------------------------------
// 注册设备
LONG lUserID;//登录参数,包括设备地址、登录用户、密码等
NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 };
struLoginInfo.bUseAsynLogin = 0; //同步登录方式
strcpy_s(struLoginInfo.sDeviceAddress, "X.X.X.X"); //设备IP地址
struLoginInfo.wPort = 8000; //设备服务端口
strcpy_s(struLoginInfo.sUserName, "XXXX"); //设备登录用户名
strcpy_s(struLoginInfo.sPassword, "XXXXXXXXX"); //设备登录密码//设备信息, 输出参数
NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = { 0 };lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
if (lUserID < 0)
{printf("Login failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Cleanup();return;
}//设置报警回调函数
NET_DVR_SetDVRMessageCallBack_V31(MessageCallback, NULL);//启用布防
LONG lHandle;
NET_DVR_SETUPALARM_PARAM  struAlarmParam = { 0 };
struAlarmParam.dwSize = sizeof(struAlarmParam);
//其他报警布防参数不需要设置,不支持lHandle = NET_DVR_SetupAlarmChan_V41(lUserID, &struAlarmParam);
if (lHandle < 0)
{printf("NET_DVR_SetupAlarmChan_V41 error, %d\n", NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;
}Sleep(50000); //等待过程中,如果设备上传报警信息,在报警回调函数里面接收和处理报警信息//撤销布防上传通道
if (!NET_DVR_CloseAlarmChan_V30(lHandle))
{printf("NET_DVR_CloseAlarmChan_V30 error, %d\n", NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;
}
FreeConnect();
//注销用户
NET_DVR_Logout(lUserID);
//释放SDK资源
NET_DVR_Cleanup();
return;

}

`

VC++海康威视视频人数流量统计数据库连接相关推荐

  1. Opencv实战(一) 视频人数统计(C++ Opencv)前后背景分离方法

    在博客<视频人数统计(opencv)>中,作者使用的Absdiff帧差法降低背景影响,进而通过二值化,边缘化,滤波器,形态学变化,查找轮廓,轮廓面积控制,绘制轮廓等一系列方法完成了对样例图 ...

  2. OpenCV 视频人数统计研究

    最近有空研究了一下基于Opencv的视频人数统计.总结了一下,视频人数统计系统的工作流程主要包括以下几个部分: 1.视频捕获 从视频源(摄像头或视频文件)获取到视频图像数据. 2.目标提取(背景建模. ...

  3. C++ OpenCV相片视频人脸识别统计人数

    C++ OpenCV相片视频人脸识别统计人数 如需远程调试,可加QQ905733049由专业技术人员远程协助! 运行代码如下: #include <iostream> #include&l ...

  4. 安防智能视频平台EasyCVR后台界面流量统计显示问题的优化

    EasyCVR是一个集视频联网共享.存储.流媒体转发.视频转码.视频上云.智能分析等多种功能为一体的流媒体视频服务融合型平台.EasyCVR的接入协议十分广泛,包括主流标准协议国标GB28181.RT ...

  5. OpenCV视频识别检测人数跟踪统计

    Python+OpenCV视频识别检测人数跟踪统计 如需远程调试,可加QQ905733049由专业技术人员远程协助! 运行代码如下: import numpy as np import cv2 imp ...

  6. 新项目实操分析,用付费视频进行流量变现

    我们知道,互联网的发展,使得网民越来越多,不仅上网的用户在增多,上网的时间也逐年增加. 所以很多人都想做互联网的生意,因为互联网有足够的关注度和巨大的流量.而且,互联网项目属于网上创业,硬件门槛相对较 ...

  7. 北京大数据培训 | 电商用户行为分析之实时流量统计

    模块创建和数据准备 在 UserBehaviorAnalysis 下 新 建 一 个 maven module 作 为 子 项 目 , 命 名 为NetworkFlowAnalysis.在这个子模块中 ...

  8. php 开源 流量统计,5款开源的PHP网站流量统计应用程序

    下面是5款开源的PHP网站流量统计应用程序. piwik Piwik 是一套基于Php+MySQL技术构建的开源网站访问统计系统,前身是phpMyVisites.Piwik可以给你详细的统计信息,比如 ...

  9. 黄聪:PHP网站流量统计开源程序大全

    phpMyVisites phpMyVisites是一个网站流量统计系统,它能够提供非常详细的统计报告和高级图形报表.phpMyVisites不是一个Apache log分析工具,它建有自己的log. ...

最新文章

  1. python清空list_python如何删除list
  2. Shiro框架:缓存、session会话、自定义FormAuthenticationFilter、RemenberMe
  3. Go性能测试benchmark
  4. MySQL数据库基础(五)——SQL查询
  5. linux打开另一台linux的图形化,【工具大道】ssh登录Linux服务器,并显示图形化界面...
  6. qt坐标系统与布局的简单入门
  7. 实现标题条的显示与隐藏
  8. JeecgBoot 2.4 微服务正式版发布,基于SpringBoot的低代码平台
  9. 通过PyTorch中的可视化理解卷积神经网络
  10. 为了生产iPhone 12,富士康连国庆节也没假放了
  11. Spring源码:ApplicationContextInitializer
  12. python调用hive与java调用区别_python和hive结合使用
  13. 刪除主表中不存在記錄的從表資料
  14. poj 1753 Flip Game (高斯消元 + 枚举 自由变量)
  15. 联想电脑硬盘保护系统EDU8.0.1iso安装
  16. 4款简单实用的的服务器文件管理工具推荐
  17. Hyperscan 5.1.0 安装
  18. Windows 和 Linux 的免费媒体播放器 - SMPlayer
  19. hdu 5510 Bazinga KMP+暴力
  20. Word文档生成神器:开源项目poi.tl使用介绍

热门文章

  1. 2021银4 各大厂前端面试题分享
  2. 胡阳pyhton作业题--20150730
  3. 兄dei,作为程序员的你,这些一直接触的词都念对了吗?
  4. 傅连仲主编的《计算机应用基础》,学生教学论文,关于计算机应用基础课程标准研读的必要性相关参考文献资料-免费论文范文...
  5. 【优化理论与方法】线性规划的基本定理
  6. 数据结构(C语言版 严蔚敏著)——树
  7. html div文字竖向显示,css怎么让文字竖着?
  8. 算法研究之二叉树小球下落
  9. 不要盲目满足用户需求,造成过度设计
  10. 混凝土静力受压弹性模量试验计算公式_混凝土静力受压弹性模量试验机测试步骤...