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.CFG_TRAFFIC_OVERSPEED_INFO; import com.netsdk.lib.structure.CFG_TRAFFIC_UNDERSPEED_INFO; import com.netsdk.lib.utils.Initialization; import com.sun.jna.Memory; import java.io.UnsupportedEncodingException; /** * @author 291189 * @version 1.0 * @description ERR220831112 * @date 2022/9/7 14:44 */ public class VideoAnalyseRuleNewDemo extends Initialization { /** * 查询和修改智能规则配置信息 */ public void getCongigRuleInfo() { int channel = 0; // 通道号 String command = NetSDKLib.CFG_CMD_ANALYSERULE;//视频分析规则配置(对应 CFG_ANALYSERULES_INFO) int ruleCount = 10; // 事件规则个数 NetSDKLib.CFG_RULE_INFO[] ruleInfo = new NetSDKLib.CFG_RULE_INFO[ruleCount]; for (int i = 0; i < ruleCount; i++) { ruleInfo[i] = new NetSDKLib.CFG_RULE_INFO(); } NetSDKLib.CFG_ANALYSERULES_INFO analyse = new NetSDKLib.CFG_ANALYSERULES_INFO(); analyse.nRuleLen = 1024 * 1024 * 40; analyse.pRuleBuf = new Memory(1024 * 1024 * 40); // 申请内存 analyse.pRuleBuf.clear(1024 * 1024 * 40); // 查询 if (ToolKits.GetDevConfig(loginHandle, channel, command, analyse)) { int offset = 0; System.out.println("设备返回的事件规则个数:" + analyse.nRuleCount); int count = analyse.nRuleCount < ruleCount ? analyse.nRuleCount : ruleCount; for (int i = 0; i < count; i++) { // 每个视频输入通道对应的所有事件规则:缓冲区pRuleBuf填充多个事件规则信息,每个事件规则信息内容为 CFG_RULE_INFO + // "事件类型对应的规则配置结构体"。 ToolKits.GetPointerDataToStruct(analyse.pRuleBuf, offset, ruleInfo[i]); offset += ruleInfo[0].size(); // 智能规则偏移量 switch (ruleInfo[i].dwRuleType) { //CFG_TRAFFIC_OVERSPEED_INFO case NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED: { //交通违章-超速 System.out.println("交通违章-超速----------------------------"); CFG_TRAFFIC_OVERSPEED_INFO msg = new CFG_TRAFFIC_OVERSPEED_INFO(); ToolKits.GetPointerDataToStruct(analyse.pRuleBuf, offset, msg); int nSpeedUpperLimit = msg.nSpeedUpperLimit; int nSpeedLowerLimit = msg.nSpeedLowerLimit; System.out.println("nSpeedUpperLimit:"+nSpeedUpperLimit); System.out.println("nSpeedLowerLimit:"+nSpeedLowerLimit); msg.nSpeedUpperLimit=200; msg.nSpeedLowerLimit=120; try { System.out.println("szRuleName:"+new String(msg.szRuleName,encode)); String szRuleName = "超速规则111"; ToolKits.ByteArrZero(msg.szRuleName); System.arraycopy(szRuleName.getBytes(encode), 0, msg.szRuleName, 0, szRuleName.getBytes(encode).length); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } ToolKits.SetStructDataToPointer(msg, analyse.pRuleBuf, offset); break; } case NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED: { //交通违章-低速 System.out.println("交通违章-低速-----------------------------"); CFG_TRAFFIC_UNDERSPEED_INFO msg = new CFG_TRAFFIC_UNDERSPEED_INFO(); ToolKits.GetPointerDataToStruct(analyse.pRuleBuf, offset, msg); int nSpeedUpperLimit = msg.nSpeedUpperLimit; int nSpeedLowerLimit = msg.nSpeedLowerLimit; System.out.println("nSpeedUpperLimit:"+nSpeedUpperLimit); System.out.println("nSpeedLowerLimit:"+nSpeedLowerLimit); msg.nSpeedUpperLimit=80; msg.nSpeedLowerLimit=60; try { System.out.println("szRuleName:"+new String(msg.szRuleName,encode)); String szRuleName = "低速规则222"; ToolKits.ByteArrZero(msg.szRuleName); System.arraycopy(szRuleName.getBytes(encode), 0, msg.szRuleName, 0, szRuleName.getBytes(encode).length); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } ToolKits.SetStructDataToPointer(msg, analyse.pRuleBuf, offset); break; } default: break; } offset += ruleInfo[i].nRuleSize; // 智能事件偏移量 } // 设置 if (ToolKits.SetDevConfig(loginHandle, channel, command, analyse)) { System.out.println("修改智能事件规则成功!"); } else { System.err.println("修改智能事件规则失败!" + ToolKits.getErrorCode()); } } else { System.err.println("查询智能事件规则信息失败!" + ToolKits.getErrorCode()); } } /** * 加载测试内容 */ public void RunTest() { CaseMenu menu = new CaseMenu(); menu.addItem(new CaseMenu.Item(this, "getCongigRuleInfo", "getCongigRuleInfo")); menu.run(); } public static void main(String[] args) { Initialization.InitTest("172.24.2.10", 37777, "admin", "admin123"); new VideoAnalyseRuleNewDemo().RunTest(); Initialization.LoginOut(); } }