From 255a6915a9898fe6c1a6649cae707649226ec177 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 08 九月 2023 16:30:34 +0800 Subject: [PATCH] 程序启动清空相机缓存列表重新加载 增加sdk获取相机聚焦值接口 修改相机登录时离线清空通道列表 增加获取码流压缩参数(分辨率/编码格式/码率/流类型) 优化相机在线离线业务方法,修改仅在线设备上传ptz --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 787 ++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 476 insertions(+), 311 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java index cfbcf96..3485345 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java @@ -1,43 +1,37 @@ package com.ruoyi.device.hiksdk.service.impl; import com.ruoyi.common.annotation.SdkOperate; -import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.core.domain.model.LoginUser; -import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; -import com.ruoyi.constant.sdkPriority; +import com.ruoyi.common.utils.file.MimeTypeUtils; +import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.domain.CameraCmd; -import com.ruoyi.device.camera.mapper.ArdCamerasMapper; +import com.ruoyi.device.camera.service.IArdCamerasService; +import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; -import com.ruoyi.device.hiksdk.config.MinioClientSingleton; -import com.ruoyi.device.hiksdk.domain.recordInfo; -import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; -import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; +import com.ruoyi.utils.gis.GisUtil; +import com.ruoyi.device.hiksdk.sdk.HCNetSDK; import com.ruoyi.device.hiksdk.service.IHikClientService; -import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack; -import com.ruoyi.device.hiksdk.util.minio.MinioUtils; -import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.device.hiksdk.sdk.LoginResultCallBack; +import com.ruoyi.utils.minio.MinioUtil; import com.sun.jna.Native; +import com.sun.jna.NativeLong; import com.sun.jna.Platform; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import sun.misc.BASE64Encoder; +import java.util.Base64; import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; import java.nio.ByteBuffer; import java.text.DecimalFormat; -import java.text.SimpleDateFormat; import java.util.*; -import static com.ruoyi.device.hiksdk.common.GlobalVariable.threadMap; -import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*; +import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.*; /** * @ClassName: hikClientServiceImpl @@ -50,11 +44,10 @@ @Service public class HikClientServiceImpl implements IHikClientService { + @Value("${minio.endpoint}") + private static String endpoint; @Resource - ArdCamerasMapper ardCamerasMapper; - - @Resource - SysUserMapper sysUserMapper; + private IArdCamerasService ardCamerasService; private static HCNetSDK hCNetSDK; @@ -114,6 +107,7 @@ } //鎵撳嵃娴峰悍sdk鏃ュ織 if (Platform.isWindows()) { + String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { @@ -134,13 +128,10 @@ hCNetSDK.NET_DVR_Cleanup(); camera.setLoginId(-1); } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } + GlobalVariable.loginMap.remove(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); - camera.setLoginId(lUserID); - camera.setChannel((int) m_strDeviceInfo.byStartChan); + camera.setStartDChan((int) m_strDeviceInfo.byStartChan); return camera; } @@ -194,7 +185,7 @@ int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (i < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.info("鐧诲綍寮傚父锛�" + errorCode); + log.error("鐧诲綍寮傚父锛�" + errorCode); } } @@ -210,9 +201,9 @@ public void loginAll() { try { log.debug("鍔犺浇lib瀹屾垚锛�"); - List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras()); + List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras()); for (ArdCameras camera : ardCameras) { - Thread.sleep(100); + Thread.sleep(500); login(camera); } } catch (Exception ex) { @@ -244,7 +235,7 @@ /** * 鏄惁鍦ㄧ嚎 * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override public boolean isOnLine(CameraCmd cmd) { @@ -253,8 +244,7 @@ return false; } Integer userId = GlobalVariable.loginMap.get(cameraId); - boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); - return isOnLine; + return hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); } /** @@ -272,20 +262,20 @@ public boolean pTZControlWithSpeed(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); Integer speed = cmd.getSpeed(); Integer code = cmd.getCode(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } Integer userId = GlobalVariable.loginMap.get(cameraId); - Integer dwStop; + int dwStop; if (enable) { dwStop = 0;//寮�鍚� } else { dwStop = 1;//鍏抽棴 } - Integer dwPTZCommand = -1; + int dwPTZCommand = -1; switch (code) { /*鏂瑰悜*/ case 1: @@ -344,7 +334,7 @@ boolean bool = hCNetSDK.NET_DVR_PTZControlWithSpeed_Other(userId, channelNum, dwPTZCommand, dwStop, speed); if (!bool) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode); } return bool; } @@ -352,74 +342,85 @@ /** * 璁剧疆鑱氱劍鍊� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate public boolean setFocusPos(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); Integer dwFocusPos = cmd.getDwFocusPos(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } + // 鑾峰彇鍙傛暟 Integer userId = GlobalVariable.loginMap.get(cameraId); - - NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG(); - Pointer point = focusmodeCfg.getPointer(); - IntByReference ibrBytesReturned = new IntByReference(0); - focusmodeCfg.dwFocusPos = dwFocusPos; - boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, focusmodeCfg.size(), ibrBytesReturned); + HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); + HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); + struGisInfo.struPtzPosEx.dwFocus = dwFocusPos; + struStdCfg.read(); + IntByReference lchannel = new IntByReference(channelNum); + struStdCfg.lpInBuffer = struGisInfo.getPointer(); + struStdCfg.lpCondBuffer = lchannel.getPointer(); + struStdCfg.dwCondSize = 4; + struStdCfg.dwInSize = struGisInfo.size(); + struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() + boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); + return false; + } else { + return true; } - return bool; } /** * 鑾峰彇鑱氱劍鍊� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override public Map<String, Object> getFocusPos(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); - + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return new HashMap<>(); } + // 鑾峰彇鍙傛暟 Integer userId = GlobalVariable.loginMap.get(cameraId); - - NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG(); - Pointer point = focusmodeCfg.getPointer(); - IntByReference ibrBytesReturned = new IntByReference(0); - boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, focusmodeCfg.size(), ibrBytesReturned); - if (bool) { - focusmodeCfg.read(); - Map<String, Object> map = new HashMap<>(); - map.put("dwFocusPos", focusmodeCfg.dwFocusPos); - map.put("byFocusDefinitionDisplay ", focusmodeCfg.byFocusDefinitionDisplay); - map.put("dwRelativeFocusPos", focusmodeCfg.dwRelativeFocusPos); - return map; - } else { + HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); + HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); + struStdCfg.read(); + IntByReference lchannel = new IntByReference(channelNum); + struStdCfg.lpCondBuffer = lchannel.getPointer(); + struStdCfg.dwCondSize = 4; + struStdCfg.lpOutBuffer = struGisInfo.getPointer(); + struStdCfg.dwOutSize = struGisInfo.size(); + struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() + boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); + if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鑾峰彇鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); + log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); + } else { + struGisInfo.read(); + Map<String, Object> map = new HashMap<>(); + map.put("dwFocus", struGisInfo.struPtzPosEx.dwFocus); + return map; } } /** * 璁剧疆棰勭疆鐐� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate public boolean setPreset(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); Integer PresetIndex = cmd.getPresetIndex(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; @@ -428,7 +429,7 @@ boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); } return bool; } @@ -436,13 +437,13 @@ /** * 杞埌棰勭疆鐐� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate public boolean gotoPreset(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); Integer PresetIndex = cmd.getPresetIndex(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; @@ -451,13 +452,13 @@ boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); } return bool; } /** - * @鎻忚堪 鑾峰彇鍒嗚鲸鐜� + * @鎻忚堪 鑾峰彇閫氶亾鍘嬬缉鍙傛暟 * @鍙傛暟 [cameraId, channelNum] * @杩斿洖鍊� java.lang.String * @鍒涘缓浜� 鍒樿嫃涔� @@ -465,104 +466,161 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public String getVideoResolution(CameraCmd cmd) { + public Map<String,String> getVideoCompressionCfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer chanNo = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return " "; + return null; } Integer userId = GlobalVariable.loginMap.get(cameraId); - String ResResolution = ""; - NET_DVR_COMPRESSIONCFG_V30 resolution = new NET_DVR_COMPRESSIONCFG_V30(); - resolution.write(); - Pointer pioint = resolution.getPointer(); + Map<String,String> map=new HashMap<>(); + NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30(); + compressioncfg.write(); + Pointer pioint = compressioncfg.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); try { - boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, channelNum, pioint, resolution.size(), ibrBytesReturned); + boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, chanNo, pioint, compressioncfg.size(), ibrBytesReturned); if (bool) { - resolution.read(); + compressioncfg.read(); + //鐮佹祦绫诲瀷锛�0-瑙嗛娴侊紝1-澶嶅悎娴侊紝0xfe- 鑷姩锛堝拰婧愪竴鑷达級 + String streamType=""; + switch(compressioncfg.struNormHighRecordPara.byStreamType) + { + case 0: streamType="瑙嗛娴�";break; + case 1: streamType="澶嶅悎娴�";break; + default:streamType="鏈煡";break; + } + //瑙嗛缂栫爜绫诲瀷锛�0-绉佹湁264锛�1-鏍囧噯h264锛�2-鏍囧噯mpeg4锛�7-M-JPEG锛�8-MPEG2锛�9-SVAC锛�10-鏍囧噯h265锛�0xfe- 鑷姩锛堝拰婧愪竴鑷达級锛�0xff-鏃犳晥 + String videoEncType=""; + switch (compressioncfg.struNormHighRecordPara.byVideoEncType) + { + case 0:videoEncType="绉佹湁264";break; + case 1:videoEncType="鏍囧噯h264";break; + case 2:videoEncType="鏍囧噯mpeg4";break; + case 7:videoEncType="M-JPEG";break; + case 8:videoEncType="MPEG2";break; + case 9:videoEncType="SVAC";break; + case 10:videoEncType="鏍囧噯h265";break; + default: videoEncType="鏈煡";break; + } + //瑙嗛鐮佺巼 + String videoBitrate=""; + switch (compressioncfg.struNormHighRecordPara.dwVideoBitrate) + { + case 0:videoBitrate="淇濈暀";break; + case 1:videoBitrate="16K(淇濈暀)";break; + case 2:videoBitrate="32K";break; + case 3:videoBitrate="48k";break; + case 4:videoBitrate="64k";break; + case 5:videoBitrate="80k";break; + case 6:videoBitrate="96k";break; + case 7:videoBitrate="128k";break; + case 8:videoBitrate="160k";break; + case 9:videoBitrate="192k";break; + case 10:videoBitrate="224k";break; + case 11:videoBitrate="256K";break; + case 12:videoBitrate="320K";break; + case 13:videoBitrate="384K";break; + case 14:videoBitrate="448K";break; + case 15:videoBitrate="512K";break; + case 16:videoBitrate="640K";break; + case 17:videoBitrate="768K";break; + case 18:videoBitrate="896K";break; + case 19:videoBitrate="1024K";break; + case 20:videoBitrate="1280K";break; + case 21:videoBitrate="1536K";break; + case 22:videoBitrate="1792K";break; + case 23:videoBitrate="2048K";break; + case 24:videoBitrate="3072K";break; + case 25:videoBitrate="4096K";break; + case 26:videoBitrate="8192K";break; + case 27:videoBitrate="16384K";break; + default:videoBitrate="鍏朵粬";break; + } //瑙嗛杈撳嚭鍙e垎杈ㄧ巼锛�0- 1024x768锛�1- 1280x720锛�2-1280x1024锛�3- 1680x1050锛�4- 1920x1080锛�5- 3840*2160 - byte byStreamType = resolution.struNormHighRecordPara.byStreamType; - int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate; - int byResolution = resolution.struNormHighRecordPara.byResolution; - switch (byResolution) { + String resolution=""; + switch (compressioncfg.struNormHighRecordPara.byResolution) { case 0: - ResResolution = "DCIF(528*384/528*320)"; + resolution = "DCIF(528*384/528*320)"; break; case 1: - ResResolution = "CIF(352*288/352*240)"; + resolution = "CIF(352*288/352*240)"; break; case 2: - ResResolution = "QCIF(176*144/176*120)"; + resolution = "QCIF(176*144/176*120)"; break; case 3: - ResResolution = "4CIF(704*576/704*480)"; + resolution = "4CIF(704*576/704*480)"; break; case 4: - ResResolution = "2CIF(704*288/704*240)"; + resolution = "2CIF(704*288/704*240)"; break; case 6: - ResResolution = "QVGA(320*240)"; + resolution = "QVGA(320*240)"; break; case 7: - ResResolution = "QQVGA(160*120)"; + resolution = "QQVGA(160*120)"; break; case 16: - ResResolution = "VGA(640*480)"; + resolution = "VGA(640*480)"; break; case 17: - ResResolution = "UXGA(1600*1200)"; + resolution = "UXGA(1600*1200)"; break; case 18: - ResResolution = "SVGA(800*600)"; + resolution = "SVGA(800*600)"; break; case 19: - ResResolution = "HD720P(1280*720)"; + resolution = "HD720P(1280*720)"; break; case 20: - ResResolution = "XVGA(1280*960)"; + resolution = "XVGA(1280*960)"; break; case 21: - ResResolution = "HD900P(1600*900)"; + resolution = "HD900P(1600*900)"; break; case 22: - ResResolution = "1360*1024"; + resolution = "1360*1024"; break; case 23: - ResResolution = "1536*1536"; + resolution = "1536*1536"; break; case 24: - ResResolution = "1920*1920"; + resolution = "1920*1920"; break; case 27: - ResResolution = "1920*1080p"; + resolution = "1920*1080p"; break; case 28: - ResResolution = "2560*1920"; + resolution = "2560*1920"; break; case 29: - ResResolution = "1600*304"; + resolution = "1600*304"; break; case 30: - ResResolution = "2048*1536"; + resolution = "2048*1536"; break; default: - ResResolution = "涓嶅湪褰撳墠鍒嗚鲸鐜囩储寮曪紝璇疯仈绯荤鐞嗗憳娣诲姞"; + resolution = "涓嶅湪褰撳墠鍒嗚鲸鐜囩储寮曪紝璇疯仈绯荤鐞嗗憳娣诲姞"; break; } + map.put("resolution",resolution); + map.put("videoBitrate",videoBitrate); + map.put("videoEncType",videoEncType); + map.put("streamType",streamType); + } else { int code = hCNetSDK.NET_DVR_GetLastError(); - System.out.println("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); } } catch (Exception ex) { log.error(ex.getMessage()); } - return ResResolution; + return map; } /** - * @return * @鎻忚堪 鑾峰彇ptz淇℃伅 * @鍙傛暟 [userId, channelNum] * @杩斿洖鍊� boolean @@ -573,7 +631,7 @@ @Override public Map<String, Object> getPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return null; } @@ -586,7 +644,7 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned); if (bool) { m_ptzPosCurrent.read(); - DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 + // DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 //16杩涘埗杞琁nteger鍚庨櫎10锛屼繚鐣欏皬鏁扮偣1浣� //瀹為檯鏄剧ず鐨凱TZ鍊兼槸鑾峰彇鍒扮殑鍗佸叚杩涘埗鍊肩殑鍗佸垎涔嬩竴锛� //濡傝幏鍙栫殑姘村钩鍙傛暟P鐨勫�兼槸0x1750锛屽疄闄呮樉绀虹殑P鍊间负175搴︼紱 @@ -598,7 +656,7 @@ double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); + //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); Map<String, Object> ptzMap = new HashMap<>(); ptzMap.put("p", p); ptzMap.put("t", t); @@ -606,8 +664,8 @@ return ptzMap; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); - return null; + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + return new HashMap<>(); } } @@ -624,7 +682,7 @@ @SdkOperate public boolean setPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; @@ -633,9 +691,9 @@ NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); m_ptzPosCurrent.wAction = 1; try { - String p = String.valueOf((int) ((double) ptz.get("p") * 10)); - String t = String.valueOf((int) ((double) ptz.get("t") * 10)); - String z = String.valueOf((int) ((double) ptz.get("z") * 10)); + String p = String.valueOf((int) (ptz.get("p") * 10)); + String t = String.valueOf((int) (ptz.get("t") * 10)); + String z = String.valueOf((int) (ptz.get("z") * 10)); m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16)); @@ -644,7 +702,7 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); } return bool; } catch (Exception ex) { @@ -655,9 +713,9 @@ @Override @SdkOperate - public boolean setTargetPosition(CameraCmd cmd) { + public boolean guideTargetPosition(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -665,7 +723,7 @@ NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); m_ptzPosCurrent.wAction = 1; try { - ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); + ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId); double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; double[] targetPositions = cmd.getTargetPosition(); double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); @@ -680,7 +738,7 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); } return bool; } catch (Exception ex) { @@ -698,64 +756,36 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 */ @Override + @SdkOperate public boolean controlLock(CameraCmd cmd) { String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満 - ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId); - if (StringUtils.isNull(ardCameras)) { - return false;//鎵句笉鍒扮浉鏈烘嫆缁濇搷鎺� - } - Integer expired = cmd.getExpired();//鐢宠鎺у埗鏃堕暱 + ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId); + Date now = new Date(); + now.setTime(now.getTime() + cmd.getExpired() * 1000); + ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿 + ardCamerasService.updateArdCameras(ardCameras); + return true; + } + + /** + * @鎻忚堪 鎿嶆帶瑙i攣 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/6/30 15:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean controlUnLock(CameraCmd cmd) { + String cameraId = cmd.getCameraId();//鐢宠瑙i攣鐨勭浉鏈� String operator = cmd.getOperator();//鐢宠鑰� - String currentOperator = ardCameras.getOperatorId();//鐩告満褰撳墠鎺у埗鑰� - Date currentExpired = ardCameras.getOperatorExpired();//鐩告満褰撳墠杩囨湡鏃堕棿 - if (currentExpired == null) { - //璁剧疆褰撳墠鎿嶄綔鐢ㄦ埛ID - ardCameras.setOperatorId(operator); - //璁剧疆褰撳墠杩囨湡鏃堕棿 - Date now = new Date(); - now.setTime(now.getTime() + expired * 1000 * 60); - ardCameras.setOperatorExpired(now); - ardCamerasMapper.updateArdCameras(ardCameras); - } else { - //濡傛灉杩囨湡鏃堕棿鏈夊�� - //濡傛灉鏄湰浜虹洿鎺ヤ慨鏀� - if (currentOperator.equals(operator)) { - //璁剧疆褰撳墠杩囨湡鏃堕棿 - Date now = new Date(); - now.setTime(now.getTime() + expired * 1000 * 60); - ardCameras.setOperatorExpired(now); - ardCamerasMapper.updateArdCameras(ardCameras); - } else { - //濡傛灉闈炴湰浜烘瘮杈冧紭鍏堢骇 - Integer currentLevel = 0;//褰撳墠鎿嶄綔鑰呯殑浼樺厛绾� - if (sdkPriority.priorityMap.containsKey(currentOperator)) { - /*褰撳墠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/ - currentLevel = (Integer) sdkPriority.priorityMap.get(currentOperator); - } else { - /*褰撳墠鎺у埗鑰呬负鏅�氱敤鎴�*/ - SysUser sysUser = sysUserMapper.selectUserById(currentOperator); - currentLevel = sysUser.getCameraPriority(); - } - Integer operatorLevel = 0;//鑾峰彇鐢宠鑰呯殑浼樺厛绾� - if (sdkPriority.priorityMap.containsKey(operator)) { - /*鍖呭惈璇存槑褰撳墠鐢宠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/ - operatorLevel = (Integer) sdkPriority.priorityMap.get(operator); - } else { - /*鍚﹀垯鐢宠鎺у埗鑰呬负褰撳墠鐧诲綍鐢ㄦ埛*/ - LoginUser loginUser = SecurityUtils.getLoginUser(); - SysUser user = loginUser.getUser();//鑾峰彇鐧诲綍鐢ㄦ埛鐨勪俊鎭� - operatorLevel = user.getCameraPriority(); - } - //鍒ゆ柇浼樺厛绾� - if (operatorLevel > currentLevel) { - Date now = new Date(); - now.setTime(now.getTime() + expired * 60 * 1000); - ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿 - ardCameras.setOperatorId(operator);//璁剧疆褰撳墠鐢ㄦ埛 - ardCamerasMapper.updateArdCameras(ardCameras); - } else { - return false;//浼樺厛绾т綆鏃犳硶涓婇攣 - } + ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId); + if (ardCameras.getOperatorId().equals(operator)) { + //濡傛灉瑙i攣鐩告満鐨勫綋鍓嶇敤鎴锋槸鐢宠鑰咃紝鍒欐竻绌鸿鐩告満鐨勮繃鏈熸椂闂� + ardCameras.setOperatorExpired(null); + int i = ardCamerasService.updateArdCameras(ardCameras); + if (i > 0) { + log.debug(cameraId + "--瑙i攣鎴愬姛"); } } return true; @@ -772,7 +802,7 @@ @Override public int getPTZLockInfo(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return -1; } @@ -784,12 +814,11 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZLOCKCFG, channelNum, point, netDvrPtzLockcfg.size(), ibrBytesReturned); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鑾峰彇ptz閿佸畾淇℃伅澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鑾峰彇ptz閿佸畾淇℃伅澶辫触,璇风◢鍚庨噸璇�" + code); return -1; } else { netDvrPtzLockcfg.read(); - int byWorkMode = netDvrPtzLockcfg.byWorkMode; - return byWorkMode; + return netDvrPtzLockcfg.byWorkMode; } } @@ -805,7 +834,7 @@ @SdkOperate public boolean setZeroPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -837,7 +866,7 @@ @Override public Map<String, Object> getPtzScope(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return new HashMap<>(); } @@ -849,7 +878,7 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZSCOPE, channelNum, point, m_ptzPosCurrent.size(), ibrBytesReturned); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } else { m_ptzPosCurrent.read(); @@ -886,7 +915,7 @@ public boolean controlDefogcfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -899,7 +928,7 @@ log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struCameraParam.read(); - log.info("鏄惁寮�鍚�忛浘锛�" + struCameraParam.struDefogCfg.byMode); + log.debug("鏄惁寮�鍚�忛浘锛�" + struCameraParam.struDefogCfg.byMode); NET_DVR_DEFOGCFG defogcfg = new NET_DVR_DEFOGCFG(); if (enable) { @@ -913,10 +942,9 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); - return false; + log.error("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆閫忛浘鎴愬姛"); + log.debug("璁剧疆閫忛浘鎴愬姛"); return bool; } @@ -933,7 +961,7 @@ public boolean controlInfrarecfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -946,7 +974,7 @@ log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struDayNigh.read(); - log.info("鏄惁寮�鍚瑙嗭細" + struDayNigh.struDayNight.byDayNightFilterType); + log.debug("鏄惁寮�鍚瑙嗭細" + struDayNigh.struDayNight.byDayNightFilterType); NET_DVR_DAYNIGHT daynight = new NET_DVR_DAYNIGHT(); if (enable) { @@ -962,10 +990,9 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struDayNigh.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); - return false; + log.error("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆澶滆鎴愬姛"); + log.debug("璁剧疆澶滆鎴愬姛"); return bool; } @@ -982,7 +1009,7 @@ public boolean controlFocusMode(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -992,10 +1019,10 @@ IntByReference ibrBytesReturned = new IntByReference(0); boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); if (!b_GetCameraParam) { - System.out.println("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struFocusMode.read(); - log.info("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); if (enable) { struFocusMode.byFocusMode = 1;//鎵嬪姩鑱氱劍 @@ -1009,11 +1036,37 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_FOCUSMODECFG, channelNum, point, struFocusMode.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); - return false; + log.error("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆鑱氱劍妯″紡鎴愬姛"); + log.debug("璁剧疆鑱氱劍妯″紡鎴愬姛"); return bool; + } + + /** + * @鎻忚堪 鑾峰彇鑱氱劍妯″紡 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/18 13:07 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + public String getFocusMode(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + Integer userId = GlobalVariable.loginMap.get(cameraId); + NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); + Pointer point = struFocusMode.getPointer(); + IntByReference ibrBytesReturned = new IntByReference(0); + boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); + if (!b_GetCameraParam) { + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + } + struFocusMode.read(); + log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + return String.valueOf(struFocusMode.byFocusMode); } /** @@ -1029,12 +1082,12 @@ public boolean controlPTHeateRpwron(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } Integer userId = GlobalVariable.loginMap.get(cameraId); - Integer dwStop; + int dwStop; if (enable) { dwStop = 0;//寮�鍚� } else { @@ -1043,10 +1096,9 @@ boolean bool = hCNetSDK.NET_DVR_PTZControl_Other(userId, channelNum, HEATER_PWRON, dwStop); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); - return false; + log.error("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆浜戝彴鍔犵儹鎴愬姛"); + log.debug("璁剧疆浜戝彴鍔犵儹鎴愬姛"); return bool; } @@ -1063,7 +1115,7 @@ public boolean controlCameraDeicing(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -1076,7 +1128,7 @@ log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struDeicing.read(); - log.info("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); + log.debug("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); if (enable) { struDeicing.byEnableDeicing = 1;//寮�鍚� @@ -1087,21 +1139,20 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_DEVSERVER_CFG, channelNum, point, struDeicing.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); - return false; + log.error("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); + log.debug("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); return bool; } /** * 鎴浘 杩旂粰鍓嶇 * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ public String captureJPEGPicture(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } @@ -1122,43 +1173,14 @@ ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); - log.info("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); + log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); - - BASE64Encoder encoder = new BASE64Encoder(); - String png_base64 = encoder.encodeBuffer(jpegBuffer);//杞崲鎴恇ase64涓� + Base64.Encoder decoder = Base64.getEncoder(); + // BASE64Encoder encoder = new BASE64Encoder(); + String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓� png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n - log.info("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); + log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); return png_base64; - -// ByteArrayInputStream in = new ByteArrayInputStream(jpegBuffer.array(), 0, a.getValue()); -// OutputStream outputStream = null; -// try { -// //1銆佽缃畆esponse 鍝嶅簲澶� //璁剧疆椤甸潰涓嶇紦瀛�,娓呯┖buffer -// response.reset(); -// //瀛楃缂栫爜 -// response.setCharacterEncoding("UTF-8"); -// //浜岃繘鍒朵紶杈撴暟鎹� -// response.setContentType("multipart/form-data"); -// //璁剧疆鍝嶅簲澶� -// response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpeg", "UTF-8")); -// -// outputStream = response.getOutputStream(); -// // LoginUser loginUser = LoginContext.me().getLoginUser(); -// waterMarkUtil.markImageByIO("", in, outputStream, null, "jpeg"); -// outputStream.flush(); -// } catch (Exception e) { -// e.printStackTrace(); -// log.error("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯"); -// } finally { -// try { -// outputStream.close(); -// } catch (IOException e) { -// log.error("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯"); -// } -// } - - } /** @@ -1173,7 +1195,7 @@ @SdkOperate public String picCutCate(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } @@ -1195,25 +1217,22 @@ //璁剧疆鍥剧墖澶у皬 ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� - log.info("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------"); + log.debug("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------"); boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); - log.info("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); + log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); if (is) { - log.info("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError()); + log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError()); byte[] array = jpegBuffer.array(); //瀛樺偍鍒癿inio String BucketName = "pic"; - String uuid = UUID.randomUUID().toString().replace("-", ""); - String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); - String ObjectName = time + "/" + uuid + ".jpeg"; - String ContentType = "image/JPEG"; + String ObjectName = "capture/" + IdUtils.simpleUUID() + ".jpeg"; InputStream input = new ByteArrayInputStream(array); String url = ""; try { - boolean b = MinioUtils.uploadObject(BucketName, ObjectName, input, input.available(), ContentType); + boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); if (b) { - url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName); - log.info("涓婁紶鏂囦欢鎴愬姛!" + url); + url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); } } catch (IOException ex) { log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); @@ -1221,7 +1240,7 @@ return url; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); return ""; } } @@ -1238,7 +1257,7 @@ public String record(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { @@ -1273,31 +1292,21 @@ log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); return ""; } - log.info("鍙栨祦鎴愬姛"); + log.debug("鍙栨祦鎴愬姛"); GlobalVariable.previewMap.put(cameraId, lRealHandle); } if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); return ""; } - log.info("褰曞儚寮�濮�"); + log.debug("褰曞儚寮�濮�"); } else { if (GlobalVariable.previewMap.containsKey(cameraId)) { Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); GlobalVariable.previewMap.remove(cameraId); } - log.info("褰曞儚鍋滄"); - //瀛樺叆minio - String BucketName = cmd.getRecordBucketName(); - String ObjectName = cmd.getRecordObjectName(); - String ContentType = "video/MP4"; - FileInputStream stream = new FileInputStream(path); - boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); - if (b) { - url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName); - log.info("涓婁紶鏂囦欢鎴愬姛!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); - } + log.debug("褰曞儚鍋滄"); } return url; } catch (Exception ex) { @@ -1307,12 +1316,11 @@ } @Override - public void recordToMinio(CameraCmd cmd) { + public void recordStart(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); + Integer channelNum = cmd.getChanNo(); String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return; } @@ -1337,45 +1345,202 @@ previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 previewinfo.write(); - if (enable) { - if (GlobalVariable.previewMap.containsKey(cameraId)) { - Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); - hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - log.info("褰曞儚鍋滄"); - } - int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); - if (lRealHandle == -1) { - log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); - return; - } - log.info("鍙栨祦鎴愬姛"); - GlobalVariable.threadMap.put(cameraId,Thread.currentThread().getName()); - GlobalVariable.previewMap.put(cameraId, lRealHandle); - if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { - log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - return; - } - log.info("褰曞儚寮�濮�"); - } else { - if (GlobalVariable.previewMap.containsKey(cameraId)) { - Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); - hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); - GlobalVariable.previewMap.remove(cameraId); - } - log.info("褰曞儚鍋滄"); - //瀛樺叆minio - String BucketName = cmd.getRecordBucketName(); - String ObjectName = cmd.getRecordObjectName(); - String ContentType = "video/MP4"; - FileInputStream stream = new FileInputStream(path); - boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); - if (b) { - log.info("涓婁紶鏂囦欢鎴愬姛!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鍋滄褰撳墠褰曞儚"); + } + int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); + if (lRealHandle == -1) { + log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); + return; + } + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); + GlobalVariable.previewMap.put(cameraId, lRealHandle); + if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + return; + } + log.debug("褰曞儚寮�濮�"); + } catch (Exception ex) { + log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage()); + } + } + + @Override + public String recordStopToMinio(CameraCmd cmd) { + String url = ""; + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + Integer userId = GlobalVariable.loginMap.get(cameraId); + //region 寮哄埗I甯� + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //endregion + //region 棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + //endregion + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("褰曞儚鍋滄"); + //瀛樺叆minio + String BucketName = cmd.getRecordBucketName(); + String ObjectName = cmd.getRecordObjectName() + ".mp4"; + FileInputStream stream = new FileInputStream(path); + boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); + if (b) { + url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + return url; + } catch (Exception ex) { + log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; + } + } + + @Override + public void recordStopNotToMinio(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return; + } + Integer userId = GlobalVariable.loginMap.get(cameraId); + //寮哄埗I甯х粨鏋勪綋瀵硅薄 + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + } + //棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("褰曞儚鍋滄"); + } catch (Exception ex) { + log.error("褰曞儚鍋滄寮傚父" + ex.getMessage()); + } + } + + //鑾峰彇IP閫氶亾 + @Override + public List<ArdChannel> getCameraChannelList(ArdCameras camera) { + /*鑾峰彇閫氶亾*/ + List<ArdChannel> channelList = new ArrayList<>(); + try { + Integer chanNum = camera.getChanNum(); + Integer startDChan = camera.getStartDChan(); + if (chanNum > 0) { + // 鑾峰彇閫氶亾鍙� + for (int iChannum = 0; iChannum < chanNum; iChannum++) { + ArdChannel ardChannel = new ArdChannel(); + int channum = iChannum + startDChan + 1; + HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); + strPicCfg.dwSize = strPicCfg.size(); + strPicCfg.write(); + Pointer pStrPicCfg = strPicCfg.getPointer(); + NativeLong lChannel = new NativeLong(channum); + IntByReference pInt = new IntByReference(0); + boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), + pStrPicCfg, strPicCfg.size(), pInt); + if (b_GetPicCfg) { + strPicCfg.read(); + String channelName = new String(strPicCfg.sChanName, "GBK").trim(); + ardChannel.setName(channelName); + } + ardChannel.setDeviceId(camera.getId()); + ardChannel.setChanNo(iChannum + 1); + channelList.add(ardChannel); } } } catch (Exception ex) { - log.error("褰曞儚寮傚父" + ex.getMessage()); + log.error("鑾峰彇鐩告満閫氶亾寮傚父:" + ex.getMessage()); + } + return channelList; + } + + /** + * @鎻忚堪 鑾峰彇GIS淇℃伅鏁版嵁 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 + */ + @Override + public Map<String, Object> getGisInfo(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return new HashMap<>(); + } + // 鑾峰彇鍙傛暟 + Integer userId = GlobalVariable.loginMap.get(cameraId); + HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); + HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); + struStdCfg.read(); + IntByReference lchannel = new IntByReference(channelNum); + struStdCfg.lpCondBuffer = lchannel.getPointer(); + struStdCfg.dwCondSize = 4; + struStdCfg.lpOutBuffer = struGisInfo.getPointer(); + struStdCfg.dwOutSize = struGisInfo.size(); + struStdCfg.write();//璁剧疆鍓嶄箣鍓嶈write() + boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); + return new HashMap<>(); + } else { + struGisInfo.read(); + Map<String, Object> map = new HashMap<>(); + map.put("p", struGisInfo.struPtzPos.fPanPos); + map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); + map.put("z", struGisInfo.struPtzPos.fZoomPos); + map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙� + map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙� + return map; } } } \ No newline at end of file -- Gitblit v1.9.3