海康一体机调用接口

本文详细介绍了如何使用Java调用海康威视的SDK进行设备初始化、登录以及设置字符编码,特别关注了NET_DVR_SET_CARD方法用于下发卡片的过程。通过NET_DVR_StartRemoteConfig和NET_DVR_StopRemoteConfig来实现远程配置并监控下发状态,确保操作的正确执行。
摘要由CSDN通过智能技术生成

场景:

java调用海康一体机下发卡
pom依赖:
在这里插入图片描述

<dependency>
            <groupId>examples</groupId>
            <artifactId>examples</artifactId>
            <version>1.0.0</version>
            <systemPath>${lib.path}/examples.jar</systemPath>
            <scope>system</scope>
        </dependency>
        <dependency>
            <groupId>jna</groupId>
            <artifactId>jna</artifactId>
            <version>1.0.0</version>
            <systemPath>${lib.path}/jna.jar</systemPath>
            <scope>system</scope>
        </dependency>
        <dependency>
            <groupId>com.hikvision.ga</groupId>
            <artifactId>artemis-http-client</artifactId>
            <version>1.1.3</version>
        </dependency>

调用一体机必须先初始化,增加设备字符集统一使用utf8

static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
static {
        hCNetSDK.NET_DVR_Init();//SDK初始化
    }
    static int iCharEncodeType = 0;//设备字符集(全局统一确保设备编码一致)

设备调用成功回返回一个句柄,封装句柄为全局使用(多个设备区分)

//SDK启用写日志
        hCNetSDK.NET_DVR_SetLogToFile(3, IsecureCommunity.logWritePath, false);
        //注册
        HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息

        m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
        System.arraycopy(deviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, deviceIP.length());

        m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
        System.arraycopy(username.getBytes(), 0, m_strLoginInfo.sUserName, 0, username.length());

        m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
        System.arraycopy(password.getBytes(), 0, m_strLoginInfo.sPassword, 0, password.length());

        m_strLoginInfo.wPort = (short) port;
        m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是
        m_strLoginInfo.write();

        HCNetSDK.NET_DVR_DEVICEINFO_V40 strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
        int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, strDeviceInfo);
        if (lUserID == -1)
        {
            log.info("登录失败,错误码为"+hCNetSDK.NET_DVR_GetLastError());
        }
        else
        {
            log.info("登录成功!");
            iCharEncodeType = strDeviceInfo.byCharEncodeType;
        }
        return lUserID;

提示:这里填写问题的分析:

例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。


已卡为中心,下发卡使用NET_DVR_SET_CARD方法下发命令

HCNetSDK.NET_DVR_CARD_COND strCardCond = new HCNetSDK.NET_DVR_CARD_COND();
        strCardCond.read();
        strCardCond.dwSize = strCardCond.size();
        strCardCond.dwCardNum = 1;  //下发一张
        strCardCond.write();
        Pointer ptrStrCond = strCardCond.getPointer();

        int setCardCfgHandle = hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_SET_CARD, ptrStrCond, strCardCond.size(),null ,null);

通过长连接NET_DVR_SendWithRecvRemoteConfig读取返回状态区分数据是否下发完成。
通过hCNetSDK.NET_DVR_StopRemoteConfig(setCardCfgHandle获取最终状态判断连接是否完成。

hCNetSDK.NET_DVR_StopRemoteConfig(setCardCfgHandle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值