使用海康SDK獲取NVR通道配置資訊(含通道名稱)
阿新 • • 發佈:2021-10-29
海康SDK
一:出發點
在一些視訊監控專案中經常需要對掛載在NVR下的攝像頭進行配置。
由於這些配置資訊在NVR裡已經存在,如果能將NVR中的通道配置資訊匯出,會大大減少前端的配置工作。
網上的通過海康SDK查詢NVR通道資訊的帖子很多,但是很多都不包含攝像頭的通道名稱,我在查閱了海康SDK的文件後使用C++實現了對通道名稱、使用者名稱、裝置IP地址的讀取。
現在把實現方式貼出來,希望對有需要的人提供些參考。
二:使用方法
1.NET_DVR_GetDVRConfig函式
三.主要程式碼:
四.輸出結果:
2.使用NET_DVR_GET_IPPARACFG引數獲取網路連線資訊,使用NET_DVR_GET_PICCFG_V30引數獲取通道名稱。
#include <iostream> #include "HCNetSDK.h" int main() { 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(struLoginInfo.sDeviceAddress, "192.168.20.106"); //裝置IP地址 struLoginInfo.wPort = 8000; //裝置服務埠 strcpy(struLoginInfo.sUserName, "admin"); //裝置登入使用者名稱 strcpy(struLoginInfo.sPassword, "111111hk"); //裝置登入密碼 //裝置資訊, 輸出引數 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 -1; } NET_DVR_IPPARACFG_V40 ipcfg; DWORD bytesReturned = 0; ipcfg.dwSize = sizeof(NET_DVR_IPPARACFG_V40); int iGroupNO = 0; bool resCode = NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_IPPARACFG_V40, iGroupNO, &ipcfg, sizeof(NET_DVR_IPPARACFG_V40), &bytesReturned); if (!resCode) { DWORD code = NET_DVR_GetLastError(); std::cout << "NET_DVR_GetDVRConfig failed " << NET_DVR_GetErrorMsg((LONG*)(&code)) << std::endl; NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return -1; } std::cout << "裝置組 " << ipcfg.dwGroupNum << " 數字通道個數 " << ipcfg.dwDChanNum << " 起始通道 " << ipcfg.dwStartDChan << std::endl << std::endl; for (int i = 0; i < ipcfg.dwDChanNum; i++) { NET_DVR_PICCFG_V30 channelInfo; bytesReturned = 0; channelInfo.dwSize = sizeof(NET_DVR_PICCFG_V30); int channelNum = i + ipcfg.dwStartDChan; NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_PICCFG_V30, channelNum, &channelInfo, sizeof(NET_DVR_PICCFG_V30), &bytesReturned); std::cout <<"通道號 "<< channelNum << "\t通道名稱 " << channelInfo.sChanName; std::cout << "\t使用者名稱 " << ipcfg.struIPDevInfo[i].sUserName << "\t密碼 " << ipcfg.struIPDevInfo[i].sPassword; std::cout << "\t裝置ID " << (int)ipcfg.struIPDevInfo[i].szDeviceID; std::cout << "\tip地址 " << ipcfg.struIPDevInfo[i].struIP.sIpV4 << "\t埠 " << ipcfg.struIPDevInfo[i].wDVRPort << std::endl; } //釋放SDK資源 NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return 0; }