package com.persagy.cameractl.controller; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.persagy.cameractl.sdk40.HCNetSDK; import com.persagy.cameractl.sdk40.HCNetSDK.NET_DVR_USER_LOGIN_INFO; import com.persagy.cameractl.utils.Camera; import com.persagy.cameractl.utils.ResultClass; import com.sun.jna.Structure; import com.sun.jna.Union; import com.sun.jna.ptr.IntByReference; /** * 测试类 * * @version 1.0.0 * @company persagy * @author zhangqiankun * @date 2022年6月20日 下午5:43:10 */ @RestController public class Test2Controller { public static Logger logger = LoggerFactory.getLogger(Test2Controller.class); /** 项目根路径*/ public static final String SERVER_ROOT_PATH = System.getProperty("user.dir"); public static volatile HCNetSDK hCNetSDK; private volatile boolean isInit = false; //@Autowired //private CameraApiConfig cameraApiConfig; @RequestMapping(value = "/sso", method = RequestMethod.POST) public ResultClass hello(@RequestBody Camera camera) throws Exception { ResultClass returnResult = new ResultClass(); returnResult.name = false; // SDK初始化 boolean init = this.init(); if (!init) { returnResult.reason = "SDK初始化失败"; return returnResult; } HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 //NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(cameraApiConfig.getDecodeDeviceUserName(), cameraApiConfig.getDecodeDevicePassword(), cameraApiConfig.getDecodeDeviceIp(), (short)cameraApiConfig.getDecodeDevicePort()); NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(camera.userName, camera.password, camera.cameraIp, (short)camera.cameraPort); int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID == -1) { int errCode = hCNetSDK.NET_DVR_GetLastError(); returnResult.reason = "设备注册失败,错误码: " + errCode; return returnResult; } HCNetSDK.NET_DVR_STREAM_INFO struStreamID = new HCNetSDK.NET_DVR_STREAM_INFO(); struStreamID.dwSize = struStreamID.size(); struStreamID.byID = "18083116593134708100".getBytes(); struStreamID.write(); NET_DVR_STREAM_SRC_INFO_V40 NET_DVR_STREAM_SRC_INFO_V40 = new NET_DVR_STREAM_SRC_INFO_V40(); IntByReference lpBytesReturned = new IntByReference(0); boolean deviceConfig = hCNetSDK.NET_DVR_GetDeviceConfig(lUserID, 6024, 1, struStreamID.getPointer(), struStreamID.size(), lpBytesReturned.getPointer(), NET_DVR_STREAM_SRC_INFO_V40.getPointer(), NET_DVR_STREAM_SRC_INFO_V40.size()); if (!deviceConfig) { returnResult.reason = "获取流来源信息失败,错误码: " + hCNetSDK.NET_DVR_GetLastError(); return returnResult; } NET_DVR_STREAM_SRC_INFO_V40.read(); returnResult.name = true; Map temp = new HashMap(); temp.put("ip", new String(NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.byAddress)); temp.put("username", new String(NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.sUserName)); temp.put("password", new String(NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.sPassword)); temp.put("port", NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.wDVRPort); temp.put("channel", NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.dwChannel); temp.put("protocol", NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.byTransProtocol); returnResult.resultData = temp; //退出程序时调用,每一台设备分别注销 if (hCNetSDK.NET_DVR_Logout(lUserID)) { logger.info("logout success"); } return returnResult; } private boolean init() { if (!isInit) { // 初始化 hCNetSDK = HCNetSDK.INSTANCE; isInit = hCNetSDK.NET_DVR_Init(); } return isInit; } private HCNetSDK.NET_DVR_USER_LOGIN_INFO getLoginObject(String m_sUsername, String m_sPassword, String m_sDeviceIP, short wPort) { 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(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); m_strLoginInfo.wPort = wPort; //SDK端口 m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 m_strLoginInfo.write(); return m_strLoginInfo; } public static class NET_DVR_STREAM_SRC_INFO_V40 extends Structure { public int dwSize; public byte byGetStreamType; public byte[] byRes1 = new byte[3]; public NET_DVR_STREAM_TYPE_V40_UNION uGetStream = new NET_DVR_STREAM_TYPE_V40_UNION(); public byte[] byRes = new byte[512]; } public static class NET_DVR_STREAM_TYPE_V40_UNION extends Union { public NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 struChanInfo = new NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40(); public NET_DVR_PU_STREAM_URL struPuStreamUrl = new NET_DVR_PU_STREAM_URL(); public NET_DVR_PU_STREAM_URL_CFG_V40 struStreamUrlCfg = new NET_DVR_PU_STREAM_URL_CFG_V40(); public NET_DVR_RTSP_PROTOCAL_CFG struRtspCfg = new NET_DVR_RTSP_PROTOCAL_CFG(); public NET_DVR_STREAM_URL_V40 struStreamUrlV40 = new NET_DVR_STREAM_URL_V40(); } public static class NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 extends Structure { public byte byEnable; public byte byProType; public byte byZeroChan; public byte byRes1; public byte[] sUserName = new byte[32]; public byte[] sPassword = new byte[16]; public byte[] byAddress = new byte[64]; public short wDVRPort; public byte byStreamType; public byte byOnline; public int dwChannel; public byte byTransProtocol; public byte byLocalBackUp; public byte[] byRes2 = new byte[2]; public byte[] byVAGChanNo = new byte[32]; public byte[] byRes = new byte[340]; } public static class NET_DVR_PU_STREAM_URL extends Structure { public byte byEnable;//是否启用:0- 禁用,1- 启用 public byte[] strURL = new byte[240];//取流URL路径 public byte byTransPortocol;//传输协议类型:0-TCP,1-UDP public short wIPID;//设备ID号,wIPID = iDevInfoIndex + iGroupNO*64 +1 public byte byChannel;//设备通道号 public byte[] byRes = new byte[7];//保留,置为0 } public static class NET_DVR_PU_STREAM_URL_CFG_V40 extends Structure { public byte byEnable; public byte[] byRes = new byte[3]; public byte[] byStreamMediaIP = new byte[64]; public short wStreamMediaPort; public byte byTransmitType; public byte byRes1; public byte[] byDevIP = new byte[64]; public short wDevPort; public byte byChannel; public byte byTransMode; public byte byProType; public byte byTransProtocol; public byte[] byRes3 = new byte[2]; public byte[] sUserName = new byte[32]; public byte[] sPassWord = new byte[16]; public byte[] byRes2 = new byte[308]; } public static class NET_DVR_RTSP_PROTOCAL_CFG extends Structure { public byte byEnable; public byte byLocalBackUp; public byte[] byRes = new byte[2]; public byte[] strURL = new byte[256]; public int dwProtocalType; public byte[] sUserName = new byte[32]; public byte[] sPassWord = new byte[16]; public byte[] byAddress = new byte[64]; public short wPort; public byte[] byRes1 = new byte[122]; } public static class NET_DVR_STREAM_URL_V40 extends Structure { public byte byEnable; public byte byStreamType; public byte byLocalBackUp; public byte byRes; public byte[] strURL = new byte[256]; public int dwProtocalType; public byte[] sUserName = new byte[32]; public byte[] sPassWord = new byte[16]; public byte[] byAddress = new byte[64]; public short wIPPort; public short wChanNo; public byte[] byVAGChanNo = new byte[32]; public byte[] byRes1 = new byte[88]; } public static class NET_DVR_STREAM_SRC_CFG extends Structure { public int dwSize; public HCNetSDK.NET_DVR_STREAM_INFO struStreamID = new HCNetSDK.NET_DVR_STREAM_INFO(); public NET_DVR_STREAM_SRC_INFO struStreamSrcInfo = new NET_DVR_STREAM_SRC_INFO(); } public static class NET_DVR_STREAM_SRC_INFO extends Structure { public int dwSize; public NET_DVR_STREAM_MODE_TYPE struStreamSrcInfo = new NET_DVR_STREAM_MODE_TYPE(); } public static class NET_DVR_STREAM_MODE_TYPE extends Structure { public byte byGetStreamType; public byte[] byRes = new byte[3]; public NET_DVR_STREAM_TYPE_UNION uGetStream = new NET_DVR_STREAM_TYPE_UNION(); } public static class NET_DVR_STREAM_TYPE_UNION extends Union { public NET_DVR_DIRECT_CONNECT_CHAN_INFO struChanInfo = new NET_DVR_DIRECT_CONNECT_CHAN_INFO(); public HCNetSDK.NET_DVR_PU_STREAM_URL struStreamUrl = new HCNetSDK.NET_DVR_PU_STREAM_URL(); public NET_DVR_PU_STREAM_URL_CFG struStreamUrlCfg = new NET_DVR_PU_STREAM_URL_CFG(); } public static class NET_DVR_DIRECT_CONNECT_CHAN_INFO extends Structure { public byte byEnable; public byte byProType; public byte byZeroChan; public byte byPriority; public byte[] sUserName = new byte[32]; public byte[] sPassword = new byte[16]; public byte[] byDomain = new byte[64]; public HCNetSDK.NET_DVR_IPADDR struIP; public short wDVRPort; public byte byStreamType; public byte byOnline; public int dwChannel; public byte byTransProtocol; public byte byLocalBackUp; public short wDirectLastTime; public byte[] byChanNo = new byte[24]; } public static class NET_DVR_PU_STREAM_URL_CFG extends Structure { public byte byEnable; public byte[] byRes = new byte[3]; public byte[] byStreamMediaIP = new byte[64]; public short wStreamMediaPort; public byte byTransmitType; public byte[] byRes1 = new byte[33]; public byte[] byDevIP = new byte[64]; public short wDevPort; public short byChannel; public byte byTransMode; public byte byProType; public byte byTransProtocol; public byte[] byRes3 = new byte[2]; public byte[] sUserName = new byte[32]; public byte[] sPassWord = new byte[16]; public byte[] byRes2 = new byte[28]; } /*@RequestMapping(value = "/sso", method = RequestMethod.POST) public ResultClass hello(@RequestBody Camera camera) throws Exception { ResultClass returnResult = new ResultClass(); returnResult.name = false; // SDK初始化 boolean init = this.init(); if (!init) { returnResult.reason = "SDK初始化失败"; return returnResult; } HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 //NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(cameraApiConfig.getDecodeDeviceUserName(), cameraApiConfig.getDecodeDevicePassword(), cameraApiConfig.getDecodeDeviceIp(), (short)cameraApiConfig.getDecodeDevicePort()); NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(camera.userName, camera.password, camera.cameraIp, (short)camera.cameraPort); int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID == -1) { int errCode = hCNetSDK.NET_DVR_GetLastError(); returnResult.reason = "设备注册失败,错误码: " + errCode; return returnResult; } NET_DVR_STREAM_SRC_CFG net_dvr_stream_src_cfg = new NET_DVR_STREAM_SRC_CFG(); boolean deviceConfig = hCNetSDK.NET_DVR_GetDeviceConfig(lUserID, 9105, 0xffffffff, null, 0, null, net_dvr_stream_src_cfg.getPointer(), net_dvr_stream_src_cfg.size()); if (!deviceConfig) { returnResult.reason = "获取设备流配置失败,错误码: " + hCNetSDK.NET_DVR_GetLastError(); return returnResult; } net_dvr_stream_src_cfg.read(); returnResult.name = true; returnResult.resultData = net_dvr_stream_src_cfg.toString(); //退出程序时调用,每一台设备分别注销 if (hCNetSDK.NET_DVR_Logout(lUserID)) { logger.info("logout success"); } return returnResult; }*/ }