Test2Controller.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. package com.persagy.cameractl.controller;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.web.bind.annotation.RequestBody;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestMethod;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import com.persagy.cameractl.sdk40.HCNetSDK;
  11. import com.persagy.cameractl.sdk40.HCNetSDK.NET_DVR_USER_LOGIN_INFO;
  12. import com.persagy.cameractl.utils.Camera;
  13. import com.persagy.cameractl.utils.ResultClass;
  14. import com.sun.jna.Structure;
  15. import com.sun.jna.Union;
  16. import com.sun.jna.ptr.IntByReference;
  17. /**
  18. * 测试类
  19. *
  20. * @version 1.0.0
  21. * @company persagy
  22. * @author zhangqiankun
  23. * @date 2022年6月20日 下午5:43:10
  24. */
  25. @RestController
  26. public class Test2Controller {
  27. public static Logger logger = LoggerFactory.getLogger(Test2Controller.class);
  28. /** 项目根路径*/
  29. public static final String SERVER_ROOT_PATH = System.getProperty("user.dir");
  30. public static volatile HCNetSDK hCNetSDK;
  31. private volatile boolean isInit = false;
  32. //@Autowired
  33. //private CameraApiConfig cameraApiConfig;
  34. @RequestMapping(value = "/sso", method = RequestMethod.POST)
  35. public ResultClass hello(@RequestBody Camera camera) throws Exception {
  36. ResultClass returnResult = new ResultClass();
  37. returnResult.name = false;
  38. // SDK初始化
  39. boolean init = this.init();
  40. if (!init) {
  41. returnResult.reason = "SDK初始化失败";
  42. return returnResult;
  43. }
  44. HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
  45. //NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(cameraApiConfig.getDecodeDeviceUserName(), cameraApiConfig.getDecodeDevicePassword(), cameraApiConfig.getDecodeDeviceIp(), (short)cameraApiConfig.getDecodeDevicePort());
  46. NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(camera.userName, camera.password, camera.cameraIp, (short)camera.cameraPort);
  47. int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
  48. if (lUserID == -1) {
  49. int errCode = hCNetSDK.NET_DVR_GetLastError();
  50. returnResult.reason = "设备注册失败,错误码: " + errCode;
  51. return returnResult;
  52. }
  53. HCNetSDK.NET_DVR_STREAM_INFO struStreamID = new HCNetSDK.NET_DVR_STREAM_INFO();
  54. struStreamID.dwSize = struStreamID.size();
  55. struStreamID.byID = "18083116593134708100".getBytes();
  56. struStreamID.write();
  57. NET_DVR_STREAM_SRC_INFO_V40 NET_DVR_STREAM_SRC_INFO_V40 = new NET_DVR_STREAM_SRC_INFO_V40();
  58. IntByReference lpBytesReturned = new IntByReference(0);
  59. boolean deviceConfig = hCNetSDK.NET_DVR_GetDeviceConfig(lUserID, 6024, 1, struStreamID.getPointer(), struStreamID.size(),
  60. lpBytesReturned.getPointer(), NET_DVR_STREAM_SRC_INFO_V40.getPointer(), NET_DVR_STREAM_SRC_INFO_V40.size());
  61. if (!deviceConfig) {
  62. returnResult.reason = "获取流来源信息失败,错误码: " + hCNetSDK.NET_DVR_GetLastError();
  63. return returnResult;
  64. }
  65. NET_DVR_STREAM_SRC_INFO_V40.read();
  66. returnResult.name = true;
  67. Map<String, Object> temp = new HashMap<String, Object>();
  68. temp.put("ip", new String(NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.byAddress));
  69. temp.put("username", new String(NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.sUserName));
  70. temp.put("password", new String(NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.sPassword));
  71. temp.put("port", NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.wDVRPort);
  72. temp.put("channel", NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.dwChannel);
  73. temp.put("protocol", NET_DVR_STREAM_SRC_INFO_V40.uGetStream.struChanInfo.byTransProtocol);
  74. returnResult.resultData = temp;
  75. //退出程序时调用,每一台设备分别注销
  76. if (hCNetSDK.NET_DVR_Logout(lUserID)) {
  77. logger.info("logout success");
  78. }
  79. return returnResult;
  80. }
  81. private boolean init() {
  82. if (!isInit) {
  83. // 初始化
  84. hCNetSDK = HCNetSDK.INSTANCE;
  85. isInit = hCNetSDK.NET_DVR_Init();
  86. }
  87. return isInit;
  88. }
  89. private HCNetSDK.NET_DVR_USER_LOGIN_INFO getLoginObject(String m_sUsername, String m_sPassword, String m_sDeviceIP, short wPort) {
  90. HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
  91. m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
  92. System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
  93. m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
  94. System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
  95. m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
  96. System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
  97. m_strLoginInfo.wPort = wPort; //SDK端口
  98. m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是
  99. m_strLoginInfo.write();
  100. return m_strLoginInfo;
  101. }
  102. public static class NET_DVR_STREAM_SRC_INFO_V40 extends Structure {
  103. public int dwSize;
  104. public byte byGetStreamType;
  105. public byte[] byRes1 = new byte[3];
  106. public NET_DVR_STREAM_TYPE_V40_UNION uGetStream = new NET_DVR_STREAM_TYPE_V40_UNION();
  107. public byte[] byRes = new byte[512];
  108. }
  109. public static class NET_DVR_STREAM_TYPE_V40_UNION extends Union {
  110. public NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 struChanInfo = new NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40();
  111. public NET_DVR_PU_STREAM_URL struPuStreamUrl = new NET_DVR_PU_STREAM_URL();
  112. public NET_DVR_PU_STREAM_URL_CFG_V40 struStreamUrlCfg = new NET_DVR_PU_STREAM_URL_CFG_V40();
  113. public NET_DVR_RTSP_PROTOCAL_CFG struRtspCfg = new NET_DVR_RTSP_PROTOCAL_CFG();
  114. public NET_DVR_STREAM_URL_V40 struStreamUrlV40 = new NET_DVR_STREAM_URL_V40();
  115. }
  116. public static class NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 extends Structure {
  117. public byte byEnable;
  118. public byte byProType;
  119. public byte byZeroChan;
  120. public byte byRes1;
  121. public byte[] sUserName = new byte[32];
  122. public byte[] sPassword = new byte[16];
  123. public byte[] byAddress = new byte[64];
  124. public short wDVRPort;
  125. public byte byStreamType;
  126. public byte byOnline;
  127. public int dwChannel;
  128. public byte byTransProtocol;
  129. public byte byLocalBackUp;
  130. public byte[] byRes2 = new byte[2];
  131. public byte[] byVAGChanNo = new byte[32];
  132. public byte[] byRes = new byte[340];
  133. }
  134. public static class NET_DVR_PU_STREAM_URL extends Structure {
  135. public byte byEnable;//是否启用:0- 禁用,1- 启用
  136. public byte[] strURL = new byte[240];//取流URL路径
  137. public byte byTransPortocol;//传输协议类型:0-TCP,1-UDP
  138. public short wIPID;//设备ID号,wIPID = iDevInfoIndex + iGroupNO*64 +1
  139. public byte byChannel;//设备通道号
  140. public byte[] byRes = new byte[7];//保留,置为0
  141. }
  142. public static class NET_DVR_PU_STREAM_URL_CFG_V40 extends Structure {
  143. public byte byEnable;
  144. public byte[] byRes = new byte[3];
  145. public byte[] byStreamMediaIP = new byte[64];
  146. public short wStreamMediaPort;
  147. public byte byTransmitType;
  148. public byte byRes1;
  149. public byte[] byDevIP = new byte[64];
  150. public short wDevPort;
  151. public byte byChannel;
  152. public byte byTransMode;
  153. public byte byProType;
  154. public byte byTransProtocol;
  155. public byte[] byRes3 = new byte[2];
  156. public byte[] sUserName = new byte[32];
  157. public byte[] sPassWord = new byte[16];
  158. public byte[] byRes2 = new byte[308];
  159. }
  160. public static class NET_DVR_RTSP_PROTOCAL_CFG extends Structure {
  161. public byte byEnable;
  162. public byte byLocalBackUp;
  163. public byte[] byRes = new byte[2];
  164. public byte[] strURL = new byte[256];
  165. public int dwProtocalType;
  166. public byte[] sUserName = new byte[32];
  167. public byte[] sPassWord = new byte[16];
  168. public byte[] byAddress = new byte[64];
  169. public short wPort;
  170. public byte[] byRes1 = new byte[122];
  171. }
  172. public static class NET_DVR_STREAM_URL_V40 extends Structure {
  173. public byte byEnable;
  174. public byte byStreamType;
  175. public byte byLocalBackUp;
  176. public byte byRes;
  177. public byte[] strURL = new byte[256];
  178. public int dwProtocalType;
  179. public byte[] sUserName = new byte[32];
  180. public byte[] sPassWord = new byte[16];
  181. public byte[] byAddress = new byte[64];
  182. public short wIPPort;
  183. public short wChanNo;
  184. public byte[] byVAGChanNo = new byte[32];
  185. public byte[] byRes1 = new byte[88];
  186. }
  187. public static class NET_DVR_STREAM_SRC_CFG extends Structure {
  188. public int dwSize;
  189. public HCNetSDK.NET_DVR_STREAM_INFO struStreamID = new HCNetSDK.NET_DVR_STREAM_INFO();
  190. public NET_DVR_STREAM_SRC_INFO struStreamSrcInfo = new NET_DVR_STREAM_SRC_INFO();
  191. }
  192. public static class NET_DVR_STREAM_SRC_INFO extends Structure {
  193. public int dwSize;
  194. public NET_DVR_STREAM_MODE_TYPE struStreamSrcInfo = new NET_DVR_STREAM_MODE_TYPE();
  195. }
  196. public static class NET_DVR_STREAM_MODE_TYPE extends Structure {
  197. public byte byGetStreamType;
  198. public byte[] byRes = new byte[3];
  199. public NET_DVR_STREAM_TYPE_UNION uGetStream = new NET_DVR_STREAM_TYPE_UNION();
  200. }
  201. public static class NET_DVR_STREAM_TYPE_UNION extends Union {
  202. public NET_DVR_DIRECT_CONNECT_CHAN_INFO struChanInfo = new NET_DVR_DIRECT_CONNECT_CHAN_INFO();
  203. public HCNetSDK.NET_DVR_PU_STREAM_URL struStreamUrl = new HCNetSDK.NET_DVR_PU_STREAM_URL();
  204. public NET_DVR_PU_STREAM_URL_CFG struStreamUrlCfg = new NET_DVR_PU_STREAM_URL_CFG();
  205. }
  206. public static class NET_DVR_DIRECT_CONNECT_CHAN_INFO extends Structure {
  207. public byte byEnable;
  208. public byte byProType;
  209. public byte byZeroChan;
  210. public byte byPriority;
  211. public byte[] sUserName = new byte[32];
  212. public byte[] sPassword = new byte[16];
  213. public byte[] byDomain = new byte[64];
  214. public HCNetSDK.NET_DVR_IPADDR struIP;
  215. public short wDVRPort;
  216. public byte byStreamType;
  217. public byte byOnline;
  218. public int dwChannel;
  219. public byte byTransProtocol;
  220. public byte byLocalBackUp;
  221. public short wDirectLastTime;
  222. public byte[] byChanNo = new byte[24];
  223. }
  224. public static class NET_DVR_PU_STREAM_URL_CFG extends Structure {
  225. public byte byEnable;
  226. public byte[] byRes = new byte[3];
  227. public byte[] byStreamMediaIP = new byte[64];
  228. public short wStreamMediaPort;
  229. public byte byTransmitType;
  230. public byte[] byRes1 = new byte[33];
  231. public byte[] byDevIP = new byte[64];
  232. public short wDevPort;
  233. public short byChannel;
  234. public byte byTransMode;
  235. public byte byProType;
  236. public byte byTransProtocol;
  237. public byte[] byRes3 = new byte[2];
  238. public byte[] sUserName = new byte[32];
  239. public byte[] sPassWord = new byte[16];
  240. public byte[] byRes2 = new byte[28];
  241. }
  242. /*@RequestMapping(value = "/sso", method = RequestMethod.POST)
  243. public ResultClass hello(@RequestBody Camera camera) throws Exception {
  244. ResultClass returnResult = new ResultClass();
  245. returnResult.name = false;
  246. // SDK初始化
  247. boolean init = this.init();
  248. if (!init) {
  249. returnResult.reason = "SDK初始化失败";
  250. return returnResult;
  251. }
  252. HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
  253. //NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(cameraApiConfig.getDecodeDeviceUserName(), cameraApiConfig.getDecodeDevicePassword(), cameraApiConfig.getDecodeDeviceIp(), (short)cameraApiConfig.getDecodeDevicePort());
  254. NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(camera.userName, camera.password, camera.cameraIp, (short)camera.cameraPort);
  255. int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
  256. if (lUserID == -1) {
  257. int errCode = hCNetSDK.NET_DVR_GetLastError();
  258. returnResult.reason = "设备注册失败,错误码: " + errCode;
  259. return returnResult;
  260. }
  261. NET_DVR_STREAM_SRC_CFG net_dvr_stream_src_cfg = new NET_DVR_STREAM_SRC_CFG();
  262. boolean deviceConfig = hCNetSDK.NET_DVR_GetDeviceConfig(lUserID, 9105, 0xffffffff, null, 0, null, net_dvr_stream_src_cfg.getPointer(), net_dvr_stream_src_cfg.size());
  263. if (!deviceConfig) {
  264. returnResult.reason = "获取设备流配置失败,错误码: " + hCNetSDK.NET_DVR_GetLastError();
  265. return returnResult;
  266. }
  267. net_dvr_stream_src_cfg.read();
  268. returnResult.name = true;
  269. returnResult.resultData = net_dvr_stream_src_cfg.toString();
  270. //退出程序时调用,每一台设备分别注销
  271. if (hCNetSDK.NET_DVR_Logout(lUserID)) {
  272. logger.info("logout success");
  273. }
  274. return returnResult;
  275. }*/
  276. }