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 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);
|
osdResult.setOSD1(name);
|
// log.info("name"+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("num:"+num+",texr:"+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();
|
}
|
}
|