Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1498 строки
91 KiB

  1. package com.hkversion;
  2. import com.common.CommonUtil;
  3. import com.sun.jna.Pointer;
  4. import java.io.*;
  5. import java.nio.ByteBuffer;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;
  8. /**
  9. * @author jiangxin
  10. * @create 2022-08-15-18:04
  11. */
  12. public class AlarmDataParse {
  13. public static void alarmDataHandle(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
  14. System.out.println("报警事件类型: lCommand:" + Integer.toHexString(lCommand));
  15. String sTime;
  16. String MonitoringSiteID;
  17. //lCommand是传的报警类型
  18. switch (lCommand) {
  19. case HCNetSDK.COMM_ITS_PLATE_RESULT://交通抓拍结果(新报警信息)
  20. HCNetSDK.NET_ITS_PLATE_RESULT strItsPlateResult = new HCNetSDK.NET_ITS_PLATE_RESULT();
  21. strItsPlateResult.write();
  22. Pointer pItsPlateInfo = strItsPlateResult.getPointer();
  23. pItsPlateInfo.write(0, pAlarmInfo.getByteArray(0, strItsPlateResult.size()), 0, strItsPlateResult.size());
  24. strItsPlateResult.read();
  25. try {
  26. String sLicense = new String(strItsPlateResult.struPlateInfo.sLicense, "GBK");
  27. byte VehicleType = strItsPlateResult.byVehicleType; //0-其他车辆,1-小型车,2-大型车,3- 行人触发,4- 二轮车触发,5- 三轮车触发,6- 机动车触发
  28. MonitoringSiteID = new String(strItsPlateResult.byMonitoringSiteID);
  29. System.out.println("车牌号:" + sLicense + ":车辆类型:" + VehicleType + ":监控点编号:" + MonitoringSiteID);
  30. } catch (UnsupportedEncodingException e1) {
  31. // TODO Auto-generated catch block
  32. e1.printStackTrace();
  33. } catch (IOException e) {
  34. // TODO Auto-generated catch block
  35. e.printStackTrace();
  36. }
  37. /**
  38. * 报警图片保存,车牌,车辆图片
  39. */
  40. for (int i = 0; i < strItsPlateResult.dwPicNum; i++) {
  41. if (strItsPlateResult.struPicInfo[i].dwDataLen > 0) {
  42. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  43. String newName = sf.format(new Date());
  44. FileOutputStream fout;
  45. try {
  46. String filename = "../pic/" + newName + "_type[" + strItsPlateResult.struPicInfo[i].byType + "]_ItsPlate.jpg";
  47. fout = new FileOutputStream(filename);
  48. //将字节写入文件
  49. long offset = 0;
  50. ByteBuffer buffers = strItsPlateResult.struPicInfo[i].pBuffer.getByteBuffer(offset, strItsPlateResult.struPicInfo[i].dwDataLen);
  51. byte[] bytes = new byte[strItsPlateResult.struPicInfo[i].dwDataLen];
  52. buffers.rewind();
  53. buffers.get(bytes);
  54. fout.write(bytes);
  55. fout.close();
  56. } catch (FileNotFoundException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();
  59. } catch (IOException e) {
  60. // TODO Auto-generated catch block
  61. e.printStackTrace();
  62. }
  63. }
  64. }
  65. break;
  66. case HCNetSDK.COMM_ALARM_TFS: //道路违章取证报警
  67. HCNetSDK.NET_DVR_TFS_ALARM strTfsAlarm = new HCNetSDK.NET_DVR_TFS_ALARM();
  68. strTfsAlarm.write();
  69. Pointer pTfsAlarm = strTfsAlarm.getPointer();
  70. pTfsAlarm.write(0, pAlarmInfo.getByteArray(0, strTfsAlarm.size()), 0, strTfsAlarm.size());
  71. strTfsAlarm.read();
  72. sTime = CommonUtil.parseTime(strTfsAlarm.dwAbsTime); //报警绝对时间
  73. int IllegalType = strTfsAlarm.dwIllegalType; // 违章类型
  74. MonitoringSiteID = strTfsAlarm.byMonitoringSiteID.toString(); //监控点编号
  75. // 车牌信息
  76. try {
  77. String PlateInfo = "车牌号:" + new String(strTfsAlarm.struPlateInfo.sLicense, "GBK");
  78. System.out.println("【道路违章取证报警】时间:" + sTime + "违章类型:" + IllegalType + "车牌信息:" + PlateInfo);
  79. } catch (UnsupportedEncodingException e) {
  80. e.printStackTrace();
  81. }
  82. //报警图片信息
  83. for (int i = 0; i < strTfsAlarm.dwPicNum; i++) {
  84. if (strTfsAlarm.struPicInfo[i].dwDataLen > 0) {
  85. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  86. String newName = sf.format(new Date());
  87. FileOutputStream fout;
  88. try {
  89. String filename = "../pic/" + newName + "_type[" + strTfsAlarm.struPicInfo[i].byType + "]_TfsPlate.jpg";
  90. fout = new FileOutputStream(filename);
  91. //将字节写入文件
  92. long offset = 0;
  93. ByteBuffer buffers = strTfsAlarm.struPicInfo[i].pBuffer.getByteBuffer(offset, strTfsAlarm.struPicInfo[i].dwDataLen);
  94. byte[] bytes = new byte[strTfsAlarm.struPicInfo[i].dwDataLen];
  95. buffers.rewind();
  96. buffers.get(bytes);
  97. fout.write(bytes);
  98. fout.close();
  99. } catch (FileNotFoundException e) {
  100. // TODO Auto-generated catch block
  101. e.printStackTrace();
  102. } catch (IOException e) {
  103. // TODO Auto-generated catch block
  104. e.printStackTrace();
  105. }
  106. }
  107. }
  108. break;
  109. case HCNetSDK.COMM_ALARM_AID_V41: //道路事件检测
  110. HCNetSDK.NET_DVR_AID_ALARM_V41 strAIDAlarmV41 = new HCNetSDK.NET_DVR_AID_ALARM_V41();
  111. strAIDAlarmV41.write();
  112. Pointer pstrAIDAlarmV41 = strAIDAlarmV41.getPointer();
  113. pstrAIDAlarmV41.write(0, pAlarmInfo.getByteArray(0, strAIDAlarmV41.size()), 0, strAIDAlarmV41.size());
  114. strAIDAlarmV41.read();
  115. sTime = CommonUtil.parseTime(strAIDAlarmV41.dwAbsTime); //报警触发绝对时间
  116. MonitoringSiteID = strAIDAlarmV41.byMonitoringSiteID.toString(); //监控点编号
  117. int AIDType = strAIDAlarmV41.struAIDInfo.dwAIDType; // 交通事件类型
  118. int AIDTypeEx = strAIDAlarmV41.struAIDInfo.dwAIDTypeEx; //交通事件类型扩展
  119. System.out.println("【道路事件检测】" + "时间:" + sTime + "监控点:" + MonitoringSiteID + "交通事件类型:" + AIDType + "交通事件类型扩展:" + AIDTypeEx);
  120. //报警图片信息
  121. if (strAIDAlarmV41.dwPicDataLen > 0 && strAIDAlarmV41.pImage != null) {
  122. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  123. String newName = sf.format(new Date());
  124. FileOutputStream fout;
  125. try {
  126. String filename = "../pic/" + newName + "_AIDalarm.jpg";
  127. fout = new FileOutputStream(filename);
  128. //将字节写入文件
  129. long offset = 0;
  130. ByteBuffer buffers = strAIDAlarmV41.pImage.getByteBuffer(offset, strAIDAlarmV41.dwPicDataLen);
  131. byte[] bytes = new byte[strAIDAlarmV41.dwPicDataLen];
  132. buffers.rewind();
  133. buffers.get(bytes);
  134. fout.write(bytes);
  135. fout.close();
  136. } catch (FileNotFoundException e) {
  137. // TODO Auto-generated catch block
  138. e.printStackTrace();
  139. } catch (IOException e) {
  140. // TODO Auto-generated catch block
  141. e.printStackTrace();
  142. }
  143. }
  144. break;
  145. case HCNetSDK.COMM_ALARM_TPS_V41://交通数据统计的报警
  146. HCNetSDK.NET_DVR_TPS_ALARM_V41 strTPSalarmV41 = new HCNetSDK.NET_DVR_TPS_ALARM_V41();
  147. strTPSalarmV41.write();
  148. Pointer pstrTPSalarmV41 = strTPSalarmV41.getPointer();
  149. pstrTPSalarmV41.write(0, pAlarmInfo.getByteArray(0, strTPSalarmV41.size()), 0, strTPSalarmV41.size());
  150. strTPSalarmV41.read();
  151. sTime = CommonUtil.parseTime(strTPSalarmV41.dwAbsTime);
  152. MonitoringSiteID = strTPSalarmV41.byMonitoringSiteID.toString(); //监控点编号
  153. String StartTime = CommonUtil.parseTime(strTPSalarmV41.dwStartTime); //开始统计时间;
  154. String StopTime = CommonUtil.parseTime(strTPSalarmV41.dwStopTime); //结束统计时间;
  155. System.out.println("【交通数据统计】" + "时间:" + sTime + "监控点编号:" + MonitoringSiteID + "开始统计时间:" + StartTime + "结束统计时间:" + StopTime);
  156. //车道统计参数信息
  157. for (int i = 0; i <= HCNetSDK.MAX_TPS_RULE; i++) {
  158. byte LaneNo = strTPSalarmV41.struTPSInfo.struLaneParam[i].byLaneNo; //车道号
  159. byte TrafficState = strTPSalarmV41.struTPSInfo.struLaneParam[i].byTrafficState; //车道状态 0-无效,1-畅通,2-拥挤,3-堵塞
  160. int TpsType = strTPSalarmV41.struTPSInfo.struLaneParam[i].dwTpsType; //数据变化类型标志,表示当前上传的统计参数中,哪些数据有效,按位区分
  161. int LaneVolume = strTPSalarmV41.struTPSInfo.struLaneParam[i].dwLaneVolume; //车道流量
  162. int LaneVelocity = strTPSalarmV41.struTPSInfo.struLaneParam[i].dwLaneVelocity; //车道平均速度
  163. float SpaceOccupyRation = strTPSalarmV41.struTPSInfo.struLaneParam[i].fSpaceOccupyRation; //车道占有率,百分比计算(空间上,车辆长度与监控路段总长度的比值)
  164. System.out.println("车道号:" + LaneNo + "车道状态:" + TrafficState + "车道流量:" + LaneVolume + "车道占有率:" + SpaceOccupyRation + "\n");
  165. }
  166. break;
  167. case HCNetSDK.COMM_ALARM_TPS_REAL_TIME: //实时过车数据数据
  168. HCNetSDK.NET_DVR_TPS_REAL_TIME_INFO netDvrTpsParam = new HCNetSDK.NET_DVR_TPS_REAL_TIME_INFO();
  169. netDvrTpsParam.write();
  170. Pointer pItsParkVehicle = netDvrTpsParam.getPointer();
  171. pItsParkVehicle.write(0, pAlarmInfo.getByteArray(0, netDvrTpsParam.size()), 0, netDvrTpsParam.size());
  172. netDvrTpsParam.read();
  173. String struTime = "" + String.format("%04d", netDvrTpsParam.struTime.wYear) +
  174. String.format("%02d", netDvrTpsParam.struTime.byMonth) +
  175. String.format("%02d", netDvrTpsParam.struTime.byDay) +
  176. String.format("%02d", netDvrTpsParam.struTime.byDay) +
  177. String.format("%02d", netDvrTpsParam.struTime.byHour) +
  178. String.format("%02d", netDvrTpsParam.struTime.byMinute) +
  179. String.format("%02d", netDvrTpsParam.struTime.bySecond);
  180. Short wDeviceID = new Short(netDvrTpsParam.struTPSRealTimeInfo.wDeviceID);//设备ID
  181. int channel = netDvrTpsParam.dwChan; //触发报警通道号
  182. String byLane = new String(String.valueOf(netDvrTpsParam.struTPSRealTimeInfo.byLane)).trim();// 对应车道号
  183. String bySpeed = new String(String.valueOf(netDvrTpsParam.struTPSRealTimeInfo.bySpeed)).trim();// 对应车速(KM/H)
  184. int dwDownwardFlow = netDvrTpsParam.struTPSRealTimeInfo.dwDownwardFlow;//当前车道 从上到下车流量
  185. int dwUpwardFlow = netDvrTpsParam.struTPSRealTimeInfo.dwUpwardFlow; //当前车道 从下到上车流量
  186. System.out.println("通道号:" + channel + "; 时间:" + struTime + ";对应车道号:" + byLane + ";当前车道 从上到下车流量:" + dwDownwardFlow + ";dwUpwardFlow:" + dwUpwardFlow);
  187. break;
  188. case HCNetSDK.COMM_ALARM_TPS_STATISTICS: //统计过车数据
  189. HCNetSDK.NET_DVR_TPS_STATISTICS_INFO netDvrTpsStatisticsInfo = new HCNetSDK.NET_DVR_TPS_STATISTICS_INFO();
  190. netDvrTpsStatisticsInfo.write();
  191. Pointer pTpsVehicle = netDvrTpsStatisticsInfo.getPointer();
  192. pTpsVehicle.write(0, pAlarmInfo.getByteArray(0, netDvrTpsStatisticsInfo.size()), 0, netDvrTpsStatisticsInfo.size());
  193. netDvrTpsStatisticsInfo.read();
  194. int Tpschannel = netDvrTpsStatisticsInfo.dwChan; //触发报警通道号
  195. //统计开始时间
  196. String struStartTime = "" + String.format("%04d", netDvrTpsStatisticsInfo.struTPSStatisticsInfo.struStartTime.wYear) +
  197. String.format("%02d", netDvrTpsStatisticsInfo.struTPSStatisticsInfo.struStartTime.byMonth) +
  198. String.format("%02d", netDvrTpsStatisticsInfo.struTPSStatisticsInfo.struStartTime.byDay) +
  199. String.format("%02d", netDvrTpsStatisticsInfo.struTPSStatisticsInfo.struStartTime.byDay) +
  200. String.format("%02d", netDvrTpsStatisticsInfo.struTPSStatisticsInfo.struStartTime.byHour) +
  201. String.format("%02d", netDvrTpsStatisticsInfo.struTPSStatisticsInfo.struStartTime.byMinute) +
  202. String.format("%02d", netDvrTpsStatisticsInfo.struTPSStatisticsInfo.struStartTime.bySecond);
  203. byte TotalLaneNum = netDvrTpsStatisticsInfo.struTPSStatisticsInfo.byTotalLaneNum; //有效车道总数
  204. System.out.println("通道号:" + Tpschannel + "; 开始统计时间:" + struStartTime + "有效车道总数:" + TotalLaneNum);
  205. break;
  206. case HCNetSDK.COMM_ITS_PARK_VEHICLE: //停车场数据上传
  207. HCNetSDK.NET_ITS_PARK_VEHICLE strParkVehicle = new HCNetSDK.NET_ITS_PARK_VEHICLE();
  208. strParkVehicle.write();
  209. Pointer pstrParkVehicle = strParkVehicle.getPointer();
  210. pstrParkVehicle.write(0, pAlarmInfo.getByteArray(0, strParkVehicle.size()), 0, strParkVehicle.size());
  211. strParkVehicle.read();
  212. try {
  213. byte ParkError = strParkVehicle.byParkError; //停车异常:0- 正常,1- 异常
  214. String ParkingNo = new String(strParkVehicle.byParkingNo, "UTF-8"); //车位编号
  215. byte LocationStatus = strParkVehicle.byLocationStatus; //车位车辆状态 0- 无车,1- 有车
  216. MonitoringSiteID = strParkVehicle.byMonitoringSiteID.toString();
  217. String plateNo = new String(strParkVehicle.struPlateInfo.sLicense, "GBK"); //车牌号
  218. } catch (UnsupportedEncodingException e) {
  219. e.printStackTrace();
  220. }
  221. //报警图片信息
  222. for (int i = 0; i < strParkVehicle.dwPicNum; i++) {
  223. if (strParkVehicle.struPicInfo[i].dwDataLen > 0) {
  224. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  225. String newName = sf.format(new Date());
  226. FileOutputStream fout;
  227. try {
  228. String filename = "../pic/" + newName + "_ParkVehicle.jpg";
  229. fout = new FileOutputStream(filename);
  230. //将字节写入文件
  231. long offset = 0;
  232. ByteBuffer buffers = strParkVehicle.struPicInfo[i].pBuffer.getByteBuffer(offset, strParkVehicle.struPicInfo[i].dwDataLen);
  233. byte[] bytes = new byte[strParkVehicle.struPicInfo[i].dwDataLen];
  234. buffers.rewind();
  235. buffers.get(bytes);
  236. fout.write(bytes);
  237. fout.close();
  238. } catch (FileNotFoundException e) {
  239. // TODO Auto-generated catch block
  240. e.printStackTrace();
  241. } catch (IOException e) {
  242. // TODO Auto-generated catch block
  243. e.printStackTrace();
  244. }
  245. }
  246. }
  247. break;
  248. case HCNetSDK.COMM_ALARMHOST_CID_ALARM://报警主机CID报告报警上传
  249. HCNetSDK.NET_DVR_CID_ALARM strCIDalarm = new HCNetSDK.NET_DVR_CID_ALARM();
  250. strCIDalarm.write();
  251. Pointer pstrCIDalarm = strCIDalarm.getPointer();
  252. pstrCIDalarm.write(0, pAlarmInfo.getByteArray(0, strCIDalarm.size()), 0, strCIDalarm.size());
  253. strCIDalarm.read();
  254. try {
  255. String TriggerTime = "" + String.format("%04d", strCIDalarm.struTriggerTime.wYear) +
  256. String.format("%02d", strCIDalarm.struTriggerTime.byMonth) +
  257. String.format("%02d", strCIDalarm.struTriggerTime.byDay) +
  258. String.format("%02d", strCIDalarm.struTriggerTime.byDay) +
  259. String.format("%02d", strCIDalarm.struTriggerTime.byHour) +
  260. String.format("%02d", strCIDalarm.struTriggerTime.byMinute) +
  261. String.format("%02d", strCIDalarm.struTriggerTime.bySecond); //触发报警时间
  262. String sCIDCode = new String(strCIDalarm.sCIDCode, "GBK"); //CID事件号
  263. String sCIDDescribe = new String(strCIDalarm.sCIDDescribe, "GBK"); //CID事件名
  264. byte bySubSysNo = strCIDalarm.bySubSysNo; //子系统号
  265. if (strCIDalarm.wDefenceNo != 0xff)
  266. {
  267. System.out.println("防区号:"+Integer.sum(strCIDalarm.wDefenceNo,1));
  268. }
  269. System.out.println("【CID事件】" + "触发时间:" + TriggerTime + "CID事件号:" + sCIDCode + "CID事件名:" + sCIDDescribe + "子系统号:" +
  270. bySubSysNo);
  271. } catch (UnsupportedEncodingException e) {
  272. e.printStackTrace();
  273. }
  274. break;
  275. case HCNetSDK.COMM_IPC_AUXALARM_RESULT: //PIR报警、无线报警、呼救报警信息
  276. System.out.println("PIR报警、无线报警、呼救报警触发");
  277. break;
  278. case HCNetSDK.COMM_ISAPI_ALARM: //ISAPI协议报警信息
  279. HCNetSDK.NET_DVR_ALARM_ISAPI_INFO struEventISAPI = new HCNetSDK.NET_DVR_ALARM_ISAPI_INFO();
  280. struEventISAPI.write();
  281. Pointer pEventISAPI = struEventISAPI.getPointer();
  282. pEventISAPI.write(0, pAlarmInfo.getByteArray(0, struEventISAPI.size()), 0, struEventISAPI.size());
  283. struEventISAPI.read();
  284. String sAlarmInfo = new String(pAlarmer.sDeviceIP);
  285. //报警数据类型:0- invalid,1- xml,2- json
  286. sAlarmInfo = "报警设备IP:" + sAlarmInfo + ":ISAPI协议报警信息, 数据格式:" + struEventISAPI.byDataType +
  287. ", 图片个数:" + struEventISAPI.byPicturesNumber;
  288. System.out.println(sAlarmInfo);
  289. //报警数据保存
  290. SimpleDateFormat sf1 = new SimpleDateFormat("yyyyMMddHHmmss");
  291. String curTime1 = sf1.format(new Date());
  292. FileOutputStream foutdata;
  293. try {
  294. String jsonfilename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() + curTime1 + "_ISAPI_Alarm_" + ".json";
  295. foutdata = new FileOutputStream(jsonfilename);
  296. //将字节写入文件
  297. ByteBuffer jsonbuffers = struEventISAPI.pAlarmData.getByteBuffer(0, struEventISAPI.dwAlarmDataLen);
  298. byte[] jsonbytes = new byte[struEventISAPI.dwAlarmDataLen];
  299. jsonbuffers.rewind();
  300. jsonbuffers.get(jsonbytes);
  301. foutdata.write(jsonbytes);
  302. foutdata.close();
  303. } catch (FileNotFoundException e) {
  304. // TODO Auto-generated catch block
  305. e.printStackTrace();
  306. } catch (IOException e) {
  307. // TODO Auto-generated catch block
  308. e.printStackTrace();
  309. }
  310. //图片数据保存
  311. for (int i = 0; i < struEventISAPI.byPicturesNumber; i++) {
  312. HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA struPicData = new HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA();
  313. struPicData.write();
  314. Pointer pPicData = struPicData.getPointer();
  315. pPicData.write(0, struEventISAPI.pPicPackData.getByteArray(i * struPicData.size(), struPicData.size()), 0, struPicData.size());
  316. struPicData.read();
  317. FileOutputStream fout;
  318. try {
  319. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() + curTime1 +
  320. "_ISAPIPic_" + i + "_" + new String(struPicData.szFilename).trim() + ".jpg";
  321. fout = new FileOutputStream(filename);
  322. //将字节写入文件
  323. long offset = 0;
  324. ByteBuffer buffers = struPicData.pPicData.getByteBuffer(offset, struPicData.dwPicLen);
  325. byte[] bytes = new byte[struPicData.dwPicLen];
  326. buffers.rewind();
  327. buffers.get(bytes);
  328. fout.write(bytes);
  329. fout.close();
  330. } catch (FileNotFoundException e) {
  331. // TODO Auto-generated catch block
  332. e.printStackTrace();
  333. } catch (IOException e) {
  334. // TODO Auto-generated catch block
  335. e.printStackTrace();
  336. }
  337. }
  338. break;
  339. case HCNetSDK.COMM_VCA_ALARM: // 智能检测通用报警(Json或者XML数据结构)
  340. sAlarmInfo = new String(pAlarmer.sDeviceIP);
  341. //报警数据类型:0- invalid,1- xml,2- json
  342. sAlarmInfo = "报警设备IP:" + sAlarmInfo;
  343. System.out.println(sAlarmInfo);
  344. SimpleDateFormat sf0 = new SimpleDateFormat("yyyyMMddHHmmss");
  345. String curTime0 = sf0.format(new Date());
  346. FileOutputStream Data;
  347. String jsonfile = "../pic" + new String(pAlarmer.sDeviceIP).trim() + curTime0 + "_VCA_ALARM_" + ".json";
  348. try {
  349. Data = new FileOutputStream(jsonfile);
  350. //将字节写入文件
  351. ByteBuffer dataBuffer = pAlarmInfo.getByteBuffer(0, dwBufLen);
  352. byte[] dataByte = new byte[dwBufLen];
  353. dataBuffer.rewind();
  354. dataBuffer.get(dataByte);
  355. Data.write(dataByte);
  356. Data.close();
  357. } catch (FileNotFoundException e) {
  358. e.printStackTrace();
  359. } catch (IOException e) {
  360. e.printStackTrace();
  361. }
  362. break;
  363. //行为分析信息
  364. case HCNetSDK.COMM_ALARM_RULE:
  365. HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM();
  366. strVcaAlarm.write();
  367. Pointer pVCAInfo = strVcaAlarm.getPointer();
  368. pVCAInfo.write(0, pAlarmInfo.getByteArray(0, strVcaAlarm.size()), 0, strVcaAlarm.size());
  369. strVcaAlarm.read();
  370. switch (strVcaAlarm.struRuleInfo.wEventTypeEx) {
  371. case 1: //穿越警戒面 (越界侦测)
  372. System.out.println("越界侦测报警发生");
  373. strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_TRAVERSE_PLANE.class);
  374. System.out.println("检测目标:"+strVcaAlarm.struRuleInfo.uEventParam.struTraversePlane.byDetectionTarget); //检测目标,0表示所有目标(表示不锁定检测目标,所有目标都将进行检测),其他取值按位表示不同的检测目标:0x01-人,0x02-车
  375. //图片保存
  376. if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) {
  377. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  378. String newName = sf.format(new Date());
  379. FileOutputStream fout;
  380. try {
  381. String filename = "../pic/" + newName + "VCA_TRAVERSE_PLANE" + ".jpg";
  382. fout = new FileOutputStream(filename);
  383. //将字节写入文件
  384. long offset = 0;
  385. ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen);
  386. byte[] bytes = new byte[strVcaAlarm.dwPicDataLen];
  387. buffers.rewind();
  388. buffers.get(bytes);
  389. fout.write(bytes);
  390. fout.close();
  391. } catch (FileNotFoundException e) {
  392. // TODO Auto-generated catch block
  393. e.printStackTrace();
  394. } catch (IOException e) {
  395. // TODO Auto-generated catch block
  396. e.printStackTrace();
  397. }
  398. }
  399. break;
  400. case 2: //目标进入区域
  401. System.out.println("目标进入区域报警发生");
  402. strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class);
  403. System.out.println("检测目标:"+strVcaAlarm.struRuleInfo.uEventParam.struArea.byDetectionTarget);
  404. //图片保存
  405. if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) {
  406. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  407. String newName = sf.format(new Date());
  408. FileOutputStream fout;
  409. try {
  410. String filename = "../pic/" + newName + "_TargetEnter" + ".jpg";
  411. fout = new FileOutputStream(filename);
  412. //将字节写入文件
  413. long offset = 0;
  414. ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen);
  415. byte[] bytes = new byte[strVcaAlarm.dwPicDataLen];
  416. buffers.rewind();
  417. buffers.get(bytes);
  418. fout.write(bytes);
  419. fout.close();
  420. } catch (FileNotFoundException e) {
  421. // TODO Auto-generated catch block
  422. e.printStackTrace();
  423. } catch (IOException e) {
  424. // TODO Auto-generated catch block
  425. e.printStackTrace();
  426. }
  427. }
  428. break;
  429. case 3: //目标离开区域
  430. System.out.println("目标离开区域报警触发");
  431. strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class);
  432. System.out.println("检测目标:"+strVcaAlarm.struRuleInfo.uEventParam.struArea.byDetectionTarget);
  433. //图片保存
  434. if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) {
  435. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  436. String newName = sf.format(new Date());
  437. FileOutputStream fout;
  438. try {
  439. String filename = "../pic/" + newName + "_TargetLeave" + ".jpg";
  440. fout = new FileOutputStream(filename);
  441. //将字节写入文件
  442. long offset = 0;
  443. ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen);
  444. byte[] bytes = new byte[strVcaAlarm.dwPicDataLen];
  445. buffers.rewind();
  446. buffers.get(bytes);
  447. fout.write(bytes);
  448. fout.close();
  449. } catch (FileNotFoundException e) {
  450. // TODO Auto-generated catch block
  451. e.printStackTrace();
  452. } catch (IOException e) {
  453. // TODO Auto-generated catch block
  454. e.printStackTrace();
  455. }
  456. }
  457. break;
  458. case 4: //周界入侵
  459. System.out.println("周界入侵报警发生");
  460. strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_INTRUSION.class);
  461. System.out.println("检测目标:"+strVcaAlarm.struRuleInfo.uEventParam.struIntrusion.byDetectionTarget);
  462. //图片保存
  463. if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) {
  464. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  465. String newName = sf.format(new Date());
  466. FileOutputStream fout;
  467. try {
  468. String filename = "../pic/" + newName + "VCA_INTRUSION" + ".jpg";
  469. fout = new FileOutputStream(filename);
  470. //将字节写入文件
  471. long offset = 0;
  472. ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen);
  473. byte[] bytes = new byte[strVcaAlarm.dwPicDataLen];
  474. buffers.rewind();
  475. buffers.get(bytes);
  476. fout.write(bytes);
  477. fout.close();
  478. } catch (FileNotFoundException e) {
  479. // TODO Auto-generated catch block
  480. e.printStackTrace();
  481. } catch (IOException e) {
  482. // TODO Auto-generated catch block
  483. e.printStackTrace();
  484. }
  485. }
  486. break;
  487. case 5: //徘徊
  488. System.out.println("徘徊事件触发");
  489. break;
  490. case 8: //快速移动(奔跑),
  491. System.out.println("快速移动(奔跑)事件触发");
  492. break;
  493. case 15: //离岗
  494. System.out.println("离岗事件触发");
  495. strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_LEAVE_POSITION.class);
  496. System.out.println(strVcaAlarm.struRuleInfo.uEventParam.struLeavePos.byOnPosition);
  497. //图片保存
  498. if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) {
  499. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  500. String newName = sf.format(new Date());
  501. FileOutputStream fout;
  502. try {
  503. String filename = "../pic/" + newName + "VCA_LEAVE_POSITION_" + ".jpg";
  504. fout = new FileOutputStream(filename);
  505. //将字节写入文件
  506. long offset = 0;
  507. ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen);
  508. byte[] bytes = new byte[strVcaAlarm.dwPicDataLen];
  509. buffers.rewind();
  510. buffers.get(bytes);
  511. fout.write(bytes);
  512. fout.close();
  513. } catch (FileNotFoundException e) {
  514. // TODO Auto-generated catch block
  515. e.printStackTrace();
  516. } catch (IOException e) {
  517. // TODO Auto-generated catch block
  518. e.printStackTrace();
  519. }
  520. }
  521. case 20: //倒地检测
  522. System.out.println("倒地事件触发");
  523. break;
  524. case 44: //玩手机
  525. System.out.println("玩手机报警发生");
  526. //图片保存
  527. if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) {
  528. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  529. String newName = sf.format(new Date());
  530. FileOutputStream fout;
  531. try {
  532. String filename = "../pic/" + newName + "PLAY_CELLPHONE_" + ".jpg";
  533. fout = new FileOutputStream(filename);
  534. //将字节写入文件
  535. long offset = 0;
  536. ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen);
  537. byte[] bytes = new byte[strVcaAlarm.dwPicDataLen];
  538. buffers.rewind();
  539. buffers.get(bytes);
  540. fout.write(bytes);
  541. fout.close();
  542. } catch (FileNotFoundException e) {
  543. // TODO Auto-generated catch block
  544. e.printStackTrace();
  545. } catch (IOException e) {
  546. // TODO Auto-generated catch block
  547. e.printStackTrace();
  548. }
  549. }
  550. break;
  551. case 45: //持续检测
  552. System.out.println("持续检测事件触发");
  553. default:
  554. System.out.println("行为事件类型:" + strVcaAlarm.struRuleInfo.wEventTypeEx);
  555. break;
  556. }
  557. break;
  558. case HCNetSDK.COMM_ALARM_ACS: //门禁主机报警信息
  559. HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO();
  560. strACSInfo.write();
  561. Pointer pACSInfo = strACSInfo.getPointer();
  562. pACSInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size());
  563. strACSInfo.read();
  564. /**门禁事件的详细信息解析,通过主次类型的可以判断当前的具体门禁类型,例如(主类型:0X5 次类型:0x4b 表示人脸认证通过,
  565. 主类型:0X5 次类型:0x4c 表示人脸认证失败)*/
  566. System.out.println("【门禁主机报警信息】卡号:" + new String(strACSInfo.struAcsEventInfo.byCardNo).trim() + ",卡类型:" +
  567. strACSInfo.struAcsEventInfo.byCardType + ",报警主类型:" + Integer.toHexString(strACSInfo.dwMajor) + ",报警次类型:" + Integer.toHexString(strACSInfo.dwMinor));
  568. System.out.println("工号1:" + strACSInfo.struAcsEventInfo.dwEmployeeNo);
  569. //温度信息(如果设备支持测温功能,人脸温度信息从NET_DVR_ACS_EVENT_INFO_EXTEND_V20结构体获取)
  570. if (strACSInfo.byAcsEventInfoExtendV20 == 1) {
  571. HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND_V20 strAcsInfoExV20 = new HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND_V20();
  572. strAcsInfoExV20.write();
  573. Pointer pAcsInfoExV20 = strAcsInfoExV20.getPointer();
  574. pAcsInfoExV20.write(0, strACSInfo.pAcsEventInfoExtendV20.getByteArray(0, strAcsInfoExV20.size()), 0, strAcsInfoExV20.size());
  575. strAcsInfoExV20.read();
  576. System.out.println("实时温度值:" + strAcsInfoExV20.fCurrTemperature);
  577. }
  578. //考勤状态
  579. if (strACSInfo.byAcsEventInfoExtend == 1) {
  580. HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND strAcsInfoEx = new HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND();
  581. strAcsInfoEx.write();
  582. Pointer pAcsInfoEx = strAcsInfoEx.getPointer();
  583. pAcsInfoEx.write(0, strACSInfo.pAcsEventInfoExtend.getByteArray(0, strAcsInfoEx.size()), 0, strAcsInfoEx.size());
  584. strAcsInfoEx.read();
  585. System.out.println("考勤状态:" + strAcsInfoEx.byAttendanceStatus);
  586. System.out.println("工号2:" + new String(strAcsInfoEx.byEmployeeNo).trim());
  587. }
  588. /**
  589. * 报警时间
  590. */
  591. String year = Integer.toString(strACSInfo.struTime.dwYear);
  592. String SwipeTime = year + strACSInfo.struTime.dwMonth + strACSInfo.struTime.dwDay + strACSInfo.struTime.dwHour + strACSInfo.struTime.dwMinute +
  593. strACSInfo.struTime.dwSecond;
  594. if (strACSInfo.dwPicDataLen > 0) {
  595. // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  596. // String newName = sf.format(new Date());
  597. FileOutputStream fout;
  598. try {
  599. /**
  600. * 人脸保存路径
  601. */
  602. String filename = "../pic/" + SwipeTime + "_ACS_Event_" + new String(strACSInfo.struAcsEventInfo.byCardNo).trim() + ".jpg";
  603. File file = new File(filename);
  604. File parentFile = file.getParentFile();
  605. if(!parentFile.exists()){
  606. parentFile.mkdirs();
  607. }
  608. fout = new FileOutputStream(filename);
  609. //将字节写入文件
  610. long offset = 0;
  611. ByteBuffer buffers = strACSInfo.pPicData.getByteBuffer(offset, strACSInfo.dwPicDataLen);
  612. byte[] bytes = new byte[strACSInfo.dwPicDataLen];
  613. buffers.rewind();
  614. buffers.get(bytes);
  615. fout.write(bytes);
  616. fout.close();
  617. } catch (FileNotFoundException e) {
  618. // TODO Auto-generated catch block
  619. e.printStackTrace();
  620. } catch (IOException e) {
  621. // TODO Auto-generated catch block
  622. e.printStackTrace();
  623. }
  624. }
  625. break;
  626. case HCNetSDK.COMM_ID_INFO_ALARM: //身份证信息
  627. HCNetSDK.NET_DVR_ID_CARD_INFO_ALARM strIDCardInfo = new HCNetSDK.NET_DVR_ID_CARD_INFO_ALARM();
  628. strIDCardInfo.write();
  629. Pointer pIDCardInfo = strIDCardInfo.getPointer();
  630. pIDCardInfo.write(0, pAlarmInfo.getByteArray(0, strIDCardInfo.size()), 0, strIDCardInfo.size());
  631. strIDCardInfo.read();
  632. System.out.println("报警主类型:" + Integer.toHexString(strIDCardInfo.dwMajor) + ",报警次类型:" + Integer.toHexString(strIDCardInfo.dwMinor));
  633. /**
  634. * 身份证信息
  635. */
  636. String IDnum = new String(strIDCardInfo.struIDCardCfg.byIDNum).trim();
  637. System.out.println("【身份证信息】:身份证号码:" + IDnum + ",姓名:" +
  638. new String(strIDCardInfo.struIDCardCfg.byName).trim() + ",住址:" + new String(strIDCardInfo.struIDCardCfg.byAddr));
  639. /**
  640. * 报警时间
  641. */
  642. String year1 = Integer.toString(strIDCardInfo.struSwipeTime.wYear);
  643. String SwipeTime1 = year1 + strIDCardInfo.struSwipeTime.byMonth + strIDCardInfo.struSwipeTime.byDay + strIDCardInfo.struSwipeTime.byHour + strIDCardInfo.struSwipeTime.byMinute +
  644. strIDCardInfo.struSwipeTime.bySecond;
  645. /**
  646. * 保存图片
  647. */
  648. //身份证图片
  649. if (strIDCardInfo.dwPicDataLen > 0 || strIDCardInfo.pPicData != null) {
  650. // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  651. // String nowtime = sf.format(new Date());
  652. FileOutputStream fout;
  653. try {
  654. String filename = "../pic/" + SwipeTime1 + "_" + IDnum + ".jpg";
  655. fout = new FileOutputStream(filename);
  656. //将字节写入文件
  657. long offset = 0;
  658. ByteBuffer buffers = strIDCardInfo.pPicData.getByteBuffer(offset, strIDCardInfo.dwPicDataLen);
  659. byte[] bytes = new byte[strIDCardInfo.dwPicDataLen];
  660. buffers.rewind();
  661. buffers.get(bytes);
  662. fout.write(bytes);
  663. fout.close();
  664. } catch (FileNotFoundException e) {
  665. // TODO Auto-generated catch block
  666. e.printStackTrace();
  667. } catch (IOException e) {
  668. // TODO Auto-generated catch block
  669. e.printStackTrace();
  670. }
  671. }
  672. if (strIDCardInfo.dwCapturePicDataLen > 0 || strIDCardInfo.pCapturePicData != null) {
  673. // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  674. // String nowtime = sf.format(new Date());
  675. FileOutputStream fout;
  676. try {
  677. /**
  678. * 人脸图片保存路径
  679. */
  680. String filename = "../pic/" + SwipeTime1 + "_CapturePic_" + ".jpg";
  681. fout = new FileOutputStream(filename);
  682. //将字节写入文件
  683. long offset = 0;
  684. ByteBuffer buffers = strIDCardInfo.pCapturePicData.getByteBuffer(offset, strIDCardInfo.dwCapturePicDataLen);
  685. byte[] bytes = new byte[strIDCardInfo.dwCapturePicDataLen];
  686. buffers.rewind();
  687. buffers.get(bytes);
  688. fout.write(bytes);
  689. fout.close();
  690. } catch (FileNotFoundException e) {
  691. // TODO Auto-generated catch block
  692. e.printStackTrace();
  693. } catch (IOException e) {
  694. // TODO Auto-generated catch block
  695. e.printStackTrace();
  696. }
  697. }
  698. break;
  699. case HCNetSDK.COMM_ALARM_VIDEO_INTERCOM: //可视对讲报警信息
  700. System.out.println("可视对讲报警触发");
  701. HCNetSDK.NET_DVR_VIDEO_INTERCOM_ALARM strVideoIntercomAlarm = new HCNetSDK.NET_DVR_VIDEO_INTERCOM_ALARM();
  702. strVideoIntercomAlarm.write();
  703. Pointer pVideoIntercomAlarm = strVideoIntercomAlarm.getPointer();
  704. pVideoIntercomAlarm.write(0, pAlarmInfo.getByteArray(0, strVideoIntercomAlarm.size()), 0, strVideoIntercomAlarm.size());
  705. strVideoIntercomAlarm.read();
  706. System.out.println("byAlarmType:" + strVideoIntercomAlarm.byAlarmType);
  707. if (strVideoIntercomAlarm.byAlarmType == 1) {
  708. strVideoIntercomAlarm.uAlarmInfo.setType(HCNetSDK.NET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION.class);
  709. strVideoIntercomAlarm.uAlarmInfo.read();
  710. System.out.println("byZoneType :" + strVideoIntercomAlarm.uAlarmInfo.struZoneAlarm.byZoneType);
  711. }
  712. break;
  713. case HCNetSDK.COMM_UPLOAD_VIDEO_INTERCOM_EVENT: //可视对讲事件记录信息
  714. System.out.println("可视对讲事件记录报警触发");
  715. HCNetSDK.NET_DVR_VIDEO_INTERCOM_EVENT strVideoIntercomEvent = new HCNetSDK.NET_DVR_VIDEO_INTERCOM_EVENT();
  716. strVideoIntercomEvent.write();
  717. Pointer pVideoIntercomEvent = strVideoIntercomEvent.getPointer();
  718. pVideoIntercomEvent.write(0, pAlarmInfo.getByteArray(0, strVideoIntercomEvent.size()), 0, strVideoIntercomEvent.size());
  719. strVideoIntercomEvent.read();
  720. System.out.println("byEventType:" + strVideoIntercomEvent.byEventType);
  721. if (strVideoIntercomEvent.byEventType == 1) {
  722. strVideoIntercomEvent.uEventInfo.setType(HCNetSDK.NET_DVR_UNLOCK_RECORD_INFO.class);
  723. strVideoIntercomEvent.uEventInfo.read();
  724. System.out.println("byUnlockType:" + strVideoIntercomEvent.uEventInfo.struUnlockRecord.byUnlockType
  725. + ",byControlSrc:" + new String(strVideoIntercomEvent.uEventInfo.struUnlockRecord.byControlSrc).trim());
  726. }
  727. break;
  728. case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: //实时人脸抓拍上传
  729. System.out.println("UPLOAD_FACESNAP_Alarm");
  730. HCNetSDK.NET_VCA_FACESNAP_RESULT strFaceSnapInfo = new HCNetSDK.NET_VCA_FACESNAP_RESULT();
  731. strFaceSnapInfo.write();
  732. Pointer pFaceSnapInfo = strFaceSnapInfo.getPointer();
  733. pFaceSnapInfo.write(0, pAlarmInfo.getByteArray(0, strFaceSnapInfo.size()), 0, strFaceSnapInfo.size());
  734. strFaceSnapInfo.read();
  735. //事件时间
  736. int dwYear = (strFaceSnapInfo.dwAbsTime >> 26) + 2000;
  737. int dwMonth = (strFaceSnapInfo.dwAbsTime >> 22) & 15;
  738. int dwDay = (strFaceSnapInfo.dwAbsTime >> 17) & 31;
  739. int dwHour = (strFaceSnapInfo.dwAbsTime >> 12) & 31;
  740. int dwMinute = (strFaceSnapInfo.dwAbsTime >> 6) & 63;
  741. int dwSecond = (strFaceSnapInfo.dwAbsTime >> 0) & 63;
  742. String strAbsTime = "" + String.format("%04d", dwYear) +
  743. String.format("%02d", dwMonth) +
  744. String.format("%02d", dwDay) +
  745. String.format("%02d", dwHour) +
  746. String.format("%02d", dwMinute) +
  747. String.format("%02d", dwSecond);
  748. //人脸属性信息
  749. String sFaceAlarmInfo = "Abs时间:" + strAbsTime + ",年龄:" + strFaceSnapInfo.struFeature.byAge +
  750. ",性别:" + strFaceSnapInfo.struFeature.bySex + ",是否戴口罩:" +
  751. strFaceSnapInfo.struFeature.byMask + ",是否微笑:" + strFaceSnapInfo.struFeature.bySmile;
  752. System.out.println("人脸信息:" + sFaceAlarmInfo);
  753. //人脸测温信息
  754. if (strFaceSnapInfo.byAddInfo == 1) {
  755. HCNetSDK.NET_VCA_FACESNAP_ADDINFO strAddInfo = new HCNetSDK.NET_VCA_FACESNAP_ADDINFO();
  756. strAddInfo.write();
  757. Pointer pAddInfo = strAddInfo.getPointer();
  758. pAddInfo.write(0, strFaceSnapInfo.pAddInfoBuffer.getByteArray(0, strAddInfo.size()), 0, strAddInfo.size());
  759. strAddInfo.read();
  760. String sTemperatureInfo = "测温是否开启:" + strAddInfo.byFaceSnapThermometryEnabled + "人脸温度:" + strAddInfo.fFaceTemperature + "温度是否异常"
  761. + strAddInfo.byIsAbnomalTemperature + "报警温度阈值:" + strAddInfo.fAlarmTemperature;
  762. System.out.println("人脸温度信息:" + sTemperatureInfo);
  763. }
  764. try {
  765. SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
  766. String time = df.format(new Date());// new Date()为获取当前系统时间
  767. //人脸图片写文件
  768. FileOutputStream small = new FileOutputStream("../pic/" + time + "small.jpg");
  769. FileOutputStream big = new FileOutputStream("../pic/" + time + "big.jpg");
  770. try {
  771. small.write(strFaceSnapInfo.pBuffer1.getByteArray(0, strFaceSnapInfo.dwFacePicLen), 0, strFaceSnapInfo.dwFacePicLen);
  772. small.close();
  773. } catch (IOException ex) {
  774. ex.printStackTrace();
  775. }
  776. try {
  777. big.write(strFaceSnapInfo.pBuffer2.getByteArray(0, strFaceSnapInfo.dwBackgroundPicLen), 0, strFaceSnapInfo.dwBackgroundPicLen);
  778. big.close();
  779. } catch (IOException ex) {
  780. ex.printStackTrace();
  781. }
  782. } catch (FileNotFoundException ex) {
  783. ex.printStackTrace();
  784. }
  785. break;
  786. case HCNetSDK.COMM_SNAP_MATCH_ALARM: //人脸黑名单比对报警
  787. HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM strFaceSnapMatch = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM();
  788. strFaceSnapMatch.write();
  789. Pointer pFaceSnapMatch = strFaceSnapMatch.getPointer();
  790. pFaceSnapMatch.write(0, pAlarmInfo.getByteArray(0, strFaceSnapMatch.size()), 0, strFaceSnapMatch.size());
  791. strFaceSnapMatch.read();
  792. //比对结果,0-保留,1-比对成功,2-比对失败
  793. String sFaceSnapMatchInfo = "比对结果:" + strFaceSnapMatch.byContrastStatus + ",相似度:" + strFaceSnapMatch.fSimilarity;
  794. System.out.println(sFaceSnapMatchInfo);
  795. if (strFaceSnapMatch.struBlockListInfo.dwFDIDLen > 0) {
  796. long offset1 = 0;
  797. ByteBuffer buffers1 = strFaceSnapMatch.struBlockListInfo.pFDID.getByteBuffer(offset1, strFaceSnapMatch.struBlockListInfo.dwFDIDLen);
  798. byte[] bytes1 = new byte[strFaceSnapMatch.struBlockListInfo.dwFDIDLen];
  799. buffers1.get(bytes1);
  800. System.out.println("人脸库ID:" + new String(bytes1));
  801. }
  802. if (strFaceSnapMatch.struBlockListInfo.dwPIDLen > 0) {
  803. long offset2 = 0;
  804. ByteBuffer buffers2 = strFaceSnapMatch.struBlockListInfo.pPID.getByteBuffer(offset2, strFaceSnapMatch.struBlockListInfo.dwPIDLen);
  805. byte[] bytes2 = new byte[strFaceSnapMatch.struBlockListInfo.dwPIDLen];
  806. buffers2.get(bytes2);
  807. System.out.println("图片ID:" + new String(bytes2));
  808. }
  809. if (strFaceSnapMatch.struBlockListInfo.struBlockListInfo.dwFCAdditionInfoLen > 0) {
  810. //抓拍库附加信息解析(解析人脸测温温度,人脸温度存放在附件信息的XML报文中,节点: <currTemperature> )
  811. SimpleDateFormat sf2 = new SimpleDateFormat("yyyyMMddHHmmss");
  812. String curTime2 = sf2.format(new Date());
  813. FileOutputStream AddtionData;
  814. String AddtionFile = "../pic" + new String(pAlarmer.sDeviceIP).trim() + curTime2 + "_FCAdditionInfo_" + ".xml";
  815. try {
  816. Data = new FileOutputStream(AddtionFile);
  817. //将字节写入文件
  818. ByteBuffer dataBuffer = strFaceSnapMatch.struBlockListInfo.struBlockListInfo.pFCAdditionInfoBuffer.getByteBuffer(0, strFaceSnapMatch.struBlockListInfo.struBlockListInfo.dwFCAdditionInfoLen);
  819. byte[] dataByte = new byte[dwBufLen];
  820. dataBuffer.rewind();
  821. dataBuffer.get(dataByte);
  822. Data.write(dataByte);
  823. Data.close();
  824. } catch (FileNotFoundException e) {
  825. e.printStackTrace();
  826. } catch (IOException e) {
  827. e.printStackTrace();
  828. }
  829. }
  830. //人脸比对报警图片保存,图片格式二进制
  831. if ((strFaceSnapMatch.dwSnapPicLen > 0) && (strFaceSnapMatch.byPicTransType == 0)) {
  832. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  833. String newName = sf.format(new Date());
  834. FileOutputStream fout;
  835. try {
  836. String filename = "../pic/" + newName + "_pSnapPicBuffer" + ".jpg";
  837. fout = new FileOutputStream(filename);
  838. //将字节写入文件
  839. long offset = 0;
  840. ByteBuffer buffers = strFaceSnapMatch.pSnapPicBuffer.getByteBuffer(offset, strFaceSnapMatch.dwSnapPicLen);
  841. byte[] bytes = new byte[strFaceSnapMatch.dwSnapPicLen];
  842. buffers.rewind();
  843. buffers.get(bytes);
  844. fout.write(bytes);
  845. fout.close();
  846. } catch (FileNotFoundException e) {
  847. // TODO Auto-generated catch block
  848. e.printStackTrace();
  849. } catch (IOException e) {
  850. // TODO Auto-generated catch block
  851. e.printStackTrace();
  852. }
  853. }
  854. if ((strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen > 0) && (strFaceSnapMatch.byPicTransType == 0)) {
  855. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  856. String newName = sf.format(new Date());
  857. FileOutputStream fout;
  858. try {
  859. String filename = "../pic/" + newName + "_struSnapInfo_pBuffer1" + ".jpg";
  860. fout = new FileOutputStream(filename);
  861. //将字节写入文件
  862. long offset = 0;
  863. ByteBuffer buffers = strFaceSnapMatch.struSnapInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen);
  864. byte[] bytes = new byte[strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen];
  865. buffers.rewind();
  866. buffers.get(bytes);
  867. fout.write(bytes);
  868. fout.close();
  869. } catch (FileNotFoundException e) {
  870. // TODO Auto-generated catch block
  871. e.printStackTrace();
  872. } catch (IOException e) {
  873. // TODO Auto-generated catch block
  874. e.printStackTrace();
  875. }
  876. }
  877. if ((strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen > 0) && (strFaceSnapMatch.byPicTransType == 0)) {
  878. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  879. String newName = sf.format(new Date());
  880. FileOutputStream fout;
  881. try {
  882. String filename = "../pic/" + newName + "_fSimilarity_" + strFaceSnapMatch.fSimilarity + "_struBlackListInfo_pBuffer1" + ".jpg";
  883. fout = new FileOutputStream(filename);
  884. //将字节写入文件
  885. long offset = 0;
  886. ByteBuffer buffers = strFaceSnapMatch.struBlockListInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen);
  887. byte[] bytes = new byte[strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen];
  888. buffers.rewind();
  889. buffers.get(bytes);
  890. fout.write(bytes);
  891. fout.close();
  892. } catch (FileNotFoundException e) {
  893. // TODO Auto-generated catch block
  894. e.printStackTrace();
  895. } catch (IOException e) {
  896. // TODO Auto-generated catch block
  897. e.printStackTrace();
  898. }
  899. }
  900. //人脸比对报警图片保存,图片格式URL格式
  901. if ((strFaceSnapMatch.dwSnapPicLen > 0) && (strFaceSnapMatch.byPicTransType == 1)) {
  902. long offset = 0;
  903. ByteBuffer buffers = strFaceSnapMatch.pSnapPicBuffer.getByteBuffer(offset, strFaceSnapMatch.dwSnapPicLen);
  904. byte[] bytes = new byte[strFaceSnapMatch.dwSnapPicLen];
  905. buffers.rewind();
  906. buffers.get(bytes);
  907. String SnapPicUrl = new String(bytes);
  908. System.out.println("抓拍图URL:" + SnapPicUrl);
  909. }
  910. if ((strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen > 0) && (strFaceSnapMatch.byPicTransType == 1)) {
  911. long offset = 0;
  912. ByteBuffer buffers = strFaceSnapMatch.struSnapInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen);
  913. byte[] bytes = new byte[strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen];
  914. buffers.rewind();
  915. buffers.get(bytes);
  916. String SnapPicUrl = new String(bytes);
  917. System.out.println("抓拍人脸子图URL:" + SnapPicUrl);
  918. }
  919. if ((strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen > 0) && (strFaceSnapMatch.byPicTransType == 1)) {
  920. long offset = 0;
  921. ByteBuffer buffers = strFaceSnapMatch.struBlockListInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen);
  922. byte[] bytes = new byte[strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen];
  923. buffers.rewind();
  924. buffers.get(bytes);
  925. String SnapPicUrl = new String(bytes);
  926. System.out.println("人脸库人脸图的URL:" + SnapPicUrl);
  927. }
  928. break;
  929. // 客流量报警信息
  930. case HCNetSDK.COMM_ALARM_PDC:
  931. HCNetSDK.NET_DVR_PDC_ALRAM_INFO strPDCResult = new HCNetSDK.NET_DVR_PDC_ALRAM_INFO();
  932. strPDCResult.write();
  933. Pointer pPDCInfo = strPDCResult.getPointer();
  934. pPDCInfo.write(0, pAlarmInfo.getByteArray(0, strPDCResult.size()), 0, strPDCResult.size());
  935. strPDCResult.read();
  936. // byMode=0-实时统计结果(联合体中struStatFrame有效),
  937. if (strPDCResult.byMode == 0) {
  938. strPDCResult.uStatModeParam.setType(HCNetSDK.NET_DVR_STATFRAME.class);
  939. String sAlarmPDC0Info = "实时客流量统计,进入人数:" + strPDCResult.dwEnterNum + ",离开人数:" + strPDCResult.dwLeaveNum +
  940. ", byMode:" + strPDCResult.byMode + ", dwRelativeTime:" + strPDCResult.uStatModeParam.struStatFrame.dwRelativeTime +
  941. ", dwAbsTime:" + strPDCResult.uStatModeParam.struStatFrame.dwAbsTime;
  942. }
  943. // byMode=1-周期统计结果(联合体中struStatTime有效),
  944. if (strPDCResult.byMode == 1) {
  945. strPDCResult.uStatModeParam.setType(HCNetSDK.NET_DVR_STATTIME.class);
  946. String strtmStart = "" + String.format("%04d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwYear) +
  947. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwMonth) +
  948. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwDay) +
  949. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwHour) +
  950. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwMinute) +
  951. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwSecond);
  952. String strtmEnd = "" + String.format("%04d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwYear) +
  953. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwMonth) +
  954. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwDay) +
  955. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwHour) +
  956. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwMinute) +
  957. String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwSecond);
  958. String sAlarmPDC1Info = "周期性客流量统计,进入人数:" + strPDCResult.dwEnterNum + ",离开人数:" + strPDCResult.dwLeaveNum +
  959. ", byMode:" + strPDCResult.byMode + ", tmStart:" + strtmStart + ",tmEnd :" + strtmEnd;
  960. }
  961. break;
  962. case HCNetSDK.COMM_ALARM_V30: //移动侦测、视频丢失、遮挡、IO信号量等报警信息(V3.0以上版本支持的设备)
  963. HCNetSDK.NET_DVR_ALARMINFO_V30 struAlarmInfo = new HCNetSDK.NET_DVR_ALARMINFO_V30();
  964. struAlarmInfo.write();
  965. Pointer pAlarmInfo_V30 = struAlarmInfo.getPointer();
  966. pAlarmInfo_V30.write(0, pAlarmInfo.getByteArray(0, struAlarmInfo.size()), 0, struAlarmInfo.size());
  967. struAlarmInfo.read();
  968. System.out.println("报警类型:" + struAlarmInfo.dwAlarmType); // 3-移动侦测
  969. break;
  970. case HCNetSDK.COMM_ALARM_V40: //移动侦测、视频丢失、遮挡、IO信号量等报警信息,报警数据为可变长
  971. HCNetSDK.NET_DVR_ALARMINFO_V40 struAlarmInfoV40 = new HCNetSDK.NET_DVR_ALARMINFO_V40();
  972. struAlarmInfoV40.write();
  973. Pointer pAlarmInfoV40 = struAlarmInfoV40.getPointer();
  974. pAlarmInfoV40.write(0, pAlarmInfo.getByteArray(0, struAlarmInfoV40.size()), 0, struAlarmInfoV40.size());
  975. struAlarmInfoV40.read();
  976. System.out.println("报警类型:" + struAlarmInfoV40.struAlarmFixedHeader.dwAlarmType); //3-移动侦测
  977. break;
  978. case HCNetSDK.COMM_THERMOMETRY_ALARM: //温度报警信息
  979. HCNetSDK.NET_DVR_THERMOMETRY_ALARM struTemInfo = new HCNetSDK.NET_DVR_THERMOMETRY_ALARM();
  980. struTemInfo.write();
  981. Pointer pTemInfo = struTemInfo.getPointer();
  982. pTemInfo.write(0, pAlarmInfo.getByteArray(0, struTemInfo.size()), 0, struTemInfo.size());
  983. struTemInfo.read();
  984. String sThermAlarmInfo = "规则ID:" + struTemInfo.byRuleID + "预置点号:" + struTemInfo.wPresetNo + "报警等级:" + struTemInfo.byAlarmLevel + "报警类型:" +
  985. struTemInfo.byAlarmType + "当前温度:" + struTemInfo.fCurrTemperature;
  986. System.out.println(sThermAlarmInfo);
  987. //可见光图片保存
  988. if ((struTemInfo.dwPicLen > 0) && (struTemInfo.byPicTransType == 0)) {
  989. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  990. String newName = sf.format(new Date());
  991. FileOutputStream fout;
  992. try {
  993. String filename = "../pic/" + newName + "_" + struTemInfo.fCurrTemperature + ".jpg";
  994. fout = new FileOutputStream(filename);
  995. //将字节写入文件
  996. long offset = 0;
  997. ByteBuffer buffers = struTemInfo.pPicBuff.getByteBuffer(offset, struTemInfo.dwPicLen);
  998. byte[] bytes = new byte[struTemInfo.dwPicLen];
  999. buffers.rewind();
  1000. buffers.get(bytes);
  1001. fout.write(bytes);
  1002. fout.close();
  1003. } catch (FileNotFoundException e) {
  1004. // TODO Auto-generated catch block
  1005. e.printStackTrace();
  1006. } catch (IOException e) {
  1007. // TODO Auto-generated catch block
  1008. e.printStackTrace();
  1009. }
  1010. }
  1011. if ((struTemInfo.dwThermalPicLen > 0) && (struTemInfo.byPicTransType == 0)) {
  1012. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  1013. String newName = sf.format(new Date());
  1014. FileOutputStream fout;
  1015. try {
  1016. String filename = "../pic/" + newName + "_" + "_ThermalPiC" + ".jpg";
  1017. fout = new FileOutputStream(filename);
  1018. //将字节写入文件
  1019. long offset = 0;
  1020. ByteBuffer buffers = struTemInfo.pThermalPicBuff.getByteBuffer(offset, struTemInfo.dwThermalPicLen);
  1021. byte[] bytes = new byte[struTemInfo.dwThermalPicLen];
  1022. buffers.rewind();
  1023. buffers.get(bytes);
  1024. fout.write(bytes);
  1025. fout.close();
  1026. } catch (FileNotFoundException e) {
  1027. // TODO Auto-generated catch block
  1028. e.printStackTrace();
  1029. } catch (IOException e) {
  1030. // TODO Auto-generated catch block
  1031. e.printStackTrace();
  1032. }
  1033. }
  1034. break;
  1035. case HCNetSDK.COMM_THERMOMETRY_DIFF_ALARM: //温差检测报警
  1036. HCNetSDK.NET_DVR_THERMOMETRY_DIFF_ALARM strThermDiffAlarm = new HCNetSDK.NET_DVR_THERMOMETRY_DIFF_ALARM();
  1037. strThermDiffAlarm.write();
  1038. Pointer pTemDiffInfo = strThermDiffAlarm.getPointer();
  1039. pTemDiffInfo.write(0, pAlarmInfo.getByteArray(0, strThermDiffAlarm.size()), 0, strThermDiffAlarm.size());
  1040. strThermDiffAlarm.read();
  1041. String sThremDiffInfo = "通道号:" + strThermDiffAlarm.dwChannel + ",报警规则:" + strThermDiffAlarm.byAlarmRule + ",当前温差:" + strThermDiffAlarm.fCurTemperatureDiff;
  1042. System.out.println(sThremDiffInfo);
  1043. //可见光图片保存
  1044. if ((strThermDiffAlarm.dwPicLen > 0) && (strThermDiffAlarm.byPicTransType == 0)) {
  1045. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  1046. String newName = sf.format(new Date());
  1047. FileOutputStream fout;
  1048. try {
  1049. String filename = "../pic/" + newName + "_" + strThermDiffAlarm.fCurTemperatureDiff + ".jpg";
  1050. fout = new FileOutputStream(filename);
  1051. //将字节写入文件
  1052. long offset = 0;
  1053. ByteBuffer buffers = strThermDiffAlarm.pPicBuff.getByteBuffer(offset, strThermDiffAlarm.dwPicLen);
  1054. byte[] bytes = new byte[strThermDiffAlarm.dwPicLen];
  1055. buffers.rewind();
  1056. buffers.get(bytes);
  1057. fout.write(bytes);
  1058. fout.close();
  1059. } catch (FileNotFoundException e) {
  1060. // TODO Auto-generated catch block
  1061. e.printStackTrace();
  1062. } catch (IOException e) {
  1063. // TODO Auto-generated catch block
  1064. e.printStackTrace();
  1065. }
  1066. }
  1067. //热成像图片保存
  1068. if ((strThermDiffAlarm.dwThermalPicLen > 0) && (strThermDiffAlarm.byPicTransType == 0)) {
  1069. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  1070. String newName = sf.format(new Date());
  1071. FileOutputStream fout;
  1072. try {
  1073. String filename = "../pic/" + newName + "_" + "_ThermalDiffPiC" + ".jpg";
  1074. fout = new FileOutputStream(filename);
  1075. //将字节写入文件
  1076. long offset = 0;
  1077. ByteBuffer buffers = strThermDiffAlarm.pThermalPicBuff.getByteBuffer(offset, strThermDiffAlarm.dwThermalPicLen);
  1078. byte[] bytes = new byte[strThermDiffAlarm.dwThermalPicLen];
  1079. buffers.rewind();
  1080. buffers.get(bytes);
  1081. fout.write(bytes);
  1082. fout.close();
  1083. } catch (FileNotFoundException e) {
  1084. // TODO Auto-generated catch block
  1085. e.printStackTrace();
  1086. } catch (IOException e) {
  1087. // TODO Auto-generated catch block
  1088. e.printStackTrace();
  1089. }
  1090. }
  1091. break;
  1092. case HCNetSDK.COMM_ALARM_SHIPSDETECTION: //船只检测报警
  1093. HCNetSDK.NET_DVR_SHIPSDETECTION_ALARM struShipAlarm = new HCNetSDK.NET_DVR_SHIPSDETECTION_ALARM();
  1094. struShipAlarm.write();
  1095. Pointer pShipAlarm = struShipAlarm.getPointer();
  1096. pShipAlarm.write(0, pAlarmInfo.getByteArray(0, struShipAlarm.size()), 0, struShipAlarm.size());
  1097. struShipAlarm.read();
  1098. String sShipAlarm = "绝对时间:" + struShipAlarm.dwAbsTime + ",正跨越检测线的船只数:" + struShipAlarm.byShipsNum + ",船头检测的船只数 :" + struShipAlarm.byShipsNumHead
  1099. + ", 船尾检测的船只数 :" + struShipAlarm.byShipsNumEnd;
  1100. System.out.println(sShipAlarm);
  1101. //可见光图片保存
  1102. if ((struShipAlarm.dwPicLen > 0) && (struShipAlarm.byPicTransType == 0)) {
  1103. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  1104. String newName = sf.format(new Date());
  1105. FileOutputStream fout;
  1106. try {
  1107. String filename = "../pic/" + newName + "_ShipAlarm" + ".jpg";
  1108. fout = new FileOutputStream(filename);
  1109. //将字节写入文件
  1110. long offset = 0;
  1111. ByteBuffer buffers = struShipAlarm.pPicBuffer.getByteBuffer(offset, struShipAlarm.dwPicLen);
  1112. byte[] bytes = new byte[struShipAlarm.dwPicLen];
  1113. buffers.rewind();
  1114. buffers.get(bytes);
  1115. fout.write(bytes);
  1116. fout.close();
  1117. } catch (FileNotFoundException e) {
  1118. // TODO Auto-generated catch block
  1119. e.printStackTrace();
  1120. } catch (IOException e) {
  1121. // TODO Auto-generated catch block
  1122. e.printStackTrace();
  1123. }
  1124. }
  1125. //热成像图片保存
  1126. if ((struShipAlarm.dwThermalPicLen > 0) && (struShipAlarm.byPicTransType == 0)) {
  1127. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  1128. String newName = sf.format(new Date());
  1129. FileOutputStream fout;
  1130. try {
  1131. String filename = "../pic/" + newName + "_" + "_ThermalShipAlarm" + ".jpg";
  1132. fout = new FileOutputStream(filename);
  1133. //将字节写入文件
  1134. long offset = 0;
  1135. ByteBuffer buffers = struShipAlarm.pThermalPicBuffer.getByteBuffer(offset, struShipAlarm.dwThermalPicLen);
  1136. byte[] bytes = new byte[struShipAlarm.dwThermalPicLen];
  1137. buffers.rewind();
  1138. buffers.get(bytes);
  1139. fout.write(bytes);
  1140. fout.close();
  1141. } catch (FileNotFoundException e) {
  1142. // TODO Auto-generated catch block
  1143. e.printStackTrace();
  1144. } catch (IOException e) {
  1145. // TODO Auto-generated catch block
  1146. e.printStackTrace();
  1147. }
  1148. }
  1149. break;
  1150. case HCNetSDK.COMM_FIREDETECTION_ALARM://烟火检测
  1151. HCNetSDK.NET_DVR_FIREDETECTION_ALARM struFireDecAlarm = new HCNetSDK.NET_DVR_FIREDETECTION_ALARM();
  1152. struFireDecAlarm.write();
  1153. Pointer pFireDecAlarm = struFireDecAlarm.getPointer();
  1154. pFireDecAlarm.write(0, pAlarmInfo.getByteArray(0, struFireDecAlarm.size()), 0, struFireDecAlarm.size());
  1155. struFireDecAlarm.read();
  1156. String sFireDecAlarmInfo = "绝对时间:" + struFireDecAlarm.dwAbsTime + ",报警子类型:" + struFireDecAlarm.byAlarmSubType + ",火点最高温度 :" +
  1157. struFireDecAlarm.wFireMaxTemperature + ",火点目标距离:" + struFireDecAlarm.wTargetDistance;
  1158. System.out.println(sFireDecAlarmInfo);
  1159. //可见光图片保存
  1160. if ((struFireDecAlarm.dwVisiblePicLen > 0) && (struFireDecAlarm.byPicTransType == 0)) {
  1161. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  1162. String newName = sf.format(new Date());
  1163. FileOutputStream fout;
  1164. try {
  1165. String filename = "../pic/" + newName + "_FireDecAlarm" + ".jpg";
  1166. fout = new FileOutputStream(filename);
  1167. //将字节写入文件
  1168. long offset = 0;
  1169. ByteBuffer buffers = struFireDecAlarm.pVisiblePicBuf.getByteBuffer(offset, struFireDecAlarm.dwVisiblePicLen);
  1170. byte[] bytes = new byte[struFireDecAlarm.dwVisiblePicLen];
  1171. buffers.rewind();
  1172. buffers.get(bytes);
  1173. fout.write(bytes);
  1174. fout.close();
  1175. } catch (FileNotFoundException e) {
  1176. // TODO Auto-generated catch block
  1177. e.printStackTrace();
  1178. } catch (IOException e) {
  1179. // TODO Auto-generated catch block
  1180. e.printStackTrace();
  1181. }
  1182. }
  1183. //热成像图片保存
  1184. if ((struFireDecAlarm.dwPicDataLen > 0) && (struFireDecAlarm.byPicTransType == 0)) {
  1185. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
  1186. String newName = sf.format(new Date());
  1187. FileOutputStream fout;
  1188. try {
  1189. String filename = "../pic/" + newName + "_" + "_ThermalFireAlarm" + ".jpg";
  1190. fout = new FileOutputStream(filename);
  1191. //将字节写入文件
  1192. long offset = 0;
  1193. ByteBuffer buffers = struFireDecAlarm.pBuffer.getByteBuffer(offset, struFireDecAlarm.dwPicDataLen);
  1194. byte[] bytes = new byte[struFireDecAlarm.dwPicDataLen];
  1195. buffers.rewind();
  1196. buffers.get(bytes);
  1197. fout.write(bytes);
  1198. fout.close();
  1199. } catch (FileNotFoundException e) {
  1200. // TODO Auto-generated catch block
  1201. e.printStackTrace();
  1202. } catch (IOException e) {
  1203. // TODO Auto-generated catch block
  1204. e.printStackTrace();
  1205. }
  1206. }
  1207. break;
  1208. case HCNetSDK.COMM_UPLOAD_AIOP_VIDEO: //AI开放平台接入视频检测报警信息
  1209. System.out.println("AI开放平台接入视频检测报警上传");
  1210. HCNetSDK.NET_AIOP_VIDEO_HEAD struAIOPVideo = new HCNetSDK.NET_AIOP_VIDEO_HEAD();
  1211. struAIOPVideo.write();
  1212. Pointer pAIOPVideo = struAIOPVideo.getPointer();
  1213. pAIOPVideo.write(0, pAlarmInfo.getByteArray(0, struAIOPVideo.size()), 0, struAIOPVideo.size());
  1214. struAIOPVideo.read();
  1215. System.out.println("视频任务ID" + new String(struAIOPVideo.szTaskID));
  1216. System.out.println("通道号:" + struAIOPVideo.dwChannel);
  1217. System.out.println("检测模型包ID" + new String(struAIOPVideo.szMPID));
  1218. String strTime = String.format("%04d", struAIOPVideo.struTime.wYear) +
  1219. String.format("%02d", struAIOPVideo.struTime.wMonth) +
  1220. String.format("%02d", struAIOPVideo.struTime.wDay) +
  1221. String.format("%02d", struAIOPVideo.struTime.wHour) +
  1222. String.format("%02d", struAIOPVideo.struTime.wMinute) +
  1223. String.format("%02d", struAIOPVideo.struTime.wSecond) +
  1224. String.format("%03d", struAIOPVideo.struTime.wMilliSec);
  1225. //AIOPData数据
  1226. if (struAIOPVideo.dwAIOPDataSize > 0) {
  1227. FileOutputStream fout;
  1228. try {
  1229. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() +
  1230. "_" + strTime + "_VideoData.json";
  1231. fout = new FileOutputStream(filename);
  1232. //将字节写入文件
  1233. long offset = 0;
  1234. ByteBuffer buffers = struAIOPVideo.pBufferAIOPData.getByteBuffer(offset, struAIOPVideo.dwAIOPDataSize);
  1235. byte[] bytes = new byte[struAIOPVideo.dwAIOPDataSize];
  1236. buffers.rewind();
  1237. buffers.get(bytes);
  1238. fout.write(bytes);
  1239. fout.close();
  1240. } catch (FileNotFoundException e) {
  1241. // TODO Auto-generated catch block
  1242. e.printStackTrace();
  1243. } catch (IOException e) {
  1244. // TODO Auto-generated catch block
  1245. e.printStackTrace();
  1246. }
  1247. }
  1248. //图片数据保存
  1249. if (struAIOPVideo.dwPictureSize > 0) {
  1250. FileOutputStream fout;
  1251. try {
  1252. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() +
  1253. "_" + strTime + "_VideoPic.jpg";
  1254. fout = new FileOutputStream(filename);
  1255. //将字节写入文件
  1256. long offset = 0;
  1257. ByteBuffer buffers = struAIOPVideo.pBufferPicture.getByteBuffer(offset, struAIOPVideo.dwPictureSize);
  1258. byte[] bytes = new byte[struAIOPVideo.dwPictureSize];
  1259. buffers.rewind();
  1260. buffers.get(bytes);
  1261. fout.write(bytes);
  1262. fout.close();
  1263. } catch (FileNotFoundException e) {
  1264. // TODO Auto-generated catch block
  1265. e.printStackTrace();
  1266. } catch (IOException e) {
  1267. // TODO Auto-generated catch block
  1268. e.printStackTrace();
  1269. }
  1270. }
  1271. break;
  1272. case HCNetSDK.COMM_UPLOAD_AIOP_PICTURE: //AI开放平台接入图片检测报警信息
  1273. System.out.println("AI开放平台接入图片检测报警上传");
  1274. HCNetSDK.NET_AIOP_PICTURE_HEAD struAIOPPic = new HCNetSDK.NET_AIOP_PICTURE_HEAD();
  1275. struAIOPPic.write();
  1276. Pointer pAIOPPic = struAIOPPic.getPointer();
  1277. pAIOPPic.write(0, pAlarmInfo.getByteArray(0, struAIOPPic.size()), 0, struAIOPPic.size());
  1278. struAIOPPic.read();
  1279. System.out.println("图片ID:" + new String(struAIOPPic.szPID));
  1280. System.out.println("检测模型包ID:" + new String(struAIOPPic.szMPID));
  1281. String strPicTime = "" + String.format("%04d", struAIOPPic.struTime.wYear) +
  1282. String.format("%02d", struAIOPPic.struTime.wMonth) +
  1283. String.format("%02d", struAIOPPic.struTime.wDay) +
  1284. String.format("%02d", struAIOPPic.struTime.wHour) +
  1285. String.format("%02d", struAIOPPic.struTime.wMinute) +
  1286. String.format("%02d", struAIOPPic.struTime.wSecond) +
  1287. String.format("%03d", struAIOPPic.struTime.wMilliSec);
  1288. //AIOPData数据
  1289. if (struAIOPPic.dwAIOPDataSize > 0) {
  1290. FileOutputStream fout;
  1291. try {
  1292. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() +
  1293. "_" + strPicTime + "_AIO_PicData.json";
  1294. fout = new FileOutputStream(filename);
  1295. //将字节写入文件
  1296. long offset = 0;
  1297. ByteBuffer buffers = struAIOPPic.pBufferAIOPData.getByteBuffer(offset, struAIOPPic.dwAIOPDataSize);
  1298. byte[] bytes = new byte[struAIOPPic.dwAIOPDataSize];
  1299. buffers.rewind();
  1300. buffers.get(bytes);
  1301. fout.write(bytes);
  1302. fout.close();
  1303. } catch (FileNotFoundException e) {
  1304. // TODO Auto-generated catch block
  1305. e.printStackTrace();
  1306. } catch (IOException e) {
  1307. // TODO Auto-generated catch block
  1308. e.printStackTrace();
  1309. }
  1310. }
  1311. break;
  1312. //AI开放平台接入轮询抓图检测报警信息
  1313. case HCNetSDK.COMM_UPLOAD_AIOP_POLLING_SNAP:
  1314. System.out.println("AI开放平台接入轮询抓图检测报警事件上传");
  1315. HCNetSDK.NET_AIOP_POLLING_SNAP_HEAD strAiopPollingPic = new HCNetSDK.NET_AIOP_POLLING_SNAP_HEAD();
  1316. strAiopPollingPic.write();
  1317. Pointer pAiopPollingPic = strAiopPollingPic.getPointer();
  1318. pAiopPollingPic.write(0, pAlarmInfo.getByteArray(0, strAiopPollingPic.size()), 0, strAiopPollingPic.size());
  1319. strAiopPollingPic.read();
  1320. System.out.println("通道号:" + strAiopPollingPic.dwChannel);
  1321. System.out.println("轮询抓图任务ID:" + new String(strAiopPollingPic.szTaskID));
  1322. String strPollingPicTime = "" + String.format("%04d", strAiopPollingPic.struTime.wYear) +
  1323. String.format("%02d", strAiopPollingPic.struTime.wMonth) +
  1324. String.format("%02d", strAiopPollingPic.struTime.wDay) +
  1325. String.format("%02d", strAiopPollingPic.struTime.wHour) +
  1326. String.format("%02d", strAiopPollingPic.struTime.wMinute) +
  1327. String.format("%02d", strAiopPollingPic.struTime.wSecond) +
  1328. String.format("%03d", strAiopPollingPic.struTime.wMilliSec);
  1329. //AIOPData数据保存
  1330. if (strAiopPollingPic.dwAIOPDataSize > 0) {
  1331. FileOutputStream fout;
  1332. try {
  1333. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() +
  1334. "_" + strPollingPicTime + "_PollingPicData.json";
  1335. fout = new FileOutputStream(filename);
  1336. //将字节写入文件
  1337. long offset = 0;
  1338. ByteBuffer buffers = strAiopPollingPic.pBufferAIOPData.getByteBuffer(offset, strAiopPollingPic.dwAIOPDataSize);
  1339. byte[] bytes = new byte[strAiopPollingPic.dwAIOPDataSize];
  1340. buffers.rewind();
  1341. buffers.get(bytes);
  1342. fout.write(bytes);
  1343. fout.close();
  1344. } catch (FileNotFoundException e) {
  1345. // TODO Auto-generated catch block
  1346. e.printStackTrace();
  1347. } catch (IOException e) {
  1348. // TODO Auto-generated catch block
  1349. e.printStackTrace();
  1350. }
  1351. }
  1352. //轮询抓图图片保存
  1353. if (strAiopPollingPic.dwPictureSize > 0) {
  1354. FileOutputStream fout;
  1355. try {
  1356. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() +
  1357. "_" + strPollingPicTime + "_PollingPic.jpg";
  1358. fout = new FileOutputStream(filename);
  1359. //将字节写入文件
  1360. long offset = 0;
  1361. ByteBuffer buffers = strAiopPollingPic.pBufferPicture.getByteBuffer(offset, strAiopPollingPic.dwPictureSize);
  1362. byte[] bytes = new byte[strAiopPollingPic.dwPictureSize];
  1363. buffers.rewind();
  1364. buffers.get(bytes);
  1365. fout.write(bytes);
  1366. fout.close();
  1367. } catch (FileNotFoundException e) {
  1368. // TODO Auto-generated catch block
  1369. e.printStackTrace();
  1370. } catch (IOException e) {
  1371. // TODO Auto-generated catch block
  1372. e.printStackTrace();
  1373. }
  1374. }
  1375. break;
  1376. //AI开放平台接入轮询视频检测报警信息
  1377. case HCNetSDK.COMM_UPLOAD_AIOP_POLLING_VIDEO:
  1378. System.out.println("AI开放平台接入轮询视频检测报警事件上传");
  1379. HCNetSDK.NET_AIOP_POLLING_VIDEO_HEAD strAiopPollingVideo = new HCNetSDK.NET_AIOP_POLLING_VIDEO_HEAD();
  1380. strAiopPollingVideo.write();
  1381. Pointer pAiopPollingVideo = strAiopPollingVideo.getPointer();
  1382. pAiopPollingVideo.write(0, pAlarmInfo.getByteArray(0, strAiopPollingVideo.size()), 0, strAiopPollingVideo.size());
  1383. strAiopPollingVideo.read();
  1384. System.out.println("通道号:" + strAiopPollingVideo.dwChannel);
  1385. System.out.println("轮询视频任务ID:" + new String(strAiopPollingVideo.szTaskID));
  1386. String AiopPollingVideoTime = "" + String.format("%04d", strAiopPollingVideo.struTime.wYear) +
  1387. String.format("%02d", strAiopPollingVideo.struTime.wMonth) +
  1388. String.format("%02d", strAiopPollingVideo.struTime.wDay) +
  1389. String.format("%02d", strAiopPollingVideo.struTime.wHour) +
  1390. String.format("%02d", strAiopPollingVideo.struTime.wMinute) +
  1391. String.format("%02d", strAiopPollingVideo.struTime.wSecond) +
  1392. String.format("%03d", strAiopPollingVideo.struTime.wMilliSec);
  1393. //AIOPData数据保存
  1394. if (strAiopPollingVideo.dwAIOPDataSize > 0) {
  1395. FileOutputStream fout;
  1396. try {
  1397. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() +
  1398. "_" + AiopPollingVideoTime + "_PollingVideoData.json";
  1399. fout = new FileOutputStream(filename);
  1400. //将字节写入文件
  1401. long offset = 0;
  1402. ByteBuffer buffers = strAiopPollingVideo.pBufferAIOPData.getByteBuffer(offset, strAiopPollingVideo.dwAIOPDataSize);
  1403. byte[] bytes = new byte[strAiopPollingVideo.dwAIOPDataSize];
  1404. buffers.rewind();
  1405. buffers.get(bytes);
  1406. fout.write(bytes);
  1407. fout.close();
  1408. } catch (FileNotFoundException e) {
  1409. // TODO Auto-generated catch block
  1410. e.printStackTrace();
  1411. } catch (IOException e) {
  1412. // TODO Auto-generated catch block
  1413. e.printStackTrace();
  1414. }
  1415. }
  1416. //对应分析图片数据
  1417. if (strAiopPollingVideo.dwPictureSize > 0) {
  1418. FileOutputStream fout;
  1419. try {
  1420. String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() +
  1421. "_" + AiopPollingVideoTime + "_PollingVideo.jpg";
  1422. fout = new FileOutputStream(filename);
  1423. //将字节写入文件
  1424. long offset = 0;
  1425. ByteBuffer buffers = strAiopPollingVideo.pBufferPicture.getByteBuffer(offset, strAiopPollingVideo.dwPictureSize);
  1426. byte[] bytes = new byte[strAiopPollingVideo.dwPictureSize];
  1427. buffers.rewind();
  1428. buffers.get(bytes);
  1429. fout.write(bytes);
  1430. fout.close();
  1431. } catch (FileNotFoundException e) {
  1432. // TODO Auto-generated catch block
  1433. e.printStackTrace();
  1434. } catch (IOException e) {
  1435. // TODO Auto-generated catch block
  1436. e.printStackTrace();
  1437. }
  1438. }
  1439. break;
  1440. default:
  1441. System.out.println("报警类型" + Integer.toHexString(lCommand));
  1442. break;
  1443. }
  1444. }
  1445. }