diff --git a/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java b/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java index 1df4603..ec04d0f 100644 --- a/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java +++ b/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java @@ -10,8 +10,10 @@ import com.inspect.nvr.hikVision.utils.jna.HCNetSDK; import com.inspect.nvr.hikVision.utils.jna.HikVisionUtils; import com.inspect.nvr.service.IvsCameraService; import com.inspect.nvr.utils.DateUtils; +import com.inspect.nvr.utils.StringHexConverter; import com.inspect.nvr.utils.redis.RedisService; import com.sun.jna.ptr.IntByReference; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -33,9 +35,9 @@ import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; +@Slf4j @Service public class IvsCameraServiceImpl implements IvsCameraService { - private final Logger log = LoggerFactory.getLogger(this.getClass()); @Value("${test-mode:false}") private boolean testMode; @@ -50,7 +52,7 @@ public class IvsCameraServiceImpl implements IvsCameraService { @Override public IvsPresetListView ptzPresetList(String cameraCode, String domainCode) { - if(testMode) { + if (testMode) { List list = new ArrayList<>(); list.add(IvsPresetListView.PtzPresetInfo .builder().presetName("preset").presetIndex(0).focusSwitch(1).reserve("reserve") @@ -70,7 +72,7 @@ public class IvsCameraServiceImpl implements IvsCameraService { //跳转预置位 @Override public PtzControlResult ptzControl(PtzControlParam param) { - if(testMode) { + if (testMode) { return PtzControlResult.builder() .resultCode("0") .build(); @@ -135,9 +137,16 @@ public class IvsCameraServiceImpl implements IvsCameraService { public SnapshotInfoListResult getSnapshotList(SnapshotInfoListParam param) { SnapshotInfoListResult.SnapshotInfoList snapshotInfoList = new SnapshotInfoListResult.SnapshotInfoList(); List infoList = new ArrayList<>(); + final String rawString = String.join((":"), param.getAddress(), param.getUsername(), param.getPassword()); + final String hexString = StringHexConverter.toHex(rawString); + + + String[] addressArray = param.getAddress().split(":"); + final String pictureUrl = "http://" + addressArray[0] + ":" + addressArray[1] + "/downloadfile?filesessionid=" + hexString; + log.info("GET_SNAPSHOT_LIST rawString: {}, hexString: {}, pictureUrl: {}", rawString, hexString, pictureUrl); infoList.add( SnapshotInfoListResult.SnapshotInfo.builder() - .pictureUrl("http://192.168.1.172:18539/downloadfile?filesessionid=" + param.getTaskID()) + .pictureUrl(pictureUrl) .cameraCode(param.getCameraCode()) .build()); snapshotInfoList.setTotal(1); @@ -152,6 +161,8 @@ public class IvsCameraServiceImpl implements IvsCameraService { @Override public ByteArrayInputStream downloadFile(String fileSessionId) { + final String rawString = StringHexConverter.fromHex(fileSessionId); + log.info("DOWNLOAD_FILE hexString: {}, rawString: {}", fileSessionId, rawString); if (testMode) { try { return new ByteArrayInputStream(loadDefaultImage()); @@ -160,14 +171,38 @@ public class IvsCameraServiceImpl implements IvsCameraService { } } + String[] cameraAddressInfos = rawString.split((":")); + if (cameraAddressInfos.length != 6) { + log.error("DOWNLOAD_FILE ADDRESS INFO ERROR rawString: {}", rawString); + try { + return new ByteArrayInputStream(loadDefaultImage()); + } catch (IOException e) { + throw new RuntimeException("测试环境生成错误图片失败2", e); + } + } + // 从nvr或者camera下载图片, 开发中 Camera camera = new Camera(); //赋值 - camera.setIp("192.168.1.231"); - camera.setPort(8000); - camera.setUserName("admin"); - camera.setPassword("2016.h.BD"); - camera.setChannel(11); +// camera.setIp("192.168.1.231"); +// camera.setPort(8000); +// camera.setUserName("admin"); +// camera.setPassword("2016.h.BD"); +// camera.setChannel(11); + + log.info("DOWNLOAD_FILE ip: {}, port: {}, username: {}, password: {}, channel: {}, pointName: {}", + cameraAddressInfos[0], + cameraAddressInfos[1], + cameraAddressInfos[2], + cameraAddressInfos[3], + cameraAddressInfos[4], + cameraAddressInfos[5]); + camera.setIp(cameraAddressInfos[0]); + camera.setPort(Integer.parseInt(cameraAddressInfos[1])); + camera.setUserName(cameraAddressInfos[2]); + camera.setPassword(cameraAddressInfos[3]); + camera.setChannel(Integer.parseInt(cameraAddressInfos[4])); + camera.setPointNum(Integer.parseInt(cameraAddressInfos[5])); //从redis中获取lUserID(存在时间200) lUserID = (Integer) redisService.redisTemplate.opsForValue().get(camera.getIp() + "_userId"); @@ -211,8 +246,6 @@ public class IvsCameraServiceImpl implements IvsCameraService { byte[] bytes = StreamUtils.copyToByteArray(inputStream); - - // 确保删除临时文件 Files.deleteIfExists(tempImagePath); diff --git a/src/main/java/com/inspect/nvr/utils/StringHexConverter.java b/src/main/java/com/inspect/nvr/utils/StringHexConverter.java new file mode 100644 index 0000000..0b17d44 --- /dev/null +++ b/src/main/java/com/inspect/nvr/utils/StringHexConverter.java @@ -0,0 +1,28 @@ +package com.inspect.nvr.utils; + +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; + +@Slf4j +public class StringHexConverter { + // 字符串 -> 十六进制字符串 + public static String toHex(String input) { + byte[] bytes = input.getBytes(StandardCharsets.UTF_8); + StringBuilder hex = new StringBuilder(bytes.length * 2); + for (byte b : bytes) { + hex.append(String.format("%02x", b)); + } + return hex.toString(); + } + + // 十六进制字符串 -> 原始字符串 + public static String fromHex(String hex) { + int length = hex.length(); + byte[] bytes = new byte[length / 2]; + for (int i = 0; i < length; i += 2) { + bytes[i / 2] = (byte) Integer.parseInt(hex.substring(i, i + 2), 16); + } + return new String(bytes, StandardCharsets.UTF_8); + } +}