陈拓 2021/08/27-2020/08/27
1. 概述
在《海康威视SDK控制台程序consoleDemo》
https://zhuanlan.zhihu.com/p/403903892
https://blog.csdn.net/chentuo2000/article/details/119939573
一文中我们已经编译成功了海康威视SDK的控制台程序consoleDemo。在上文的基础上本文我们来获取NVR的通道参数。
2. 重写ConfigParams.cpp
将ConfigParams.cpp原来的全部代码删除,替换成下面的代码:
#include "ConfigParams.h"
#include <stdio.h>
#include <string.h>
#include "public.h"
#include <iostream>
using namespace std;
DWORD dwChannels[8] = {0};
DWORD dwStartDChan = 0;
int Demo_ConfigParams(LONG lUserID) {
Demo_IPParaCfg_v31(lUserID);
return HPR_OK;
}
// 查找在线通道号
int Demo_IPParaCfg_v31(LONG lUserID) {
int iRet = -1;
DWORD uiReturnLen = 0;
LONG lChannel = 0;
NET_DVR_IPPARACFG_V40 struParams = {0};
struParams.dwSize = sizeof(struParams);
//get
iRet = NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_IPPARACFG_V40, lChannel, \
&struParams, sizeof(NET_DVR_IPPARACFG_V40), &uiReturnLen);
if (!iRet) {
printf("pyd---NET_DVR_GetDVRConfig NET_DVR_GET_IPPARACFG_V31 error.%d\n", NET_DVR_GetLastError());
return HPR_ERROR;
} else {
//printf("\n NET_DVR_GetDVRConfig OK!\n");
dwStartDChan = struParams.dwStartDChan;
std::cout << "\n设备支持的总组数: " << struParams.dwGroupNum << ", 数字通道个数: " << struParams.dwDChanNum << ", 起始数字通道: " << dwStartDChan << "\n" << std::endl;
for (DWORD i = 0; i < struParams.dwDChanNum; i++) {
switch (struParams.struStreamMode[i].byGetStreamType) {
case 0:
if (struParams.struStreamMode[i].uGetStream.struChanInfo.byEnable) {
int byIPID = struParams.struStreamMode[i].uGetStream.struChanInfo.byIPID;
int byIPIDHigh = struParams.struStreamMode[i].uGetStream.struChanInfo.byIPIDHigh;
int iDevInfoIndex = byIPIDHigh * 256 + byIPID - 1 - lChannel * 64;
dwChannels[i] = dwStartDChan + i;
std::cout << "端口号: " << i + 1 << ", 通道号: " << dwChannels[i] << ", IP: " << struParams.struIPDevInfo[iDevInfoIndex].struIP.sIpV4 << ", 在线" << std::endl;
} else {
int byIPID = struParams.struStreamMode[i].uGetStream.struChanInfo.byIPID;
int byIPIDHigh = struParams.struStreamMode[i].uGetStream.struChanInfo.byIPIDHigh;
int iDevInfoIndex = byIPIDHigh * 256 + byIPID - 1 - lChannel * 64;
std::cout << "端口号: " << i + 1 << ", IP: " << struParams.struIPDevInfo[iDevInfoIndex].struIP.sIpV4 << ", 离线" << std::endl;
}
break;
case 1:
if (struParams.struStreamMode[i].uGetStream.struPUStream.struStreamMediaSvrCfg.byValid) {
printf("IP channel %d connected with the IP device by stream server.\n", i + 1);
printf("IP of stream server: %s, IP of IP device: %s\n", struParams.struStreamMode[i].uGetStream.\
struPUStream.struStreamMediaSvrCfg.struDevIP.sIpV4, struParams.struStreamMode[i].uGetStream.\
struPUStream.struDevChanInfo.struIP.sIpV4);
}
break;
}
}
}
return HPR_OK;
}
3. 编译、运行
编译运行操作见概述中提到的《海康威视SDK控制台程序consoleDemo》一文。
在菜单中选择2,运行结果:
在这里我们获取到了摄像头对应的通道号,有了通道号我们就可以获取码流了。
见《海康威视SDK控制台程序consoleDemo获取码流》
https://zhuanlan.zhihu.com/p/404556277
https://blog.csdn.net/chentuo2000/article/details/119971526