From 47286218286c3b011f8a6eab9ff38fa2671386e6 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 2 Dec 2025 19:45:20 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E4=BF=AE=E6=94=B9=E6=88=AA?= =?UTF-8?q?=E5=9B=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hikvision/HikvisionSnapshotUtil.java | 77 +++++------ .../common/hikvision/Hikvision截图Demo.java | 122 ------------------ 2 files changed, 40 insertions(+), 159 deletions(-) delete mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/Hikvision截图Demo.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/HikvisionSnapshotUtil.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/HikvisionSnapshotUtil.java index 00e5eb8..ef6b2e7 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/HikvisionSnapshotUtil.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/HikvisionSnapshotUtil.java @@ -23,17 +23,19 @@ public class HikvisionSnapshotUtil { public static String channelHttp;//默认 public static Integer channel;//默认1 public static ThreadPoolExecutor threadPoolExecutor; + // HCNetSDK 接口映射 public interface HCNetSDK extends Library { - Hikvision截图Demo.HCNetSDK INSTANCE = Native.load(ins, Hikvision截图Demo.HCNetSDK.class); + HCNetSDK INSTANCE = Native.load(ins, HCNetSDK.class); + //初始化 SDK 库 boolean NET_DVR_Init(); //登录设备(传入设备 IP、端口、用户名、密码),返回一个用户 ID(后续调用都要用) - int NET_DVR_Login_V30(String sDVRIP, short wDVRPort, String sUserName, String sPassword, Hikvision截图Demo.NET_DVR_DEVICEINFO_V30 lpDeviceInfo); + int NET_DVR_Login_V30(String sDVRIP, short wDVRPort, String sUserName, String sPassword, NET_DVR_DEVICEINFO_V30 lpDeviceInfo); //抓拍一张 JPEG 图片保存到本地。 - boolean NET_DVR_CaptureJPEGPicture(int lUserID, int lChannel, Hikvision截图Demo.NET_DVR_JPEGPARA lpJpegPara, String sPicFileName); + boolean NET_DVR_CaptureJPEGPicture(int lUserID, int lChannel, NET_DVR_JPEGPARA lpJpegPara, String sPicFileName); //注销登录。 boolean NET_DVR_Logout(int lUserID); @@ -74,82 +76,83 @@ public class HikvisionSnapshotUtil { } //HCNetSDK 抓图,图片路径允许指定,不指定则走配置 - public static SdkResponse 截图( String imageName) { - String imagePath = "D://vehicle/"+DateUtil.thisYear(); - if (StringUtils.isEmpty(imageName)){ + public static SdkResponse 截图(String imageName) { + String imagePath = "D://vehicle/" + DateUtil.thisYear(); + if (StringUtils.isEmpty(imageName)) { return SdkResponse.requestFail("图片名称未知"); } - String sFileUrl = imagePath+"\\"+imageName; - if (!Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Init()) { + String sFileUrl = imagePath + "\\" + imageName; + if (!HCNetSDK.INSTANCE.NET_DVR_Init()) { return SdkResponse.requestFail("[SDK] 初始化失败"); } - Hikvision截图Demo.NET_DVR_DEVICEINFO_V30 deviceInfo = new Hikvision截图Demo.NET_DVR_DEVICEINFO_V30(); - int userId = Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Login_V30(ip, port, username, password, deviceInfo); + NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30(); + int userId = HCNetSDK.INSTANCE.NET_DVR_Login_V30(ip, port, username, password, deviceInfo); if (userId < 0) { System.err.println("[SDK] 登录失败"); - Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Cleanup(); - return SdkResponse.requestFail("[SDK] 登录失败"); + HCNetSDK.INSTANCE.NET_DVR_Cleanup(); + return SdkResponse.requestFail("[SDK] 登录失败"); } - Hikvision截图Demo.NET_DVR_JPEGPARA jpegPara = new Hikvision截图Demo.NET_DVR_JPEGPARA(); + NET_DVR_JPEGPARA jpegPara = new NET_DVR_JPEGPARA(); // D1 jpegPara.wPicSize = 2; // 一般质量 jpegPara.wPicQuality = 0; //命名规则:任务号+载具号+时间.jpg - boolean result = Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); + boolean result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); if (!result) { - result = Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); + result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); if (result) { System.out.println("[SDK] 抓图成功,保存为 snapshot_sdk.jpg"); } else { System.err.println("[SDK] 抓图失败"); } } - Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Logout(userId); - Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Cleanup(); - return result?SdkResponse.requestOk():SdkResponse.requestFail("[SDK] 最终抓图失败"); + HCNetSDK.INSTANCE.NET_DVR_Logout(userId); + HCNetSDK.INSTANCE.NET_DVR_Cleanup(); + return result ? SdkResponse.requestOk() : SdkResponse.requestFail("[SDK] 最终抓图失败"); } - public static void sync截图(String imageName,String taskCode) { - if (threadPoolExecutor!=null){ - if (StringUtils.isEmpty(imageName)){ + + public static void sync截图(String imageName, String taskCode) { + if (threadPoolExecutor != null) { + if (StringUtils.isEmpty(imageName)) { log.warn("图片名称未定义"); } - String imagePath = HikvisionSnapshotUtil.path+DateUtil.thisYear(); - String sFileUrl = imagePath+"\\"+imageName+"_"+taskCode; - String newFileUrl = imagePath+"\\"+imageName; - if (!Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Init()) { + String imagePath = HikvisionSnapshotUtil.path + DateUtil.thisYear(); + String sFileUrl = imagePath + "\\" + imageName + "_" + taskCode; + String newFileUrl = imagePath + "\\" + imageName; + if (!HCNetSDK.INSTANCE.NET_DVR_Init()) { } - Hikvision截图Demo.NET_DVR_DEVICEINFO_V30 deviceInfo = new Hikvision截图Demo.NET_DVR_DEVICEINFO_V30(); - int userId = Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Login_V30(ip, port, username, password, deviceInfo); + NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30(); + int userId = HCNetSDK.INSTANCE.NET_DVR_Login_V30(ip, port, username, password, deviceInfo); if (userId < 0) { log.warn("[SDK] 登录失败"); - Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Cleanup(); + HCNetSDK.INSTANCE.NET_DVR_Cleanup(); } - Hikvision截图Demo.NET_DVR_JPEGPARA jpegPara = new Hikvision截图Demo.NET_DVR_JPEGPARA(); + NET_DVR_JPEGPARA jpegPara = new NET_DVR_JPEGPARA(); // D1 jpegPara.wPicSize = 2; // 一般质量 jpegPara.wPicQuality = 0; //命名规则:任务号+载具号+时间.jpg try { - boolean result = Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); + boolean result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); if (!result) { - result = Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); + result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl); if (result) { - boolean result2 = Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, newFileUrl); - log.info("[SDK] 抓图成功"+imagePath+":"+imageName); + boolean result2 = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, newFileUrl); + log.info("[SDK] 抓图成功" + imagePath + ":" + imageName); } else { log.warn("[SDK] 抓图失败"); } } - }finally { - Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Logout(userId); - Hikvision截图Demo.HCNetSDK.INSTANCE.NET_DVR_Cleanup(); + } finally { + HCNetSDK.INSTANCE.NET_DVR_Logout(userId); + HCNetSDK.INSTANCE.NET_DVR_Cleanup(); } - }else { + } else { log.warn("线程池未定义"); } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/Hikvision截图Demo.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/Hikvision截图Demo.java deleted file mode 100644 index be0ef0b..0000000 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/hikvision/Hikvision截图Demo.java +++ /dev/null @@ -1,122 +0,0 @@ -package org.nl.common.hikvision; - -import com.sun.jna.Library; -import com.sun.jna.Native; -import com.sun.jna.Structure; - -/** - * @Description 海康摄像机抓图 - * @Author Gengby - * @Date 2025/8/18 - */ -public class Hikvision截图Demo { - - // HCNetSDK 接口映射 - public interface HCNetSDK extends Library { - HCNetSDK INSTANCE = Native.load("C:\\Users\\Administrator\\Desktop\\库文件\\HCNetSDK.dll", HCNetSDK.class); - - //初始化 SDK 库 - boolean NET_DVR_Init(); - - //登录设备(传入设备 IP、端口、用户名、密码),返回一个用户 ID(后续调用都要用) - int NET_DVR_Login_V30(String sDVRIP, short wDVRPort, String sUserName, String sPassword, NET_DVR_DEVICEINFO_V30 lpDeviceInfo); - - //抓拍一张 JPEG 图片保存到本地。 - boolean NET_DVR_CaptureJPEGPicture(int lUserID, int lChannel, NET_DVR_JPEGPARA lpJpegPara, String sPicFileName); - - //注销登录。 - boolean NET_DVR_Logout(int lUserID); - - ////清理 SDK 库 - boolean NET_DVR_Cleanup(); - } - - @Structure.FieldOrder({"sSerialNumber", "byAlarmInPortNum", "byAlarmOutPortNum", "byDiskNum", - "byDVRType", "byChanNum", "byStartChan", "byAudioChanNum", "byIPChanNum"}) - public static class NET_DVR_DEVICEINFO_V30 extends Structure { - //序列号 - public byte[] sSerialNumber = new byte[48]; - //报警输入口个数 - public byte byAlarmInPortNum; - //报警输出口个数 - public byte byAlarmOutPortNum; - //硬盘个数 - public byte byDiskNum; - //DVR 类型 - public byte byDVRType; - //模拟通道数 - public byte byChanNum; - //起始通道号 - public byte byStartChan; - //音频通道数 - public byte byAudioChanNum; - //IP 通道数 - public byte byIPChanNum; - } - - @Structure.FieldOrder({"wPicSize", "wPicQuality"}) - public static class NET_DVR_JPEGPARA extends Structure { - // 0: QCIF, 1: CIF, 2: D1, 3: UXGA... - public short wPicSize; - // 0: 最差, 1: 较差, 2: 一般, 3: 较好, 4:最好 - public short wPicQuality; - } - - //HCNetSDK 抓图 - public static boolean snapshotSdk(String ip, short port, String username, String password, int channel) { - if (!HCNetSDK.INSTANCE.NET_DVR_Init()) { - System.err.println("[SDK] 初始化失败"); - return false; - } - NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30(); - int userId = HCNetSDK.INSTANCE.NET_DVR_Login_V30(ip, port, username, password, deviceInfo); - if (userId < 0) { - System.err.println("[SDK] 登录失败"); - HCNetSDK.INSTANCE.NET_DVR_Cleanup(); - return false; - } - - NET_DVR_JPEGPARA jpegPara = new NET_DVR_JPEGPARA(); - // D1 - jpegPara.wPicSize = 2; - // 一般质量 - jpegPara.wPicQuality = 0; - //命名规则:任务号+载具号+时间.jpg - boolean result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, "E:\\lms\\2025\\snapshot_sdk2.jpg"); - if (result) { - System.out.println("[SDK] 抓图成功,保存为 snapshot_sdk.jpg"); - } else { - System.err.println("[SDK] 抓图失败"); - } - boolean result2 = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, "E:\\lms\\snapshot_sdk3.jpg"); - if (result2) { - System.out.println("[SDK] 抓图成功,保存为 snapshot_sdk.jpg"); - } else { - System.err.println("[SDK] 抓图失败"); - } - - HCNetSDK.INSTANCE.NET_DVR_Logout(userId); - HCNetSDK.INSTANCE.NET_DVR_Cleanup(); - return result; - } - public static void main(String[] args) { - // IP - String ip = "169.254.43.101"; - // 端口号 - int port = 8000; - // 账号 - String username = "admin"; - // 密码 - String password = "nl1314520"; - // HTTP 通道号 - String channelHttp = "101"; - // SDK 通道号(一般是 1) - int channelSdk = 1; - - Hikvision截图Demo.snapshotSdk(ip, (short) port, username, password, channelSdk); - SdkResponse response = HikvisionSnapshotUtil.截图("照片名字"); - if (!response.getSuc()){ - System.out.println(response.getMessage()); - } - } -}