Linux下利用海康HK SDK进行二次开发c++

下载海康SDK

海康替换平台

下载下来以后组成这样的结构(按照需求来)

编写main代码

#include <iostream>
#include <cstring>
#include <thread> // 添加头文件以使用 sleep_for
using namespace std;
#include "HCNetSDK.h"

static const char sdkPath[] = "./";              // SDK路径
static const char logPath[] = "./SdkLog_Cpp/";   // 日志路径
static const char certificatePath[] = "./cert/"; // 证书路径

参考动态库加载说明.txt中C++设置库路径的方法
void SetLogToFile(const char *logPath, int logToFile)
{
    NET_DVR_LOCAL_SDK_PATH sdkPathStruct;
    strcpy(sdkPathStruct.sPath, "/home/daxian/Desktop/test");

    NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SDK_PATH, &sdkPathStruct);
    
    NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_LIBEAY_PATH, (void *)"/home/daxian/Desktop/test/libcrypto.so.1.1");
    NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SSLEAY_PATH, (void *)"/home/daxian/Desktop/test/libssl.so.1.1");

    NET_DVR_SetLogToFile(4, const_cast<char *>(logPath), logToFile);
}

// 获取视场角的函数
void GetGisInfo(LONG lHandle)
{
    NET_DVR_STD_CONFIG std_config = {0};
    DWORD channel = 1; // 你可能需要根据实际情况更改通道号

    NET_DVR_GIS_INFO gis_info_tmp = {0};
    std_config.lpStatusBuffer = NULL;
    std_config.dwStatusSize = 0;
    std_config.lpOutBuffer = &gis_info_tmp;
    std_config.dwOutSize = sizeof(NET_DVR_GIS_INFO);
    std_config.byDataType = 0;
    std_config.lpCondBuffer = &channel;
    std_config.dwCondSize = sizeof(channel);
    if (!NET_DVR_GetSTDConfig(lHandle, NET_DVR_GET_GISINFO, &std_config))
    {
        cerr << "Failed to get GIS information" << endl;
        cerr << NET_DVR_GetErrorMsg() << endl;
        // 这里可以添加错误处理逻辑
        return;
    }

    cout << "fHorizontalValue: " << gis_info_tmp.fHorizontalValue << endl;
    cout << "fVerticalValue: " << gis_info_tmp.fVerticalValue << endl;
    cout << "fVisibleRadius: " << gis_info_tmp.fVisibleRadius << endl;
    cout << "fMaxViewRadius: " << gis_info_tmp.fMaxViewRadius << endl;
    cout << "H: " << gis_info_tmp.fHorizontalValue << endl;
    cout << "V: " << gis_info_tmp.fVerticalValue << endl;
    cout<<"----------------------------------------------------------------"<<endl;
}

int main()
{
    NET_DVR_Init();

    // 设置日志输出到指定目录
    SetLogToFile(logPath, false);

    NET_DVR_USER_LOGIN_INFO struLoginInfo;
    NET_DVR_DEVICEINFO_V40 struDeviceInfo;

    strncpy(struLoginInfo.sDeviceAddress, "192.168.xx.xx", strlen("192.168.xx.xx") + 1);
    strncpy(struLoginInfo.sUserName, "Xxx", strlen("Xxx") + 1);
    strncpy(struLoginInfo.sPassword, "xxxxx", strlen("xxxxx") + 1);
    struLoginInfo.bUseAsynLogin = 0;
    struLoginInfo.byUseTransport = 0;
    struLoginInfo.wPort = 18800;

    // 打印设备地址等信息
    cout << "Device Address: " << struLoginInfo.sDeviceAddress << endl;
    cout << "Device Port: " << struLoginInfo.wPort << endl;

    LONG lHandle = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo);
    if (lHandle < 0)
    {
        cerr << NET_DVR_GetErrorMsg() << endl;
        return -1;
    }

    cout << "Login success. Handle: " << lHandle << endl;

    // 主循环
    while (true)
    {
        // 获取视场角信息
        GetGisInfo(lHandle);

        // 休眠2秒
        std::this_thread::sleep_for(std::chrono::seconds(2));
    }

    // 注意:这里没有调用 NET_DVR_Logout 和 NET_DVR_Cleanup,你可能需要在程序退出前添加这些调用。

    return 0;
}

编译

g++ main.cpp -L./ -L./HCNetSDK -lhcnetsdk -lHCCore -Wl,-rpath=./:./HCNetSDK -o main

运行

./main

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值