先说开发:
直接将他的64位包中的依赖放到项目根路径里面,然后将他java demo中的HCNetSDK.java复制到自己项目中。自己去他官网下载,或者用我的分享链接下载:
https://download.csdn.net/download/wu__peng/13686259
(里面有依赖的jar包,海康威视的dll,还有HCNetSDK.java文件)
(里面有依赖的jar包,海康威视的dll,还有HCNetSDK.java文件)
(里面有依赖的jar包,海康威视的dll,还有HCNetSDK.java文件)
调用的话可以参考我的代码:
/**
* @description: 抓拍
**/
public class CameraManager {
private static final String BASE_FILE_URL = "D:\\resource\\";
private static Logger logger = LoggerFactory.getLogger(CameraManager.class);
private static HCNetSDK sdk = HCNetSDK.INSTANCE;
//用户登录ID,值为0,1,2...
private NativeLong userId = new NativeLong(-1);
// start channel number
private NativeLong startChan = new NativeLong(-1);
private String ip;
private short port;
private String userName;
private String pwd;
/**
* 设置对象登录信息
* @param ip
* @param port
* @param username
* @param pwd
*/
public void setLoginInfo(String ip, short port, String username, String pwd) {
this.ip = ip;
this.port = port;
this.userName = username;
this.pwd = pwd;
}
/**
* 先设置对象登录信息,然后才能调用login方法
*/
private void login(){
CheckDataUtils.isBlank(this.userName, "请先设置登录信息");
//sdk初始化
if (!sdk.NET_DVR_Init()){
logger.error("海康SDK初始化失败!" + sdk.NET_DVR_GetLastError());
}
//注册设备
HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
//登录
this.userId = sdk.NET_DVR_Login_V30(this.ip, this.port, this.userName, this.pwd, deviceInfo);
if (this.userId.intValue() < 0){
logger.error("摄像头用户登录失败!Err:" + sdk.NET_DVR_GetLastError());
}
this.startChan.setValue(deviceInfo.byStartChan);
}
/**
* 抓拍
*/
public String takePic(String fileName) {
if (this.userId.intValue() < 0 || startChan.intValue() < 0) {
logger.info("执行海康摄像机登录,ip[{}],port[{}],username[{}].",this.ip, this.port, this.userName);
this.login();
}
logger.info("准备拍照,userId:[{}],startChan:[{}]",this.userId.intValue(), this.startChan.intValue());
// 拍照
HCNetSDK.NET_DVR_JPEGPARA strJpeg = new HCNetSDK.NET_DVR_JPEGPARA();
// 图像参数
strJpeg.wPicQuality = 0;
strJpeg.wPicSize = 2;
// 文件保存操作(创建每日文件夹)
String dateFolder = DateUtils.format(new Date(), "yyyyMMdd");
String folderUrl = BASE_FILE_URL + dateFolder;
File folder = new File(folderUrl);
if (!folder.exists()) {
folder.mkdirs();
}
// 文件全路径
String filePath = folderUrl + "\\" + fileName + ".jpg";
//尝试用NET_DVR_CaptureJPEGPicture_NEW方法,但不是报43就是JDK崩溃....
boolean b = sdk.NET_DVR_CaptureJPEGPicture(this.userId, this.startChan, strJpeg, filePath);
// 单帧数据捕获图片(抓拍成功返回图片路径,失败则不处理)
if(!b){
System.out.println("抓拍失败!" + " err: " + sdk.NET_DVR_GetLastError());
return "";
}
else{
System.out.println("抓拍成功");
return filePath;
}
}
/**
* 退出dll注册
*/
public void logout(){
sdk.NET_DVR_Logout(this.userId);
sdk.NET_DVR_Cleanup();
this.userId.setValue(-1);
}
}
重点就这样了,基本就这样了,其他的自己操作吧。(PS:还有那个他自己的jar包也要导入到工程里面)
打包的话:
springboot jar包启动它找不到那些你的dll依赖,没法,你需要去设置jna路径,设置了他就知道了,启动命令例如:
java -jar -Djna.library.path=D:\resource\libs -Xms512m -Xmx1024m app.jar
设置jna路径,中间那个路径就是你的dll(海康的库文件存放路径)。
设置jna路径,中间那个路径就是你的dll(海康的库文件存放路径)。
设置jna路径,中间那个路径就是你的dll(海康的库文件存放路径)。
完事;