海康威视NVR获取网络摄像头报警信息 C++ 实现

       平台: windows 64, VS2010

       先决条件:NVR已经添加了网络摄像头,NVR有固定的IP地址,NVR和运行的程序的PC在同一局域网内

      查看海康的SDK中 编程引导-》报警模块流程,这里有两种方式方式:布放、监听模式;这两个模块都需要都需要设置报警条件,这个报警条件我们就在网络摄像头的网页管理中设置,同时网络摄像头需要设置联动方式要选中 上传中心,这个上传中心就是NVR,其中的报警事件的设置这里就不阐述了,比较简单。

   第一种方式比较简单,不过需要注意的是,NVR的“布放”报警方式有可能获取不到,这是因为NVR本身没有报警,NVR只是得到了网络摄像头的报警信息,即只是有了报警输入,而MessageCallback是报警输出的时候触发的,解决方法:在网络配置-》高级配置中设置NVR的报警中心,有报警中心就会触发回调函数了

        

      代码如下:

     
#include 
#include 
#include "Windows.h"
#include "HCNetSDK.h"

#pragma comment( lib, "HCNetSDK.lib")

using namespace std;

int iNum=0;
BOOL CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser)
{
    int i=0;
    char filename[100];
    FILE *fSnapPic=NULL;
    FILE *fSnapPicPlate=NULL;
	
	cout<<" lCommand "<     

     报警监听方式和布放方式一样需要设置NVR的报警中心,和SDK中示例代码基本一致,代码如下:

   
#include 
#include 
#include "Windows.h"
#include "HCNetSDK.h"

#pragma comment( lib, "HCNetSDK.lib")

using namespace std;

int iNum=0;
void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser)
{
    int i=0;
    char filename[100];
    FILE *fSnapPic=NULL;
    FILE *fSnapPicPlate=NULL;
	NET_DVR_ALARMER alaremDeviceInfo;
	 memcpy(&alaremDeviceInfo, pAlarmer, sizeof(NET_DVR_ALARMER));
	 cout<<" 报警的NVR地址 "<

   获取报警信息只能获取到很少的信息:报警类型、NVR中网络摄像头的通道号、NVR的IP地址;其中报警类型中的智能侦测不能详细涉及到是区域入侵还是越界,如果需要详细得到时间、具体时间,暂时想到的方法是查询日志,查询日志请查看SDK中的编程引导-》远程设备维护模块流程

    获取报警信息比较简单,希望对你有帮助

你可能感兴趣的:(C++)