package com.ycl.api.YS; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import com.ycl.api.YS.lib.NetDEVSDKLib; import com.ycl.api.YS.login.Login; import com.ycl.platform.domain.result.OSDResult; import com.ycl.utils.StringUtils; import enumeration.DeviceType; import lombok.extern.slf4j.Slf4j; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; import static com.ycl.api.YS.lib.NetDEVSDKLib.NETDEV_LOGIN_PROTO_E.NETDEV_LOGIN_PROTO_ONVIF; @Slf4j public class YSApi { public static OSDResult getOsd(String ip, String userName, String password) { //登录 NetDEVSDKLib.NETDEV_DEVICE_LOGIN_INFO_S stDevLoginInfo = new NetDEVSDKLib.NETDEV_DEVICE_LOGIN_INFO_S(); NetDEVSDKLib.NETDEV_SELOG_INFO_S stSELogInfo = new NetDEVSDKLib.NETDEV_SELOG_INFO_S(); System.arraycopy(userName.getBytes(), 0, stDevLoginInfo.szUserName, 0, userName.getBytes().length); System.arraycopy(password.getBytes(), 0, stDevLoginInfo.szPassword, 0, password.getBytes().length); System.arraycopy(ip.getBytes(), 0, stDevLoginInfo.szIPAddr, 0, ip.getBytes().length); stDevLoginInfo.dwPort = 80; //登录协议 stDevLoginInfo.dwLoginProto = NETDEV_LOGIN_PROTO_ONVIF; Pointer lpUserID = YSInit.netdevsdk.NETDEV_Login_V30(stDevLoginInfo, stSELogInfo); if (lpUserID != null) { OSDResult osdResult = new OSDResult(); //获取通道 int nMaxChlCount = 256; IntByReference dwChlCount = new IntByReference(nMaxChlCount); NetDEVSDKLib.NETDEV_VIDEO_CHL_DETAIL_INFO_EX_S[] stVideoChlList = (NetDEVSDKLib.NETDEV_VIDEO_CHL_DETAIL_INFO_EX_S[]) new NetDEVSDKLib.NETDEV_VIDEO_CHL_DETAIL_INFO_EX_S().toArray(nMaxChlCount); boolean bRe = YSInit.netdevsdk.NETDEV_QueryVideoChlDetailListEx(lpUserID, dwChlCount, stVideoChlList); if (!bRe) { // log.error("error code" + YSInit.netdevsdk.NETDEV_GetLastError()); return null; } //获取时间 NetDEVSDKLib.NETDEV_TIME_CFG_S stTimeCfg = new NetDEVSDKLib.NETDEV_TIME_CFG_S(); stTimeCfg.write(); boolean bRetime = NetDemo.netdevsdk.NETDEV_GetSystemTimeCfg(lpUserID, stTimeCfg); Date checkTime = new Date(); osdResult.setCheckTime(checkTime); if (!bRetime) { // log.error("error code" + YSInit.netdevsdk.NETDEV_GetLastError()); return null; } else { stTimeCfg.read(); String strTime = "" + stTimeCfg.stTime.dwYear + "-"; if (stTimeCfg.stTime.dwMonth < 10) { strTime += "0"; } strTime = strTime + stTimeCfg.stTime.dwMonth + "-"; if (stTimeCfg.stTime.dwDay < 10) { strTime += "0"; } strTime = strTime + stTimeCfg.stTime.dwDay + " "; if (stTimeCfg.stTime.dwHour < 10) { strTime += "0"; } strTime = strTime + stTimeCfg.stTime.dwHour + ":"; if (stTimeCfg.stTime.dwMinute < 10) { strTime += "0"; } strTime = strTime + stTimeCfg.stTime.dwMinute + ":"; if (stTimeCfg.stTime.dwSecond < 10) { strTime += "0"; } strTime = strTime + stTimeCfg.stTime.dwSecond; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { osdResult.setOsdTime(format.parse(strTime)); } catch (Exception e) { // log.error(ip + "时间解析有误"); } } //获取osd NetDEVSDKLib.NETDEV_VIDEO_OSD_CFG_S stOSDInfo = new NetDEVSDKLib.NETDEV_VIDEO_OSD_CFG_S(); stOSDInfo.write(); IntByReference dwBytesReturned = new IntByReference(); boolean bRet = YSInit.netdevsdk.NETDEV_GetDevConfig(lpUserID, stVideoChlList[0].dwChannelID, NetDEVSDKLib.NETDEV_CONFIG_COMMAND_E.NETDEV_GET_OSDCFG, stOSDInfo.getPointer(), 616, dwBytesReturned); if (!bRet) { // log.error("error code" + YSInit.netdevsdk.NETDEV_GetLastError()); return null; } stOSDInfo.read(); String name = new String(stOSDInfo.stNameOSD.szOSDText, StandardCharsets.UTF_8).trim(); log.error("YSname:{}" , name); if (StringUtils.isNotEmpty(name) && name.contains("|")){ String[] osdNames = name.split("\\|"); osdResult.setOSD1(osdNames[0]); osdResult.setOSD2(osdNames[1]); osdResult.setOSD3(osdNames[2]); osdResult.setName(osdNames[3]); osdResult.setOSD4(osdNames[4]); }else { //省份 osdResult.setOSD1(name); // log.info("YSname"+name); int num = 0; for (NetDEVSDKLib.NETDEV_OSD_TEXT_OVERLAY_S osd : stOSDInfo.astTextOverlay) { String text = new String(osd.szOSDText, StandardCharsets.UTF_8).trim(); // log.info("YSnum:"+num+",YStexr:"+text); if (num == 0) { osdResult.setOSD2(text); } else if (num == 1) { osdResult.setOSD3(text); } else if (num == 2) { osdResult.setName(text); } else if (num == 3) { osdResult.setOSD4(text); } num++; } } //登出 YSInit.netdevsdk.NETDEV_Logout(lpUserID); osdResult.setDeviceBrand(DeviceType.YS.getType()); return osdResult; } else { // log.error("ip:"+ip+",error code" + YSInit.netdevsdk.NETDEV_GetLastError()); return null; } } public static void demo() { Login.loginIn(); } }