天天看點

海康威視NVR擷取網絡攝像頭報警資訊 C++ 實作

       平台: windows 64, VS2010

       先決條件:NVR已經添加了網絡攝像頭,NVR有固定的IP位址,NVR和運作的程式的PC在同一區域網路内

      檢視海康的SDK中 程式設計引導-》報警子產品流程,這裡有兩種方式方式:布放、監聽模式;這兩個子產品都需要都需要設定報警條件,這個報警條件我們就在網絡攝像頭的網頁管理中設定,同時網絡攝像頭需要設定關聯方式要選中 上傳中心,這個上傳中心就是NVR,其中的報警事件的設定這裡就不闡述了,比較簡單。

海康威視NVR擷取網絡攝像頭報警資訊 C++ 實作

   第一種方式比較簡單,不過需要注意的是,NVR的“布放”報警方式有可能擷取不到,這是因為NVR本身沒有報警,NVR隻是得到了網絡攝像頭的報警資訊,即隻是有了報警輸入,而MessageCallback是報警輸出的時候觸發的,解決方法:在網絡配置-》進階配置中設定NVR的報警中心,有報警中心就會觸發回調函數了

海康威視NVR擷取網絡攝像頭報警資訊 C++ 實作

      代碼如下:

#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中的程式設計引導-》遠端裝置維護子產品流程     擷取報警資訊比較簡單,希望對你有幫助

繼續閱讀