package com.netsdk.demo.customize; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.structure.DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO; import com.netsdk.lib.structure.NET_TIME_EX; import com.netsdk.lib.utils.Initialization; import com.sun.jna.Pointer; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.UUID; import static com.netsdk.lib.NetSDKLib.EVENT_IVS_TRUCKNOTCLEAN_FOR_PRMA; /** * @author 291189 * @version 1.0 * @description GIP221208031 * @date 2022/12/20 14:10 */ public class TrucknotcleanDemo extends Initialization { int channel=-1; NetSDKLib.LLong attachHandle=new NetSDKLib.LLong(0); /** * 订阅智能任务 */ public NetSDKLib.LLong AttachEventRealLoadPic() { // 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回 if(attachHandle.longValue()!=0){ this.DetachEventRealLoadPic(); } // 需要图片 int bNeedPicture = 1; attachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, channel, EVENT_IVS_TRUCKNOTCLEAN_FOR_PRMA, bNeedPicture, AnalyzerDataCB.getInstance(), null, null); if (attachHandle.longValue() != 0) { System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channel); } else { System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Failed!LastError = %s\n", channel, ToolKits.getErrorCode()); } return attachHandle; } /** * 报警事件(智能)回调 */ private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { private final File picturePath; private static AnalyzerDataCB instance; private AnalyzerDataCB() { picturePath = new File("./AnalyzerPicture/"); if (!picturePath.exists()) { picturePath.mkdirs(); } } public static AnalyzerDataCB getInstance() { if (instance == null) { synchronized (AnalyzerDataCB.class) { if (instance == null) { instance = new AnalyzerDataCB(); } } } return instance; } @Override public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) { if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) { return -1; } switch (dwAlarmType) { case EVENT_IVS_TRUCKNOTCLEAN_FOR_PRMA : { System.out.println("工程车未清洗"); DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO msg = new DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); // 通道号 int nChannelID = msg.nChannelID; System.out.println("nChannelID:" + nChannelID); //事件名称 byte[] szName = msg.szName; try { System.out.println("szName:" + new String(szName,encode)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //相对事件时间戳(单位是毫秒) double pts = msg.PTS; System.out.println("pts:" + new Date((long) pts)); //UTC时间 NET_TIME_EX UTC = msg.UTC; System.out.println("UTC:" + UTC.toStringTime()); NetSDKLib.NET_MSG_OBJECT stuObject = msg.stuObject; //物体上相关的带0结束符文本,比如车牌,集装箱号等等 byte[] szText = stuObject.szText; byte[] szObjectSubType = stuObject.szObjectSubType;// 物体子类别,根据不同的物体类型,可以取以下子类型: try { System.out.println("szText:"+new String(szText,encode)); System.out.println("szObjectSubType:"+new String(szObjectSubType,encode)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } SavePlatePic(stuObject,pBuffer,dwBufSize); int bSceneImage = msg.bSceneImage; if(bSceneImage==1){ NetSDKLib.SCENE_IMAGE_INFO_EX stuSceneImage = msg.stuSceneImage; if ( stuSceneImage.nLength > 0) { String senceExPicture = picturePath + "\\" + System.currentTimeMillis() + "senceEx.jpg"; ToolKits.savePicture(pBuffer, stuSceneImage.nOffSet, stuSceneImage.nLength, senceExPicture); } } break; } default: System.out.println("其他事件--------------------"+ dwAlarmType); break; } return 0; } // 2014年后,陆续有设备版本,支持单独传车牌小图,小图附录在pBuffer后面。 private void SavePlatePic(NetSDKLib.NET_MSG_OBJECT stuObject, Pointer pBuffer, int dwBufSize) { // 保存大图 if (pBuffer != null && dwBufSize > 0) { String bigPicture = picturePath + "\\" + "Big_" + UUID.randomUUID().toString() + ".jpg"; ToolKits.savePicture(pBuffer, 0, dwBufSize, bigPicture); } // 保存小图 if (stuObject == null) { return; } System.out.println("stuObject.bPicEnble:"+stuObject.bPicEnble); if (stuObject.bPicEnble == 1) { //根据pBuffer中数据偏移保存小图图片文件 int picLength = stuObject.stPicInfo.dwFileLenth; if (picLength > 0) { String smallPicture = picturePath + "\\" + "small_" + UUID.randomUUID().toString() + ".jpg"; ToolKits.savePicture(pBuffer, stuObject.stPicInfo.dwOffSet, picLength, smallPicture); } } } } /** * 停止侦听智能事件 */ public void DetachEventRealLoadPic() { if (this.attachHandle.longValue() != 0) { netSdk.CLIENT_StopLoadPic(this.attachHandle); } } public void RunTest() { System.out.println("Run Test"); CaseMenu menu = new CaseMenu();; menu.addItem((new CaseMenu.Item(this , "AttachEventRealLoadPic" , "AttachEventRealLoadPic"))); menu.addItem((new CaseMenu.Item(this , "DetachEventRealLoadPic" , "DetachEventRealLoadPic"))); menu.run(); } public static void main(String[] args) { TrucknotcleanDemo demo=new TrucknotcleanDemo(); InitTest("172.12.1.54",37777,"admin","admin123"); demo.RunTest(); LoginOut(); } }