4.海康威视

您所在的位置:网站首页 海康sdk错误码810 4.海康威视

4.海康威视

2023-12-12 17:23| 来源: 网络整理| 查看: 265

1. 准备 postman 接口测试工具spring boot 2. 添加NET_DVR_Login_V40注册登录接口

添加NET_DVR_Login_V40接口需要在HCNetSDK.java中添加

参考开发手册参数定义: 在这里插入图片描述 输入参数设定参考: 在这里插入图片描述 输出参数参考: 在这里插入图片描述 代码实现: 将HCNetSDK.java 继承的 Library修改为 StdCallLibrary,在StdCallLibrary已经继承了Library 然后添加如下代码:

public static final int NET_DVR_DEV_ADDRESS_MAX_LEN = 129; public static final int NET_DVR_LOGIN_USERNAME_MAX_LEN = 64; public static final int NET_DVR_LOGIN_PASSWD_MAX_LEN = 64; public static interface FLoginResultCallBack extends StdCallCallback{ public int invoke(int lUserID, int dwResult, NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser); } //NET_DVR_Login_V40()输入参数 public static class NET_DVR_USER_LOGIN_INFO extends Structure { public byte[] sDeviceAddress = new byte[NET_DVR_DEV_ADDRESS_MAX_LEN]; public byte byUseTransport; public short wPort; public byte[] sUserName = new byte[NET_DVR_LOGIN_USERNAME_MAX_LEN]; public byte[] sPassword = new byte[NET_DVR_LOGIN_PASSWD_MAX_LEN]; public FLoginResultCallBack cbLoginResult; public Pointer pUser; public boolean bUseAsynLogin; public byte[] byRes2 = new byte[128]; } // NET_DVR_Login_V40输出参数 public static class NET_DVR_DEVICEINFO_V40 extends Structure { public NET_DVR_DEVICEINFO_V30 struDeviceV30 = new NET_DVR_DEVICEINFO_V30(); public byte bySupportLock; public byte byRetryLoginTime; public byte byPasswordLevel; public byte byRes1; public int dwSurplusLockTime; public byte[] byRes2 = new byte[256]; } // NET_DVR_Login_V40接口添加 NativeLong NET_DVR_Login_V40(NET_DVR_USER_LOGIN_INFO pLoginInfo, NET_DVR_DEVICEINFO_V40 lpDeviceInfo); 2. 编写海康设备操作控制类 public class HIKDevice { public static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo;//设备信息 HCNetSDK.NET_DVR_IPPARACFG m_strIpparaCfg;//IP参数 public static FMSGCallBack_V31 fMSFCallBack_V31 = null; //回调函数务必设置成全局静态的,防止被JVM自动垃圾回收,导致收不到报警数据 //构造函数 public HIKDevice() { System.out.println("进入构造函数"); // 初始化SDK boolean initSuc = hCNetSDK.NET_DVR_Init(); if (initSuc != true) { System.out.println("初始化失败"); } // 设置连接时间与重连时间 hCNetSDK.NET_DVR_SetConnectTime(2000, 1); System.out.println("初始化SDK资源完成"); } /** * 初始化资源配置 */ public int initDevices(){ if(!hCNetSDK.NET_DVR_Init()) return 1;//初始化失败 return 0; } //销毁函数 @PreDestroy public void destroy() throws Exception { hCNetSDK.NET_DVR_Cleanup(); } //登录设备 public static HKResturnDTO loginDevice(String sDeviceIP, int iPort, String sUserName, String sPassWord) { NativeLong lUserID = new NativeLong(-1); // 用户句柄 //设备信息, 输出参数 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); 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(sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, sDeviceIP.length()); m_strLoginInfo.sUserName = new byte[hCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; System.arraycopy(sUserName.getBytes(), 0, m_strLoginInfo.sUserName, 0, sUserName.length()); m_strLoginInfo.sPassword = new byte[hCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; System.arraycopy(sPassWord.getBytes(), 0, m_strLoginInfo.sPassword, 0, sPassWord.length()); m_strLoginInfo.wPort = Short.parseShort(String.valueOf(iPort)) ; m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 m_strLoginInfo.write(); //注册设备 lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); HKResturnDTO dto = new HKResturnDTO(); dto.setDeviceIP(sDeviceIP); dto.setDevicePort(iPort); if (lUserID.intValue() System.out.println("注册成功,设备IP:"+sDeviceIP + " 端口:"+ iPort); dto.setErrorCode(0); dto.setUserId(lUserID.intValue()); dto.setNativeLong(lUserID); dto.setM_strDeviceInfo(m_strDeviceInfo); return dto; } } //注销设备 public String logoutDevice(int lUserID) { NativeLong nlUserID = new NativeLong(lUserID); if (!hCNetSDK.NET_DVR_Logout(nlUserID)) { System.out.println("注销失败,设备ID:"+ nlUserID.intValue() + "错误码:"+hCNetSDK.NET_DVR_GetLastError()); return "{\"result\":\"loginDevice Fail\",\"userID\":"+nlUserID.intValue()+",\"errorCode\":"+hCNetSDK.NET_DVR_GetLastError()+"}"; }else{ System.out.println("注销成功,设备ID:"+ nlUserID.intValue()); return "{\"result\":\"logoutDevice Success\",\"userID\":"+nlUserID.intValue()+",\"errorCode\":0}"; } } } 注解:1.NET_DVR_DEVICEINFO_V30 在这里插入图片描述注解:2.NET_DVR_Login_V40 与 NET_DVR_Login_V30区别 NET_DVR_Login_V40:支持同步,异步登录。并兼容了NET_DVR_Login_V30 NET_DVR_Login_V30:只支持同步登录 2. 设备登录 2.1 代码实现

在controller层调用设备登录方法

@RestController public class DeviceController { HIKDevice hikDevice; // 初始化海康设备操作类 DeviceController() { if (hikDevice == null) { hikDevice = new HIKDevice(); } } /* * 功能:登录设备 * 参数: * deviceIP-设备局域网IP地址 * devicePort-设备SDK服务端口 * userName-用户名 * passWord-密码 * */ @ApiOperation(value = "登录设备", notes = "登录设备") @PostMapping(value = "/loginDevice") @ResponseBody public Object loginDevice(@RequestBody JSONObject jsonPrama) { String deviceIP = jsonPrama.get("deviceIP").toString(); int devicePort = Integer.parseInt(jsonPrama.get("devicePort").toString()); String userName = jsonPrama.get("userName").toString(); String passWord = jsonPrama.get("passWord").toString(); String strRet = ""; HKResturnDTO dto = hikDevice.loginDevice(deviceIP, devicePort, userName, passWord); System.out.println(strRet); return ResponseUtil.ok(dto); } } 2.2 测试结果 创建测试接口 在这里插入图片描述获取测试结果 # 测试成功结果显示 { "errno": 0, "data": { "deviceIP": "192.168.1.64", "devicePort": 8000, "userId": 0, "errorCode": 0, "nativeLong": 0, "byChanNum": null, "m_strDeviceInfo": { "autoRead": true, "autoWrite": true, "struDeviceV30": { "autoRead": true, "autoWrite": true, "sSerialNumber": "aURTLTJERjg0NDBJWC1BMjAyMTA3MjNDQ0NIRzM5ODI1MzIwAAAAAAAAAAAAAAAA", "byAlarmInPortNum": 7, "byAlarmOutPortNum": 2, "byDiskNum": 0, "byDVRType": 0, "byChanNum": 1, "byStartChan": 1, "byAudioChanNum": 1, "byIPChanNum": 0, "byRes1": "AAICgG0GKQABwQAAANUBAAAQAAAAAJwA", "pointer": { "size": 344, "valid": true } }, "bySupportLock": 0, "byRetryLoginTime": 0, "byPasswordLevel": 2, "byRes1": 0, "dwSurplusLockTime": 0, "byRes2": "AgAAAAEAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "pointer": { "size": 344, "valid": true } } }, "errmsg": "成功" } 3. 设备注销 3.1 代码实现

在controller层调用设备注销方法

@ApiOperation(value = "注销设备", notes = "注销设备") @PutMapping(value = "/logoutDevice") @ResponseBody public Object logoutDevice(@RequestParam Integer lUserID) { String str = hikDevice.logoutDevice(lUserID.intValue()); System.out.println(str); return ResponseUtil.ok(str); } 3.2 测试结果 创建测试接口 在这里插入图片描述查看测试结果 在这里插入图片描述 { "errno": 0, "data": "{\"result\":\"logoutDevice Success\",\"userID\":0,\"errorCode\":0}", "errmsg": "成功" }

通过调用设备的控制方法将显示47错误,设备注销成功。在这里插入图片描述在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3