From 89eff0cecfd9fd0efd0999189bd039a679f750f9 Mon Sep 17 00:00:00 2001 From: zhangjian <zhangjianrock@163.com> Date: 星期二, 11 七月 2023 11:34:27 +0800 Subject: [PATCH] 无人机转发接口反射调用 --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 734 ++++++++++++++++++++++++++++--------------------------- 1 files changed, 374 insertions(+), 360 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 c2faf7b..ba67776 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,30 +1,25 @@ 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.constant.sdkPriority; +import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; -import com.ruoyi.device.hiksdk.common.global.globalVariable; +import com.ruoyi.device.camera.service.IArdCamerasService; +import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; -import com.ruoyi.device.hiksdk.domain.recordInfo; +import com.ruoyi.device.hiksdk.config.MinioClientSingleton; import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ruoyi.device.hiksdk.service.IHikClientService; -import com.ruoyi.device.hiksdk.util.minioUtil.MinioUtil; -import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack; +import com.ruoyi.device.hiksdk.util.minio.MinioUtils; import com.sun.jna.Native; 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.stereotype.Service; import sun.misc.BASE64Encoder; - import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; @@ -47,16 +42,9 @@ public class HikClientServiceImpl implements IHikClientService { @Resource - private MinioUtil minioUtil; - - @Resource - ArdCamerasMapper ardCamerasMapper; - - @Resource - SysUserMapper sysUserMapper; + IArdCamerasService ardCamerasService; private static HCNetSDK hCNetSDK; - private static Map<Integer, recordInfo> user_real_Map = new HashMap<>(); @Override public void loadHCNetSDKLib() { @@ -75,20 +63,20 @@ //璁剧疆HCNetSDKCom缁勪欢搴撴墍鍦ㄨ矾寰� //libhcnetsdk.so String strPathCom = "/home/hiklib"; - HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH(); + NET_DVR_LOCAL_SDK_PATH struComPath = new NET_DVR_LOCAL_SDK_PATH(); System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length()); struComPath.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer()); //璁剧疆libcrypto.so鎵�鍦ㄨ矾寰� - HCNetSDK.BYTE_ARRAY ptrByteArrayCrypto = new HCNetSDK.BYTE_ARRAY(256); + BYTE_ARRAY ptrByteArrayCrypto = new BYTE_ARRAY(256); String strPathCrypto = "/home/hiklib/libcrypto.so.1.1"; System.arraycopy(strPathCrypto.getBytes(), 0, ptrByteArrayCrypto.byValue, 0, strPathCrypto.length()); ptrByteArrayCrypto.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArrayCrypto.getPointer()); //璁剧疆libssl.so鎵�鍦ㄨ矾寰� - HCNetSDK.BYTE_ARRAY ptrByteArraySsl = new HCNetSDK.BYTE_ARRAY(256); + BYTE_ARRAY ptrByteArraySsl = new BYTE_ARRAY(256); String strPathSsl = "/home/hiklib/libssl.so.1.1"; System.arraycopy(strPathSsl.getBytes(), 0, ptrByteArraySsl.byValue, 0, strPathSsl.length()); ptrByteArraySsl.write(); @@ -100,15 +88,14 @@ } /** - * @鎻忚堪 娉ㄥ唽鐧诲綍 + * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔 * @鍙傛暟 [dvrLogin] * @杩斿洖鍊� java.lang.Integer * @鍒涘缓浜� 鍒樿嫃涔� * @鍒涘缓鏃堕棿 2023/1/17 16:12 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - @Override - public ArdCameras login(ArdCameras camera) { + public ArdCameras login1(ArdCameras camera) { // 鍒濆鍖� if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK鍒濆鍖栧け璐�"); @@ -116,9 +103,9 @@ //鎵撳嵃娴峰悍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, false); + hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", false); + hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); @@ -128,21 +115,72 @@ hCNetSDK.NET_DVR_SetConnectTime(2000, 1); hCNetSDK.NET_DVR_SetReconnect(100000, true); //璁惧淇℃伅, 杈撳嚭鍙傛暟 - HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); + NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new NET_DVR_DEVICEINFO_V30(); int lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP, m_sPort, m_sUsername, m_sPassword, m_strDeviceInfo); if (lUserID < 0) { //閲婃斁SDK璧勬簮 hCNetSDK.NET_DVR_Cleanup(); camera.setLoginId(-1); } - if (globalVariable.loginMap.containsKey(camera.getId())) { - globalVariable.loginMap.remove(camera.getId()); - } - globalVariable.loginMap.put(camera.getId(), lUserID); - + GlobalVariable.loginMap.remove(camera.getId()); + GlobalVariable.loginMap.put(camera.getId(), lUserID); camera.setLoginId(lUserID); camera.setChannel((int) m_strDeviceInfo.byStartChan); return camera; + } + + /** + * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍 + * @鍙傛暟 [dvrLogin] + * @杩斿洖鍊� java.lang.Integer + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:12 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public void login(ArdCameras camera) { + // 鍒濆鍖� + if (!hCNetSDK.NET_DVR_Init()) { + log.error("SDK鍒濆鍖栧け璐�"); + } + //鎵撳嵃娴峰悍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 { + hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); + } + String m_sDeviceIP = camera.getIp(); + String m_sUsername = camera.getUsername(); + String m_sPassword = camera.getPassword(); + short m_sPort = camera.getPort().shortValue(); + //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� + hCNetSDK.NET_DVR_SetConnectTime(2000, 1); + hCNetSDK.NET_DVR_SetReconnect(100000, true); + //璁惧淇℃伅, 杈撳嚭鍙傛暟 + HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); + HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); + + // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑 + m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; + System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); + m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; + System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); + m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; + System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); + m_strLoginInfo.wPort = m_sPort; + m_strLoginInfo.byVerifyMode = 0; + m_strLoginInfo.byLoginMode = 0; + //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse + m_strLoginInfo.bUseAsynLogin = true; + //寮傛鐧诲綍鍥炶皟 + m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera); + m_strLoginInfo.write(); + int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); + if (i < 0) { + int errorCode = hCNetSDK.NET_DVR_GetLastError(); + log.info("鐧诲綍寮傚父锛�" + errorCode); + } } /** @@ -154,32 +192,13 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - @Async("loginExecutor") public void loginAll() { try { log.debug("鍔犺浇lib瀹屾垚锛�"); - List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); + List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras()); for (ArdCameras camera : ardCameras) { - camera = login(camera); - if (camera.getLoginId() >= 0) { - log.info("鐩告満" + camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛锛�" + camera.getLoginId()); - ardCamerasMapper.updateArdCameras(camera); - } else { - log.info("鐩告満" + camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触锛�" + camera.getLoginId()); - } -// if (!globalVariable.loginMap.containsKey(camera.getId())) { -// camera = login(camera); -// if (camera.getLoginId() >= 0) { -// log.info("鐩告満" + camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛锛�" + camera.getLoginId()); -// globalVariable.loginMap.put(camera.getId(), camera.getLoginId()); -// ardCamerasService.updateArdCameras(camera); -// } else { -// log.info("鐩告満" + camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触锛�" + camera.getLoginId()); -// } -// } else { -// Integer userid = globalVariable.loginMap.get(camera.getId()); -// log.info("褰撳墠鐩告満:" + camera.getId() + "宸茬櫥褰�,ID:" + userid); -// } + Thread.sleep(500); + login(camera); } } catch (Exception ex) { log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); @@ -196,13 +215,13 @@ */ @Override public boolean loginOut(String cameraId) { - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); boolean b = hCNetSDK.NET_DVR_Logout(userId); if (b) { - globalVariable.loginMap.remove(cameraId); + GlobalVariable.loginMap.remove(cameraId); } return b; } @@ -210,17 +229,16 @@ /** * 鏄惁鍦ㄧ嚎 * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override public boolean isOnLine(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { 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; + Integer userId = GlobalVariable.loginMap.get(cameraId); + return hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); } /** @@ -235,23 +253,23 @@ */ @Override @SdkOperate - public boolean PTZControlWithSpeed(CameraCmd cmd) { + public boolean pTZControlWithSpeed(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChannelNum(); Integer speed = cmd.getSpeed(); Integer code = cmd.getCode(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); - Integer dwStop; + Integer userId = GlobalVariable.loginMap.get(cameraId); + int dwStop; if (enable) { dwStop = 0;//寮�鍚� } else { dwStop = 1;//鍏抽棴 } - Integer dwPTZCommand = -1; + int dwPTZCommand = -1; switch (code) { /*鏂瑰悜*/ case 1: @@ -318,7 +336,7 @@ /** * 璁剧疆鑱氱劍鍊� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate @@ -326,10 +344,10 @@ String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); Integer dwFocusPos = cmd.getDwFocusPos(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG(); Pointer point = focusmodeCfg.getPointer(); @@ -346,17 +364,17 @@ /** * 鑾峰彇鑱氱劍鍊� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override public Map<String, Object> getFocusPos(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return new HashMap<>(); } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG(); Pointer point = focusmodeCfg.getPointer(); @@ -379,7 +397,7 @@ /** * 璁剧疆棰勭疆鐐� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate @@ -387,10 +405,10 @@ String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); Integer PresetIndex = cmd.getPresetIndex(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); @@ -402,7 +420,7 @@ /** * 杞埌棰勭疆鐐� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate @@ -410,10 +428,10 @@ String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); Integer PresetIndex = cmd.getPresetIndex(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); @@ -434,13 +452,13 @@ public String getVideoResolution(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return " "; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); String ResResolution = ""; - HCNetSDK.NET_DVR_COMPRESSIONCFG_V30 resolution = new HCNetSDK.NET_DVR_COMPRESSIONCFG_V30(); + NET_DVR_COMPRESSIONCFG_V30 resolution = new NET_DVR_COMPRESSIONCFG_V30(); resolution.write(); Pointer pioint = resolution.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -449,8 +467,8 @@ if (bool) { resolution.read(); //瑙嗛杈撳嚭鍙e垎杈ㄧ巼锛�0- 1024x768锛�1- 1280x720锛�2-1280x1024锛�3- 1680x1050锛�4- 1920x1080锛�5- 3840*2160 - byte byStreamType = resolution.struNormHighRecordPara.byStreamType; - int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate; +// byte byStreamType = resolution.struNormHighRecordPara.byStreamType; +// int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate; int byResolution = resolution.struNormHighRecordPara.byResolution; switch (byResolution) { case 0: @@ -528,7 +546,6 @@ } /** - * @return * @鎻忚堪 鑾峰彇ptz淇℃伅 * @鍙傛暟 [userId, channelNum] * @杩斿洖鍊� boolean @@ -540,19 +557,19 @@ public Map<String, Object> getPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return null; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); - HCNetSDK.NET_DVR_PTZPOS m_ptzPosCurrent = new HCNetSDK.NET_DVR_PTZPOS(); + NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); Pointer pioint = m_ptzPosCurrent.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); m_ptzPosCurrent.write(); 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搴︼紱 @@ -564,7 +581,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); @@ -573,7 +590,7 @@ } else { int code = hCNetSDK.NET_DVR_GetLastError(); log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); - return null; + return new HashMap<>(); } } @@ -592,16 +609,16 @@ String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); Map<String, Double> ptz = cmd.getPtzMap(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); - HCNetSDK.NET_DVR_PTZPOS m_ptzPosCurrent = new HCNetSDK.NET_DVR_PTZPOS(); + Integer userId = GlobalVariable.loginMap.get(cameraId); + 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)); @@ -621,17 +638,18 @@ @Override @SdkOperate - public boolean setTargetPosition(CameraCmd cmd) { + public boolean guideTargetPosition(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); - HCNetSDK.NET_DVR_PTZPOS m_ptzPosCurrent = new HCNetSDK.NET_DVR_PTZPOS(); + Integer userId = GlobalVariable.loginMap.get(cameraId); + NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); m_ptzPosCurrent.wAction = 1; try { - double[] cameraPositon = cmd.getCamPosition(); + 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); String p = String.valueOf((int) (cameraPTZ[0] * 10)); @@ -649,7 +667,7 @@ } return bool; } catch (Exception ex) { - log.error(ex.getMessage()); + log.error("寮曞寮傚父:" + ex.getMessage()); return false; } } @@ -663,64 +681,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; @@ -738,10 +728,10 @@ public int getPTZLockInfo(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return -1; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG(); Pointer point = netDvrPtzLockcfg.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -753,8 +743,7 @@ return -1; } else { netDvrPtzLockcfg.read(); - int byWorkMode = netDvrPtzLockcfg.byWorkMode; - return byWorkMode; + return netDvrPtzLockcfg.byWorkMode; } } @@ -771,11 +760,11 @@ public boolean setZeroPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); - HCNetSDK.NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new HCNetSDK.NET_DVR_INITIALPOSITIONCTRL(); + Integer userId = GlobalVariable.loginMap.get(cameraId); + NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL(); initialpositionctrl.dwSize = initialpositionctrl.size(); initialpositionctrl.byWorkMode = 0; @@ -803,10 +792,10 @@ public Map<String, Object> getPtzScope(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return new HashMap<>(); } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE(); Pointer point = m_ptzPosCurrent.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -852,10 +841,10 @@ String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX(); Pointer point = struCameraParam.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -879,7 +868,6 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.info("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); - return false; } log.info("璁剧疆閫忛浘鎴愬姛"); return bool; @@ -899,10 +887,10 @@ String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX(); Pointer point = struDayNigh.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -928,7 +916,6 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.info("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); - return false; } log.info("璁剧疆澶滆鎴愬姛"); return bool; @@ -948,10 +935,10 @@ String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + 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); @@ -975,10 +962,28 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.info("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); - return false; } log.info("璁剧疆鑱氱劍妯″紡鎴愬姛"); return bool; + } + + public String getFocusMode(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChannelNum(); + 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) { + System.out.println("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + } + struFocusMode.read(); + log.info("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + return String.valueOf(struFocusMode.byFocusMode); } /** @@ -995,11 +1000,11 @@ String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); - Integer dwStop; + Integer userId = GlobalVariable.loginMap.get(cameraId); + int dwStop; if (enable) { dwStop = 0;//寮�鍚� } else { @@ -1009,7 +1014,6 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.info("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); - return false; } log.info("璁剧疆浜戝彴鍔犵儹鎴愬姛"); return bool; @@ -1029,10 +1033,10 @@ String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG(); Pointer point = struDeicing.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -1053,7 +1057,6 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.info("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); - return false; } log.info("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); return bool; @@ -1062,15 +1065,15 @@ /** * 鎴浘 杩旂粰鍓嶇 * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ public String captureJPEGPicture(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30(); if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) { // 杩斿洖Boolean鍊硷紝鍒ゆ柇鏄惁鑾峰彇璁惧鑳藉姏 @@ -1089,41 +1092,11 @@ boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); log.info("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); - BASE64Encoder encoder = new BASE64Encoder(); String png_base64 = encoder.encodeBuffer(jpegBuffer);//杞崲鎴恇ase64涓� png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n log.info("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); 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("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯"); -// } -// } - - } /** @@ -1139,10 +1112,10 @@ public String picCutCate(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); - if (!globalVariable.loginMap.containsKey(cameraId)) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - Integer userId = globalVariable.loginMap.get(cameraId); + Integer userId = GlobalVariable.loginMap.get(cameraId); //鍥剧墖淇℃伅 NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); //璁剧疆鍥剧墖鍒嗚鲸鐜� @@ -1175,9 +1148,9 @@ InputStream input = new ByteArrayInputStream(array); String url = ""; try { - boolean b = minioUtil.putObject(BucketName, ObjectName, input, input.available(), ContentType); + boolean b = MinioUtils.uploadObject(BucketName, ObjectName, input, input.available(), ContentType); if (b) { - url = minioUtil.presignedGetObject(BucketName, ObjectName, 5); + url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName); log.info("涓婁紶鏂囦欢鎴愬姛!" + url); } } catch (IOException ex) { @@ -1200,113 +1173,26 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - @SdkOperate public String record(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); - boolean enable = cmd.isEnable(); - if (!globalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - Integer userId = globalVariable.loginMap.get(cameraId); - String path = ""; - //棰勮鍙傛暟 - 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(); - int lRealHandle; - if (enable) { - if (!user_real_Map.containsKey(userId)) { - lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); - if (lRealHandle == -1) { - int iErr = hCNetSDK.NET_DVR_GetLastError(); - log.error("鍙栨祦澶辫触" + iErr); - return ""; - } - log.info("鍙栨祦鎴愬姛"); - - File file = new File("D:/record/temp.mp4"); - if (!file.exists()) { - try { - File fileParent = file.getParentFile(); - if (!fileParent.exists()) { - fileParent.mkdirs(); - } - file.createNewFile(); - } catch (Exception e) { - e.printStackTrace(); - } - } - try { - path = file.getCanonicalPath(); - } catch (IOException e) { - e.printStackTrace(); - } - recordInfo info = new recordInfo(); - info.setLRealHandle(lRealHandle); - info.setRecordPath(path); - user_real_Map.put(userId, info); - } - recordInfo info = user_real_Map.get(userId); - if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 1, info.getRecordPath())) { - log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - return "淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负:" + hCNetSDK.NET_DVR_GetLastError(); - } - log.info("褰曞儚寮�濮�"); - //return info.getRecordPath(); - return ""; - } else { - recordInfo info = user_real_Map.get(userId); - if (StringUtils.isNull(info)) { - return ""; - } - hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle()); - log.info("褰曞儚鍋滄"); - //瀛樺叆minio - String BucketName = "record"; - String uuid = UUID.randomUUID().toString().replace("-", ""); - String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); - String ObjectName = time + "/" + uuid + ".mp4"; - String ContentType = "video/MP4"; - FileInputStream stream = null; - try { - stream = new FileInputStream(info.getRecordPath()); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - String url = ""; - try { - boolean b = minioUtil.putObject(BucketName, ObjectName, stream, stream.available(), ContentType); - if (b) { - url = minioUtil.presignedGetObject(BucketName, ObjectName, 5); - log.info("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } catch (IOException ex) { - log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); - } - user_real_Map.remove(userId); - return url; - } - } - - @Override - @SdkOperate - public void recordToMinio(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); boolean enable = cmd.isEnable(); - if (!globalVariable.loginMap.containsKey(cameraId)) { - return; + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; } - Integer userId = globalVariable.loginMap.get(cameraId); - String path = ""; + 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(); @@ -1317,58 +1203,186 @@ previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 previewinfo.write(); - int lRealHandle; + String url = ""; if (enable) { - if (!user_real_Map.containsKey(userId)) { - lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); + if (!GlobalVariable.previewMap.containsKey(cameraId)) { + int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { - int iErr = hCNetSDK.NET_DVR_GetLastError(); - log.error("鍙栨祦澶辫触" + iErr); - return; + log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); + return ""; } log.info("鍙栨祦鎴愬姛"); - File file = new File("D:/recordTemp/" + cameraId + ".mp4"); - if (!file.exists()) { - File fileParent = file.getParentFile(); - if (!fileParent.exists()) { - fileParent.mkdirs(); - } - file.createNewFile(); - } - path = file.getCanonicalPath(); - recordInfo info = new recordInfo(); - info.setLRealHandle(lRealHandle); - info.setRecordPath(path); - user_real_Map.put(userId, info); + GlobalVariable.previewMap.put(cameraId, lRealHandle); } - recordInfo info = user_real_Map.get(userId); - if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 1, info.getRecordPath())) { + if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - return; + return ""; } log.info("褰曞儚寮�濮�"); } else { - recordInfo info = user_real_Map.get(userId); - if (StringUtils.isNull(info)) { - return; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); } - hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle()); log.info("褰曞儚鍋滄"); - //瀛樺叆minio - String BucketName = cmd.getRecordBucketName(); - String ObjectName = cmd.getRecordObjectName(); - String ContentType = "video/MP4"; - FileInputStream stream = new FileInputStream(info.getRecordPath()); - String url = ""; - boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); - if (b) { - url = BucketName + ObjectName; - log.info("涓婁紶鏂囦欢鎴愬姛!" + url); - user_real_Map.remove(userId); - } } + return url; } catch (Exception ex) { log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; + } + } + + @Override + public void recordStart(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChannelNum(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + 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("鍋滄褰撳墠褰曞儚"); + } + 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.getChannelNum(); + 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(); + String ContentType = "video/MP4"; + FileInputStream stream = new FileInputStream(path); + String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); + String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4"; + boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType); + if (b) { + url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName; + 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.getChannelNum(); + 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()); } } } \ No newline at end of file -- Gitblit v1.9.3