rev:修改截图功能
This commit is contained in:
@@ -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("线程池未定义");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user