windows ubuntu 大华直连抓图

// 大华直连抓图.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <dhnetsdk.h>
#include <dhconfigsdk.h>
#include <avglobal.h>
#include <string.h>

void CALLBACK DisConnectFunc(LONG lLoginID, char* pchDVRIP, LONG nDVRPort, DWORD
    dwUser)
{
    printf("Call DisConnectFunc: lLoginID[0x%x]/n", lLoginID);
}

void CALLBACK SnapRev(LLONG lLoginID, BYTE* pBuf, UINT RevLen, UINT EncodeType, DWORD CmdSerial, LDWORD dwUser)
{
    std::cout << "recvice data" << std::endl;
    /* Save image original file */
    FILE* stream;
    if ((stream = fopen((const char*)"mpeg4.JPG", "wb")) != NULL)
    {
        int numwritten = fwrite(pBuf, sizeof(char), RevLen, stream);
        fclose(stream);
    }
}
#pragma comment(lib,"C:/Users/60551/source/repos/大华直连抓图/大华直连抓图/lib/dhnetsdk.lib")
#pragma comment(lib, "C:/Users/60551/source/repos/大华直连抓图/大华直连抓图/lib/dhconfigsdk.lib")

int main()
{
    BOOL bNetSDKInitFlag = CLIENT_Init((fDisConnect)DisConnectFunc, 0);
    if (FALSE == bNetSDKInitFlag)
    {
        printf("Initialize client SDK fail; /n");
        return -1;
    }
    else {
        printf("Initialize client SDK sucessful; /n");
    }
    NET_PARAM stuNetParm = { 0 };
    stuNetParm.nConnectTime = 3000;
    CLIENT_SetNetworkParam(&stuNetParm);
    NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY stInparam;
    memset(&stInparam, 0, sizeof(stInparam));// 初始化结构体对象
    stInparam.dwSize = sizeof(stInparam);// 结构体大小
    stInparam.emSpecCap = EM_LOGIN_SPEC_CAP_TCP;
    strncpy(stInparam.szIP, "0.0.00.00", sizeof(stInparam.szIP) - 1);
    strncpy(stInparam.szUserName, "admin", sizeof(stInparam.szUserName) - 1);
    strncpy(stInparam.szPassword, "123456", sizeof(stInparam.szPassword) - 1);
    stInparam.nPort = 37777;
    
    stInparam.emSpecCap = EM_LOGIN_SPEC_CAP_TCP;
    NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY stOutparam;//登录接口函数输出参数
    memset(&stOutparam, 0, sizeof(stOutparam));// 清空结构体对象
    stOutparam.dwSize = sizeof(stOutparam);z

    LLONG LOGID = CLIENT_LoginWithHighLevelSecurity(&stInparam, &stOutparam);
    if (LOGID != 0) {
        std::cout << "login successfule!" << std::endl;
        CLIENT_SetSnapRevCallBack(&SnapRev, NULL);
        SNAP_PARAMS SnapCapture_params;
        SnapCapture_params.Quality = 6;
        SnapCapture_params.Channel = 24;
        SnapCapture_params.mode = 0;
        SnapCapture_params.CmdSerial = 0;
        if (FALSE != CLIENT_SnapPictureEx(LOGID, &SnapCapture_params)) {
            std::cout << "抓图成功!" << std::endl;
            Sleep(30000); //回调函数 要加等待保证抓图完毕
        }
        else {
            std::cout << "抓图失败!" << std::endl;
            printf("Last Error[%x]\n", CLIENT_GetLastError());

        }
    }

    else {
        std::cout << "login code" << LOGID << std::endl;
        std::cout << "登陆失败!" << std::endl;
    }
        // 清理初始化资源
    if (TRUE == bNetSDKInitFlag)
    {
        CLIENT_Logout(LOGID);
        CLIENT_Cleanup();

    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Ubuntu 上调用大华SDK抓图,你需要先安装大华SDK并进行配置。这里提供一个简单的步骤: 1. 下载大华SDK并解压。在解压后的文件夹中,你会看到一个名为`Linux-x64`的文件夹。 2. 进入`Linux-x64`文件夹,你会看到一个名为`libdh*`的文件夹和一些`*.so`文件。 3. 将`libdh*`文件夹路径添加到系统库搜索路径中。可以将以下代码添加到`~/.bashrc`文件中: ``` export LD_LIBRARY_PATH=/path/to/Linux-x64/libdh*: $LD_LIBRARY_PATH ``` 4. 安装Python SDK。在解压后的文件夹中,你会看到一个名为`Linux-x64_SDK_GCC40`的文件夹。进入该文件夹,运行以下命令安装Python SDK: ``` sudo ./Install.sh ``` 5. 在Python脚本中调用大华SDK。以下是一个简单的示例代码: ```python import os from ctypes import * from time import sleep lib_path = "/path/to/Linux-x64/libdhnetsdk.so" lib_dh = CDLL(lib_path) # 初始化SDK lib_dh.CLIENT_Init(None, None) # 登录设备 device_info = lib_dh.DEVICE_NET_INFO_EX() device_info.szIP = b"192.168.1.100" device_info.nPort = 8000 device_info.szUserName = b"admin" device_info.szPassword = b"123456" device_info.nChannelCount = 1 device_info.nType = 0 device_info.nHttps = 0 login_info = lib_dh.NET_DEVICEINFO_Ex() login_info.nError = -1 login_handle = lib_dh.CLIENT_LoginEx2(device_info, byref(login_info)) # 抓图 file_name = b"test.jpg" file_path = os.path.abspath(file_name) config = lib_dh.SNAP_PARAMS() config.Channel = 0 config.Quality = 3 config.mode = 0 snap_handle = lib_dh.CLIENT_SnapPictureEx(login_handle, byref(config), file_path, None) # 释放资源 lib_dh.CLIENT_Logout(login_handle) lib_dh.CLIENT_Cleanup() print("抓图成功!") ``` 在上面的代码中,`lib_path`变量应该是`libdhnetsdk.so`文件的绝对路径。`DEVICE_NET_INFO_EX`结构体中需要填写设备的IP地址、端口号、用户名和密码等信息。在调用`CLIENT_LoginEx2`函数时,需要传递一个指向`NET_DEVICEINFO_Ex`结构体的指针,该结构体用于接收登录信息。在调用`CLIENT_SnapPictureEx`函数时,需要传递一个指向`SNAP_PARAMS`结构体的指针,该结构体用于设置抓图的参数。最后,通过`CLIENT_Logout`和`CLIENT_Cleanup`函数释放资源。 希望这个简单的示例可以帮助你开始在Ubuntu上调用大华SDK进行抓图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值