海康威视SDK控制台程序consoleDemo

陈拓 2021/08/10-2020/08/10

1. 下载海康威视SDK

见《海康威视SDK实例QtDemo显示NVR视频窗口(Linux+Qt)》

https://zhuanlan.zhihu.com/p/395178052

https://blog.csdn.net/chentuo2000/article/details/119299045

2. 开发环境

我的开发环境:PC机(Win10)+工控机(Ubuntu)+海康NVR+海康摄像头

lsb_release -a

Win10操作Linux见《Win10命令窗口的SSH和SFTP操作》

https://zhuanlan.zhihu.com/p/403558589

https://blog.csdn.net/chentuo2000/article/details/119918637

和《Ubuntu18.04和Win10共享文件夹》

https://zhuanlan.zhihu.com/p/397913390

https://blog.csdn.net/chentuo2000/article/details/119539502

3. 复制consoleDemo到Ubuntu。

如果所有者和组不是当前登录用户,要改变所有者和组:

sudo chown -R ccdc:ccdc consoleDemo/

查看consoleDemo目录

4. 复制库文件

  • 查看readme.txt

在构建源代码之前:

  1. 请将SDK/lib目录下所有的库文件(.so)拷贝到consoleDemo/Linux64/lib
  2. 进入目录consoleDemo/Linux64/proj,执行make命令。
  • 复制库文件

  • 安装tree命令

  • 查看目录结构

tree linux64/

5. 编译Demo

进入目录consoleDemo/Linux64/proj

  • 编译

执行make命令

在lib目录下生成了可执行文件sdkTest:

为方便测试我们修改一下Makefile文件。

将EXE = ../lib/sdkTest改为:EXE = ./hkConsole

再编译make

这样生成的可执行文件就在本地了:

6. 连接NVR

见《Ubuntu18.04网络配置》

https://zhuanlan.zhihu.com/p/398167001

https://blog.csdn.net/chentuo2000/article/details/119564109

设备可以是NVR或者DVR,我用NVR。

我的NVR参数

我的摄像头参数

海康威视DS-IPC-B12-I4mm

7. 修改程序代码

将连接参数设置成我们自己的。

  • C++程序

  • 编辑consolemain.cpp

修改网络连接参数:

nano src/consoleMain.cpp

如图将下面3句:

改为

找到其他要修改的地方:

grep -r "10.8.98.80" src

如同修改consolemain.cpp一样,一一修改。

nano src/Voice.cpp

nano src/GetStream.cpp

nano src/Alarm.cpp

nano src/ConfigParams.cpp

nano src/CapPicture.cpp

nano src/playback.cpp

nano src/playback.cpp

再编译make。

8. 运行Demo

  • 运行

./hkConsole

程序可以运行了。

登录设备:Login dev 192.168.137.2:8000.

界面上有太多的调试日志信息,可以改变信息显示等级,我的修改如下:

修改consoleMain.cpp

将NET_DVR_SetLogToFile(3, "./sdkLog");中的3改为0,保存。

日志的等级(默认为0):0-表示关闭日志,1-表示只输出ERROR错误日志,2-输出ERROR错误信息和DEBUG调试信息,3-输出ERROR错误信息、DEBUG调试信息和INFO普通信息等所有信息。你可以根据自己的需要设置日志等级。

编译

警告,在"./sdkLog"前面加上类型。

再编译就没有警告了。

运行

画面干净。

程序虽然可以运行了,但是所列出的功能基本上都不能用,需要根据设备的具体情况修改。

9. 修改连接

例子程序中多个功能程序单独初始化连接设备,下面我们把初始化放在主程序中,以后只要将用户ID作为参数传递到各个功能模块程序就可以了。

  • 修改consoleMain.cpp
#include <stdio.h>
#include <iostream>
#include "GetStream.h"
#include "public.h"
#include "ConfigParams.h"
#include "Alarm.h"
#include "CapPicture.h"
#include "playback.h"
#include "Voice.h"
#include "tool.h"
#include <string.h>
using namespace std;

void Demo_SDK_Version();
void Demo_SDK_Ability();

char * iIP = (char *)"192.168.137.2";
WORD wPort = 8000;
char * iUserName = (char *)"admin";
char * iPassword = (char *)"xxxxxxxx";

int lUserID = -1;

// 初始化
int init() {
    NET_DVR_Init(); 
    Demo_SDK_Version(); // 显示SDK版本
    NET_DVR_SetLogToFile(0, (char*)"./sdkLog");

    printf("\nIP %s\n", iIP);
    printf("Port %d\n", wPort);
    printf("UserName %s\n", iUserName);
    printf("Password %s\n", iPassword);

    //Login device
    NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
    NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
    struLoginInfo.bUseAsynLogin = false; // false=0,同步登录

    struLoginInfo.wPort = wPort;
    memcpy(struLoginInfo.sDeviceAddress, iIP, NET_DVR_DEV_ADDRESS_MAX_LEN);
    memcpy(struLoginInfo.sUserName, iUserName, NAME_LEN);
    memcpy(struLoginInfo.sPassword, iPassword, NAME_LEN);

    lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40); //接口返回-1表示登录失败,其他值表示返回的用户ID值。用户ID具有唯一性,后续对设备的操作都需要通过此ID实现。
    if (lUserID < 0) {
        printf("pyd---Login error, %d\n", NET_DVR_GetLastError());
        if(NET_DVR_GetLastError()  == 7) {
            printf("连接设备失败。设备不在线或网络原因引起的连接超时等。\n");
        }

        NET_DVR_Cleanup();
        return HPR_ERROR;
    }
    cout << "\nlUserID is " << lUserID << endl;

	DWORD bytesReturned = 0;
	NET_DVR_DEVICECFG devCfg;
	devCfg.dwSize = sizeof(NET_DVR_DEVICECFG);
	bool resCode = NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_DEVICECFG, -1, &devCfg, sizeof(NET_DVR_DEVICECFG), &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);
		//释放SDK资源
		NET_DVR_Cleanup();
		::getchar();
		return -1;
	}
    cout << "设备信息: " << endl;
	std::cout << "设备名: " << devCfg.sDVRName << ", 序列号: " << devCfg.sSerialNumber << ", 设备ID号: " << devCfg.dwDVRID << ", 设备类型: " << (int)devCfg.byDVRType << std::endl;

    return 0;
}

int main() {
    int iok = init();
    if (iok == 0) cout << "连接设备化成功!" << endl;
    else cout << "连接设备失败!" << endl;

    char cUserChoose = 'r';

    if (lUserID < 0) {
        printf("pyd---Login error, %d\n", NET_DVR_GetLastError());
        printf("Press any key to quit...\n");
        cin>>cUserChoose;

        NET_DVR_Cleanup();
        return HPR_ERROR;
    }

    while ('q' != cUserChoose) {
        printf("\n");
        printf("Input 1, Test GetStream\n");
        printf("      2, Test Configure params\n");
        printf("      3, Test Alarm\n");
        printf("      4, Test Capture Picture\n");
        printf("      5, Test play back\n");
        printf("      6, Test Voice\n");
        printf("      7, Test SDK ability\n");
        printf("      8, Test tool interface\n");
        printf("      q, Quit.\n");
        printf("Input:");

        cin>>cUserChoose;
        switch (cUserChoose) {
        case '1':
            Demo_GetStream_V30(lUserID); //Get stream.
            break;
        case '2':
            Demo_ConfigParams(lUserID); // 设备参数
            break;
        case '3':
            Demo_Alarm();         //Alarm & listen.
            break;
        case '4':
            Demo_Capture(lUserID);
            break;
        case '5':
            Demo_PlayBack((int)lUserID);     //record & playback
            break;
        case '6':
            Demo_Voice();
            break;
        case '7':
            Demo_SDK_Ability();
            break;
		case '8':
			Demo_DVRIPByResolveSvr();
			break;
        default:
            break;
        }
    }

    //logout
    // NET_DVR_Logout(lUserID);
    NET_DVR_Logout_V30(lUserID); //注销用户
    NET_DVR_Cleanup(); //释放SDK资源
    return 0;
}

void Demo_SDK_Ability() {
    NET_DVR_Init();
    NET_DVR_SDKABL struSDKABL = {0};
    if (NET_DVR_GetSDKAbility(&struSDKABL))
    {
        printf("SDK Max: %d\n", struSDKABL.dwMaxRealPlayNum);
        NET_DVR_Cleanup();
        return;
    }

    NET_DVR_Cleanup();
    return;
}

void Demo_SDK_Version() {
    unsigned int uiVersion = NET_DVR_GetSDKBuildVersion();

    char strTemp[1024] = {0};
    sprintf(strTemp, "HCNetSDK V%d.%d.%d.%d\n", \
        (0xff000000 & uiVersion)>>24, \
        (0x00ff0000 & uiVersion)>>16, \
        (0x0000ff00 & uiVersion)>>8, \
        (0x000000ff & uiVersion));
    printf("%s", strTemp);
}
  • 编译运行

接下来我们要取得摄像头的视频通道号,见

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

https://zhuanlan.zhihu.com/p/404390272

https://blog.csdn.net/chentuo2000/article/details/119963580


http://www.niftyadmin.cn/n/1733077.html

相关文章

Opera鼠标左键拖曳在后台打开链接和双击关闭标签的解决方法

1 鼠标左键拖曳在后台打开链接和双击关闭标签的解决方法★鼠标左键拖曳在后台打开链接Opera:config#Enable Drag填入数值“255”Opera:config#New Window勾选“Open New Window in Background”和“New Window” ★鼠标左键双击关闭标签Opera:config#Doubleclick to Close Tab勾…

css3动画之圆形运动轨迹

css3中通过keyframes定义动画&#xff0c;animation设置动画属性&#xff0c;从而实现动画效果&#xff1b; 在animation属性当中&#xff0c;可以规定动画的名称、整个动画的运行时间、运动的速度曲线以及其延迟时间、播放次数等。 animation animation作为一个复合属性&am…

海康威视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。在上文的基础上本文…

安装win7后鼠标一卡一卡

安装win7后鼠标一卡一卡的2009年11月01日 星期日 下午 02:04SL 400 AQC 安装win7后鼠标一卡一卡的win7 鼠标一卡一卡的解决办法winR打开运行窗口&#xff0c;输入services.msc&#xff0c;然后找到windows search服务&#xff0c;把它停掉

海康威视SDK控制台程序consoleDemo获取码流

陈拓 2021/08/28-2020/08/28 1. 概述 在《海康威视SDK控制台程序consoleDemo》 https://zhuanlan.zhihu.com/p/403903892 https://blog.csdn.net/chentuo2000/article/details/119939573 一文中我们已经编译成功了海康威视SDK的控制台程序consoleDemo。 在《海康威视SDK控…

box-shadow的应用技巧

一、box-shadow的参数解析 box-shadow:none; box-shadow: h-shadow v-shadow blur spread color inset; box-shadow参数解析 值描述none默认值&#xff0c;元素没有任何阴影效果。h-shadow阴影水平偏移量&#xff0c;其值可以是正负值。如果取正值&#xff0c;则阴影在元素的右…

jQuery对象与dom对象的转换

http://www.ccvita.com/192.html最近在闲暇时间用jQuery搞了一个多文件上传的东东&#xff0c;顺便写点笔记。 一直以来对于通过jQuery方式获取的对象使不能直接使用JavaScript的一些方法的&#xff0c;开始的时候不理解&#xff0c;现在此案知道&#xff0c;原来jQuery 获得的…

海康威视SDK控制台程序consoleDemo将实时码流保存为视频文件mp4

陈拓 2021/08/28-2020/08/29 1. 概述 在《海康威视SDK控制台程序consoleDemo》 https://zhuanlan.zhihu.com/p/403903892 https://blog.csdn.net/chentuo2000/article/details/119939573 一文中我们已经编译成功了海康威视SDK的控制台程序consoleDemo。 在《海康威视SDK控…