Browse Source

增加Nvr控制摄像头跳转和拍照

master
hsc 5 months ago
parent
commit
750a3bf3b7
4 changed files with 104 additions and 6 deletions
  1. +10
    -0
      src/main/java/com/inspect/nvr/domain/Infrared/Camera.java
  2. +2
    -1
      src/main/java/com/inspect/nvr/service/HikVisionService.java
  3. +87
    -3
      src/main/java/com/inspect/nvr/service/impl/HikVisionServiceImpl.java
  4. +5
    -2
      src/main/resources/application.yml

+ 10
- 0
src/main/java/com/inspect/nvr/domain/Infrared/Camera.java View File

@ -27,4 +27,14 @@ public class Camera {
private String Ulr;
private String NvrIp;
private int nvrPort;
private String nvrUserName;
private String nvrPassword;
private int channel;
}

+ 2
- 1
src/main/java/com/inspect/nvr/service/HikVisionService.java View File

@ -44,5 +44,6 @@ public interface HikVisionService {
InputStream downloadCsv(String filePath);
AjaxResult NvrCameraAngleJump(Camera camera);
public AjaxResult NvrCameraPictrue(Camera camera) throws Exception;
}

+ 87
- 3
src/main/java/com/inspect/nvr/service/impl/HikVisionServiceImpl.java View File

@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.inspect.nvr.constant.AlgConstants;
import com.inspect.nvr.domain.Infrared.*;
import com.inspect.nvr.domain.algorithm.in.AnalyseReqItem;
import com.inspect.nvr.domain.algorithm.in.AnalyseRequest;
@ -17,7 +16,6 @@ import com.inspect.nvr.hikVision.utils.AjaxResult;
import com.inspect.nvr.hikVision.utils.StringUtils;
import com.inspect.nvr.hikVision.utils.jna.HCNetSDK;
import com.inspect.nvr.hikVision.utils.jna.HikVisionUtils;
import com.inspect.nvr.service.HikFRemoteConfigCallBack_imp;
import com.inspect.nvr.service.HikVisionService;
import com.inspect.nvr.tempCount.TempCount;
@ -35,6 +33,7 @@ import org.apache.commons.net.ftp.FTPSClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
@ -106,6 +105,9 @@ public class HikVisionServiceImpl implements HikVisionService {
@Resource
private RedisService redisService;
@Autowired
public RedisTemplate redisTemplate;
@Override
public AjaxResult login(NvrInfo nvrInfo) {
return login_V40(nvrInfo);
@ -401,7 +403,7 @@ public class HikVisionServiceImpl implements HikVisionService {
//1跳转预置位
//家里相机没有预置位现场相机存在预置位需要跳转到画测温框预置位否则无法获取规则温度
cameraAngleJump(camera);
// cameraAngleJump(camera);
//2抓取图片,保存到ftp
try {
@ -1064,4 +1066,86 @@ public class HikVisionServiceImpl implements HikVisionService {
return fileName + ".csv";
}
// NVR跳转到预置位
public AjaxResult NvrCameraAngleJump(Camera camera) {
int lUserID = (int) redisTemplate.opsForValue().get(camera.getIp() + "_userId");
if (lUserID == -1) {
HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = HikVisionUtils.login_V40(
camera.getIp(),
(short) camera.getPort(),
camera.getUserName(),
camera.getPassword()
);
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
lUserID = hcNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
redisService.redisTemplate.opsForValue().set(camera.getIp() + "_userId", lUserID);
}
//参数登录令牌,通道号,预置位跳转,跳转的预置位码
boolean gotoPreset = hcNetSDK.NET_DVR_PTZPreset_Other(lUserID, camera.getChannel(), HCNetSDK.GOTO_PRESET, camera.getPointNum());
if (!gotoPreset) {
System.out.println("获取设备预置位跳转设备参数失败,错误码:" + hcNetSDK.NET_DVR_GetLastError());
return AjaxResult.error(hcNetSDK.NET_DVR_GetErrorMsg(new IntByReference(hcNetSDK.NET_DVR_GetLastError())));
} else {
System.out.println("海康-成功跳转到预置位!");
}
return AjaxResult.success();
}
//NVR抓图
public AjaxResult NvrCameraPictrue(Camera camera) throws IOException {
int lUserID = (int)redisTemplate.opsForValue().get(camera.getIp() + "_userId");
// int lUserID = (int) redisTemplate.opsForValue().get(camera.getNvrip() + "_userId");
if (lUserID == -1) {
HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = HikVisionUtils.login_V40(
camera.getIp(),
(short) camera.getPort(),
camera.getUserName(),
camera.getPassword()
);
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
lUserID = hcNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
redisService.redisTemplate.opsForValue().set(camera.getIp() + "_userId", lUserID);
}
HCNetSDK.NET_DVR_JPEGPARA dvrJpegpara = new HCNetSDK.NET_DVR_JPEGPARA();
dvrJpegpara.wPicSize = 0xff;
dvrJpegpara.wPicQuality = 2;
dvrJpegpara.write();
// 2. 创建临时存储目录系统临时目录更安全
Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"), "hik_capture");
if (!Files.exists(tempDir)) {
Files.createDirectories(tempDir);
}
// 3. 生成唯一文件名IP+时间戳
String fileName = String.format("%s_%s.jpg", camera.getIp(), DateUtils.dateTimeNow("yyyyMMddHHmmss"));
Path tempImagePath = tempDir.resolve(fileName);
boolean b = hcNetSDK.NET_DVR_CaptureJPEGPicture(lUserID, camera.getChannel(), dvrJpegpara,
tempImagePath.toString().getBytes("GBK"));
if (!b) {
System.out.println("设置设备进行抓图失败,错误码:" + hcNetSDK.NET_DVR_GetLastError());
return AjaxResult.error("设置设备进行抓图失败,错误码:" + hcNetSDK.NET_DVR_GetLastError());
}
try (InputStream inputStream = Files.newInputStream(tempImagePath)) {
picFtp("/2/" + fileName,
inputStream,
ftpUrlAddress,
ftpUrlPort,
ftpUrlAccount,
ftpUrlPwd
);
} catch (Exception e) {
log.error("抓图并上传失败:{}", e.getMessage());
} finally {
// 6. 确保删除临时文件
Files.deleteIfExists(tempImagePath);
}
return AjaxResult.error(hcNetSDK.NET_DVR_GetErrorMsg(new IntByReference(hcNetSDK.NET_DVR_GetLastError())));
}
}

src/main/resources/application-dev.yml → src/main/resources/application.yml View File


Loading…
Cancel
Save