海康威视SDK控制台程序consoleDemo获取视频通道参数

陈拓 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

猜你喜欢

转载自blog.csdn.net/chentuo2000/article/details/119963580