package com.dahua.netsdk.lib.callback.impl; import java.io.ByteArrayInputStream; import java.io.File; import java.nio.charset.Charset; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.dahua.netsdk.lib.Utils; import com.dahua.netsdk.lib.enumeration.EM_EVENT_IVS_TYPE; import com.dahua.netsdk.lib.structure.*; import com.sun.jna.Pointer; import com.dahua.netsdk.lib.NetSDKLib; import com.dahua.netsdk.lib.ToolKits; import com.ycl.common.constant.GlobalQueue; import com.ycl.entity.video.VideoAlarmReport; import com.ycl.entity.video.VideoPoint; import com.ycl.service.caseHandler.IViolationsService; import com.ycl.service.caseHandler.impl.ViolationsServiceImpl; import com.ycl.service.oss.OssService; import com.ycl.service.oss.impl.OssServiceImpl; import com.ycl.service.redis.RedisService; import com.ycl.service.video.IVideoAlarmReportService; import com.ycl.service.video.impl.IVideoPointService; import com.ycl.service.video.impl.VideoAlarmReportServiceImpl; import com.ycl.service.video.impl.VideoPointServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * 智能报警事件回调 */ @Component public class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { private final File picturePath; private static AnalyzerDataCB instance; public AnalyzerDataCB() { picturePath = new File("./AnalyzerPicture/"); if (!picturePath.exists()) { picturePath.mkdirs(); } } public static AnalyzerDataCB getInstance() { if (instance == null) { instance = new AnalyzerDataCB(); } return instance; } /** * @param lAnalyzerHandle 订阅句柄 * @param dwAlarmType 事件类型枚举 * @param pAlarmInfo 事件信息,具体结构体视枚举而定,每个事件类型对应不同的事件结构体 * @param pBuffer 图片信息 * @param dwBufSize 图片长度 * @param dwUser 用户自定义数据 * @param nSequence 表示上传的相同图片情况,为0时表示是第一次出现,为2表示最后一次出现或仅出现一次,为1表示此次之后还有 * @param reserved 表示当前回调数据的状态, * 为0表示当前数据为实时数据,为1表示当前回调数据是离线数据,为2时表示离线数据传送结束 * @return */ public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) { VideoAlarmReport videoAlarmReport = VideoAlarmReport.builder().ip("172.28.194.186").port(37777).user("admin").password("scdx@123").build(); if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) { return -1; } NetSDKLib.NET_EVENT_FILE_INFO stuFileInfo = null; NetSDKLib.NET_PIC_INFO stPicInfo = null; System.out.println("接收到事件报警类型: " + dwAlarmType); // 1-机动车违停 2-非机动车违停 3-非法广告 4-群体事件 5-粘贴广告 6-违规撑伞 7-占道经营 8-店外经营 9-垃圾桶满溢 10-打包垃圾 11-暴露垃圾 12-沿街晾晒 13-乱堆物料 14-违规户外广告 switch (Objects.requireNonNull(EM_EVENT_IVS_TYPE.getEventType(dwAlarmType))) { case EVENT_IVS_PARKINGDETECTION: // 非法停车事件 { NetSDKLib.DEV_EVENT_PARKINGDETECTION_INFO msg = new NetSDKLib.DEV_EVENT_PARKINGDETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); stuFileInfo = msg.stuFileInfo; stPicInfo = msg.stuObject.stPicInfo; System.out.printf("【非法停车事件】 时间(UTC):%s 通道号:%d 开始时间:%s 结束时间:%s 事件触发累计次数:%d 事件源设备唯一标识:%s \n", msg.UTC, msg.nChannelID, msg.stuObject.stuStartTime, msg.stuObject.stuEndTime, msg.nOccurrenceCount, new String(msg.szSourceDevice)); break; } case EVENT_IVS_FIGHTDETECTION: // 斗殴事件 { NetSDKLib.DEV_EVENT_FIGHT_INFO msg = new NetSDKLib.DEV_EVENT_FIGHT_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); String Picture = picturePath + "\\" + System.currentTimeMillis() + ".jpg"; ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture); // System.out.println(" 斗殴事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID); break; } case EVENT_IVS_RIOTERDETECTION: // 聚众事件 { NetSDKLib.DEV_EVENT_RIOTERL_INFO msg = new NetSDKLib.DEV_EVENT_RIOTERL_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); stuFileInfo = msg.stuFileInfo; stPicInfo = msg.stuObjectIDs[0].stPicInfo; // 取第一个 System.out.printf("【聚众事件】 时间(UTC):%s 通道号:%d 检测到的物体个数:%d 事件触发累计次数:%d 事件源设备唯一标识:%s \n", msg.UTC, msg.nChannelID, msg.nObjectNum, msg.nOccurrenceCount, new String(msg.szSourceDevice)); break; } case EVENT_IVS_MAN_NUM_DETECTION: /// < 立体视觉区域内人数统计事件 { NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); // System.out.println(" 立体视觉区域内人数统计事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID + " 区域人员列表数量:" // + msg.nManListCount + " 人员身高:" + msg.stuManList[0].nStature); break; } case EVENT_IVS_CROWDDETECTION: /// < 人群密度检测事件 { NetSDKLib.DEV_EVENT_CROWD_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_CROWD_DETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); // System.out.println(" 人群密度检测事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID); break; } case EVENT_IVS_CITY_MOTORPARKING: /// 1 城市机动车违停事件 { NetSDKLib.DEV_EVENT_CITY_MOTORPARKING_INFO info = new NetSDKLib.DEV_EVENT_CITY_MOTORPARKING_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("机动车乱停放"); stuFileInfo = info.stuFileInfo; // System.out.println(" 城市机动车违停事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违停持续时长(单位秒):" // + info.nParkingDuration + "检测到的物体个数:" + info.nObjectNum); // if (stuFileInfo != null) { // 保存图片 // String bigPicture = picturePath + File.separator // + String.format("Big_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType, // stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex, // stuFileInfo.bFileType, stuFileInfo.nGroupId); // ToolKits.savePicture(pBuffer, 0, dwBufSize, bigPicture); // if (stPicInfo != null && stPicInfo.dwFileLenth > 0) { // String smallPicture = picturePath + File.separator // + String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType, // stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex, // stuFileInfo.bFileType, stuFileInfo.nGroupId); // ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture); // } // } // if (msg.nImageInfoNum > 0) { // System.out.println("Picture Arr got, number +" + msg.nImageInfoNum); // NET_IMAGE_INFO_EX2[] pstuImageInfo = new NET_IMAGE_INFO_EX2[msg.nImageInfoNum]; // for (int i = 0; i < msg.nImageInfoNum; i++) { // pstuImageInfo[i] = new NET_IMAGE_INFO_EX2(); // } // ToolKits.GetPointerDataToStructArr(msg.pstuImageInfo, pstuImageInfo); // for (int i = 0; i < msg.nImageInfoNum; i++) { // System.out.println("pstuImageInfo[" + i + "].nOffset:" + pstuImageInfo[i].nOffset); // System.out.println("pstuImageInfo[" + i + "].nLength:" + pstuImageInfo[i].nLength); // if (pstuImageInfo != null && pstuImageInfo[i].nLength > 0) { // System.out.println("pstuImageInfo[" + i + "] picture received!"); // String bigPicture = picturePath + "\\" + System.currentTimeMillis() // + "related_MOTORPARKING_pstuImageInfo_" + i + ".jpg"; // ToolKits.savePicture(pBuffer, pstuImageInfo[i].nOffset, pstuImageInfo[i].nLength, bigPicture); // } // } // // } break; } case EVENT_IVS_CITY_NONMOTORPARKING: /// 2 城市非机动车违停事件 { NetSDKLib.DEV_EVENT_CITY_NONMOTORPARKING_INFO info = new NetSDKLib.DEV_EVENT_CITY_NONMOTORPARKING_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // System.out.println(JSON.toJSONString(info)); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("非机动车乱停放"); stuFileInfo = info.stuFileInfo; // System.out.println( // " 城市非机动车违停事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "检测到的物体个数:" + info.nObjectNum); break; } case EVENT_IVS_HOLD_UMBRELLA: /// 6 违规撑伞检测事件 { NetSDKLib.DEV_EVENT_HOLD_UMBRELLA_INFO info = new NetSDKLib.DEV_EVENT_HOLD_UMBRELLA_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("违规撑伞"); stuFileInfo = info.stuFileInfo; // System.out.println( // " 违规撑伞检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)" + info.nViolationDuration); break; } case EVENT_IVS_SHOPPRESENCE: /// 7 占道经营 { NetSDKLib.DEV_EVENT_SHOPPRESENCE_INFO info = new NetSDKLib.DEV_EVENT_SHOPPRESENCE_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("占道经营"); stuFileInfo = info.stuFileInfo; // System.out.println(" 占道经营检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)" // + info.nViolationDuration + "检测到的物体个数" + info.nObjectNum); break; } case EVENT_IVS_DUSTBIN_OVER_FLOW: /// 9 垃圾桶满溢检测事件 { NetSDKLib.DEV_EVENT_DUSTBIN_OVER_FLOW_INFO info = new NetSDKLib.DEV_EVENT_DUSTBIN_OVER_FLOW_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("垃圾箱满溢"); stuFileInfo = info.stuFileInfo; // System.out.println(" 垃圾桶满溢检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)" // + info.nViolationDuration + "检测到的物体个数" + info.nObjectNum); break; } case EVENT_IVS_GARBAGE_PLASTICBAG: /// 10 打包垃圾 { NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO info = new NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("打包垃圾"); stuFileInfo = info.stuFileInfo; // System.out.println(" 打包垃圾检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)" // + info.nViolationDuration + "检测到的物体个数" + info.nObjectNum); break; } case EVENT_IVS_DOOR_FRONT_DIRTY: /// < 门前脏乱检测事件 { NetSDKLib.DEV_EVENT_DOOR_FRONT_DIRTY_INFO msg = new NetSDKLib.DEV_EVENT_DOOR_FRONT_DIRTY_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); stuFileInfo = msg.stuFileInfo; // System.out.println(" 门前脏乱检测事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID + "违法持续时长(单位秒)" // + msg.nViolationDuration + "检测到的物体个数" + msg.nObjectNum); break; } case EVENT_IVS_GARBAGE_EXPOSURE: /// 11 垃圾暴露检测事件 { NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO info = new NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("暴露垃圾"); stuFileInfo = info.stuFileInfo; // System.out.println(" 垃圾暴露检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)" // + info.nViolationDuration + "检测到的物体个数" + info.nObjectNum); break; } case EVENT_IVS_VIOLENT_THROW_DETECTION: /// < 暴力抛物事件事件 { NetSDKLib.DEV_EVENT_VIOLENT_THROW_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_VIOLENT_THROW_DETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); if (msg.stuSceneImage != null && msg.stuSceneImage.nLength > 0) { String bigPicture = picturePath + "\\" + System.currentTimeMillis() + "big.jpg"; ToolKits.savePicture(pBuffer, msg.stuSceneImage.nOffSet, msg.stuSceneImage.nLength, bigPicture); } stuFileInfo = msg.stuFileInfo; // System.out.println(" 暴力抛物事件事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID + "暴力抛物检测区域名称" // + new String(msg.szRegionName, Charset.forName(Utils.getPlatformEncode()))); break; } case EVENT_IVS_SHOP_WINDOW_POST:// 橱窗张贴事件 { DEV_EVENT_SHOP_WINDOW_POST_INFO info = new DEV_EVENT_SHOP_WINDOW_POST_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); stuFileInfo = info.stuFileInfo; // System.out.println(" 橱窗张贴事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 商铺地址: " // + new String(info.szShopAddress, Charset.forName(Utils.getPlatformEncode())).trim() + " 违法持续时间: " // + info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum); for (int i = 0; i < info.nObjectNum; i++) { stPicInfo = info.stuObjects[i].stPicInfo; if (stPicInfo != null && stPicInfo.dwFileLenth > 0) { String smallPicture = picturePath + File.separator + String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType, stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex, stuFileInfo.bFileType, stuFileInfo.nGroupId); ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture); } } break; } case EVENT_IVS_STREET_SUNCURE: // 12 沿街晾晒事件 { DEV_EVENT_STREET_SUNCURE_INFO info = new DEV_EVENT_STREET_SUNCURE_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("沿街晾挂"); stuFileInfo = info.stuFileInfo; // System.out.println(" 沿街晾晒事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 违法持续时间: " // + info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum); break; } case EVENT_IVS_OUTDOOR_ADVERTISEMENT: // 14 户外广告事件 { DEV_EVENT_OUTDOOR_ADVERTISEMENT_INFO info = new DEV_EVENT_OUTDOOR_ADVERTISEMENT_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("违规户外广告"); stuFileInfo = info.stuFileInfo; // System.out.println(" 户外广告事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 违法持续时间: " // + info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum); break; } case EVENT_IVS_HUDDLE_MATERIAL:// 13 乱堆物料检测事件 id 648 乱堆物料 { DEV_EVENT_HUDDLE_MATERIAL_INFO info = new DEV_EVENT_HUDDLE_MATERIAL_INFO(); ToolKits.GetPointerData(pAlarmInfo, info); // videoAlarmReport.setAlarmObj(JSON.toJSONString(info)); videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond)); videoAlarmReport.setChannel(String.valueOf(info.nChannelID)); videoAlarmReport.setAlarmId(String.valueOf(info.nEventID)); videoAlarmReport.setAlarmName("乱堆物料"); stuFileInfo = info.stuFileInfo; // System.out.println(" 乱堆物料检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 违法持续时间: " // + info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum); // for (int i = 0; i < info.nObjectNum; i++) { // stPicInfo = info.stuObjects[i].stPicInfo; // if (stPicInfo != null && stPicInfo.dwFileLenth > 0) { // String smallPicture = picturePath + File.separator // + String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType, // stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex, // stuFileInfo.bFileType, stuFileInfo.nGroupId); // ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture); // } // } break; } case EVENT_IVS_TRASH_WITHOUT_COVER_DETECTION: //垃圾桶未盖盖子检测事件 { System.out.println("Trash without cover Event received."); DEV_EVENT_TRASH_WITHOUT_COVER_DETECTION_INFO trashEvent = new DEV_EVENT_TRASH_WITHOUT_COVER_DETECTION_INFO(); ToolKits.GetPointerDataToStruct(pAlarmInfo, 0, trashEvent); String date = trashEvent.UTC.toStringTime(); // System.out.println("nChannelID = " + trashEvent.nChannelID); // System.out.println("szName(GBK) = " + new String(trashEvent.szName, Charset.forName("GBK"))); // System.out.println("szName(UTF-8) = " + new String(trashEvent.szName, Charset.forName("UTF-8"))); // System.out.println("nImageInfoNum = " + trashEvent.nImageInfoNum); // System.out.println("UTC = " + trashEvent.UTC.toStringTime()); // save the picture String imageName = "trashEvent_" + trashEvent.UTC.toStringTitle() + ".jpg"; String savePath = picturePath + "/" + imageName; ToolKits.savePicture(pBuffer, dwBufSize, savePath); // System.out.println("save picture to " + savePath); break; } default: { System.out.println("Other Event received: " + dwAlarmType); break; } } if (stuFileInfo != null) { // 保存图片 // String bigPicture = picturePath + File.separator // + String.format("Big_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType, stuFileInfo.stuFileTime.toStringTitle(), // stuFileInfo.bCount, stuFileInfo.bIndex, stuFileInfo.bFileType, stuFileInfo.nGroupId); // ToolKits.savePicture(pBuffer, 0, dwBufSize, bigPicture); // if (stPicInfo != null && stPicInfo.dwFileLenth > 0) { // String smallPicture = picturePath + File.separator // + String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType, // stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex, // stuFileInfo.bFileType, stuFileInfo.nGroupId); // ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture); // } // try { byte[] bytes = pBuffer.getByteArray(0, dwBufSize); videoAlarmReport.setPicByte(bytes); // } catch (Exception ex) { // System.out.println("保存图片错误:"); // System.out.println(ex); // } } if (!StringUtils.isEmpty(videoAlarmReport.getAlarmName())) GlobalQueue.add(videoAlarmReport); return 0; } }