From bd8cdb3244d058ad062610c8dc914374b52dd1e6 Mon Sep 17 00:00:00 2001 From: liusuyi <13324259@qq.com> Date: 星期一, 23 十月 2023 20:33:37 +0800 Subject: [PATCH] 增加redis和流媒体服务外部程序 增加流媒体日志 --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 553 ++++++++++++++++++++++++++++--------------------------- 1 files changed, 282 insertions(+), 271 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 4fb1c27..9ebe065 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 @@ -5,14 +5,16 @@ import com.ruoyi.common.annotation.SdkOperate; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; -import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; +import com.ruoyi.device.dhsdk.lib.LibraryLoad; +import com.ruoyi.device.dhsdk.lib.NetSDKLib; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; +import com.ruoyi.device.hiksdk.sdk.ExceptionCallBack; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.gis.GisUtil; @@ -26,7 +28,7 @@ import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.Base64; @@ -38,6 +40,7 @@ import java.util.*; import java.util.concurrent.PriorityBlockingQueue; +import static com.ruoyi.device.hiksdk.common.GlobalVariable.loginCameraMap; import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.*; /** @@ -58,50 +61,10 @@ @Resource private IVtduService vtduService; - private static HCNetSDK hCNetSDK; + public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; + private static FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 - @Override - public void loadHCNetSDKLib() { - try { - log.debug("寮�濮嬪姞杞絪dk搴撴枃浠惰矾寰�"); - if (Platform.isWindows()) { - String WIN_PATH = System.getProperty("user.dir") + File.separator + "lib\\hikDll\\HCNetSDK.dll"; - log.debug("褰撳墠Windows骞冲彴鐨剆dk搴撹矾寰勶細" + WIN_PATH); - hCNetSDK = (HCNetSDK) Native.loadLibrary(WIN_PATH, HCNetSDK.class); - } else { - log.debug("Linux骞冲彴"); - String LINUX_PATH = System.getProperty("user.dir") + File.separator + "hiklib" + File.separator + "libhcnetsdk.so"; - log.debug("褰撳墠Linux骞冲彴鐨剆dk搴撹矾寰勶細" + LINUX_PATH); - hCNetSDK = (HCNetSDK) Native.loadLibrary(LINUX_PATH, HCNetSDK.class); - //璁剧疆HCNetSDKCom缁勪欢搴撴墍鍦ㄨ矾寰� - //libhcnetsdk.so - String strPathCom = "/home/hiklib"; - 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鎵�鍦ㄨ矾寰� - 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鎵�鍦ㄨ矾寰� - 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(); - hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArraySsl.getPointer()); - } - } catch (Exception ex) { - log.error("鍔犺浇搴撴枃浠跺紓甯革細" + ex.getMessage()); - } - } - - @Override /** * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔 * @鍙傛暟 [dvrLogin] @@ -110,103 +73,118 @@ * @鍒涘缓鏃堕棿 2023/1/17 16:12 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - public void syncLogin(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 = false; - m_strLoginInfo.write(); - //鍚屾鐧诲綍 - int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); - if (lUserID < 0) { - int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.error("鐧诲綍寮傚父锛�" + errorCode); - - log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触"); - camera.setChanNum(0); - camera.setLoginId(-1); - camera.setState("0"); - } else { - - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); + @Override + public void login(ArdCameras camera) { + try { + // 鍒濆鍖� + if (!hCNetSDK.NET_DVR_Init()) { + log.error("SDK鍒濆鍖栧け璐�"); } - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); - GlobalVariable.loginMap.put(camera.getId(), lUserID); - log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛"); + //鎵撳嵃娴峰悍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(5000, 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(); - camera.setLoginId(lUserID); - camera.setState("1"); - camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); - camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); - //鑾峰彇鏈�鏂伴�氶亾 - List<ArdChannel> cameraChannelList = getCameraChannelList(camera); - if (cameraChannelList.size() > 0) { - for (ArdChannel channel : cameraChannelList) { - channel.setId(IdUtils.simpleUUID()); - ardChannelService.insertArdChannel(channel); + // 娉ㄥ唽璁惧-鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑 + 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 = false; + m_strLoginInfo.write(); + //鍚屾鐧诲綍 + int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); + if (lUserID < 0) { + int errorCode = hCNetSDK.NET_DVR_GetLastError(); + log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触,閿欒鐮侊細" + errorCode); + camera.setChanNum(0); + camera.setLoginId(-1); + camera.setState("0"); + } else { + if (fExceptionCallBack == null) { + fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 + //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) + if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { + log.info("Set fExceptionCallBack function fail"); + return; + } else { + log.info("Set fExceptionCallBack function successfully!"); + } } - //娣诲姞鍒版祦濯掍綋 - for (ArdChannel channel : cameraChannelList) { - String name = camera.getId() + "_" + channel.getChanNo(); - String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream"; - Vtdu vtdu = vtduService.selectVtduByName(name); - if (vtdu == null) { + + if (GlobalVariable.loginMap.containsKey(camera.getId())) { + GlobalVariable.loginMap.remove(camera.getId()); + } + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + GlobalVariable.loginMap.put(camera.getId(), lUserID); + GlobalVariable.loginCameraMap.put(lUserID, camera); + + log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); + camera.setLoginId(lUserID); + camera.setState("1"); + camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); + camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); + //鑾峰彇鏈�鏂伴�氶亾 + List<ArdChannel> cameraChannelList = getCameraChannelList(camera); + if (cameraChannelList.size() > 0) { + for (ArdChannel channel : cameraChannelList) { + channel.setId(IdUtils.simpleUUID()); + ardChannelService.insertArdChannel(channel); + } + //娣诲姞鍒版祦濯掍綋 + for (ArdChannel channel : cameraChannelList) { + String name = camera.getId() + "_" + channel.getChanNo(); + String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream"; + Vtdu vtdu = vtduService.selectVtduByName(name); + if (vtdu != null) { + vtduService.deleteVtduByName(name); + } //娣诲姞鍒版祦濯掍綋 vtdu = new Vtdu(); vtdu.setRtspSource(rtspSource); vtdu.setName(camera.getId() + "_" + channel.getChanNo()); - vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); + Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); + if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) { + vtdu.setIsCode("0");//榛樿涓嶈浆鐮� + } else { + vtdu.setIsCode("1");//榛樿杞爜 + } vtdu.setMode("1");//榛樿CPU杞В鐮� vtdu.setCameraId(camera.getId()); vtduService.insertVtdu(vtdu); - } else { - if (!rtspSource.equals(vtdu.getRtspSource())) { - //鏇存柊rtsp鍦板潃 - vtdu.setRtspSource(rtspSource); - vtduService.updateVtdu(vtdu); - } } } + //鍒涘缓寮曞闃熷垪 + if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { + Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); + PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); + GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + } + ardCamerasService.updateArdCameras(camera); } - //鍒涘缓寮曞闃熷垪 - if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { - Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); - PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); - GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); - } - ardCamerasService.updateArdCameras(camera); + } catch (Exception ex) { + log.error("娉ㄥ唽璁惧寮傚父", ex); } } @@ -276,14 +254,12 @@ @Override public void loginAll() { try { - log.debug("鍔犺浇lib瀹屾垚锛�"); ArdCameras ardCamera = new ArdCameras(); ardCamera.setFactory("1"); List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera); for (ArdCameras camera : ardCameras) { - Thread.sleep(500); - //寮傛鐧诲綍 - asyncLogin(camera); + //鐧诲綍 + login(camera); } } catch (Exception ex) { log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); @@ -303,7 +279,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); boolean b = hCNetSDK.NET_DVR_Logout(userId); if (b) { GlobalVariable.loginMap.remove(cameraId); @@ -323,7 +299,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); return hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_CHECK_USER_STATUS, null, 0); } catch (Exception ex) { log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage()); @@ -342,7 +318,6 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - @SdkOperate public boolean pTZControlWithSpeed(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); @@ -352,7 +327,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); int dwStop; if (enable) { dwStop = 0;//寮�鍚� @@ -429,7 +404,6 @@ * @param cmd 鐩告満鍛戒护 */ @Override - @SdkOperate public boolean setFocusPos(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); @@ -438,7 +412,7 @@ return false; } // 鑾峰彇鍙傛暟 - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) 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(); struGisInfo.struPtzPosEx.dwFocus = dwFocusPos; @@ -465,14 +439,15 @@ * @param cmd 鐩告満鍛戒护 */ @Override - public Map<String, Object> getFocusPos(CameraCmd cmd) { + public int getFocusPos(CameraCmd cmd) { + int result = 0; String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return new HashMap<>(); + return result; } // 鑾峰彇鍙傛暟 - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) 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(); @@ -486,13 +461,12 @@ if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.error("鑾峰彇GIS淇℃伅鏁版嵁澶辫触,璇风◢鍚庨噸璇�" + code); - return new HashMap<>(); + return result; } else { struGisInfo.read(); - Map<String, Object> map = new HashMap<>(); - map.put("dwFocus", struGisInfo.struPtzPosEx.dwFocus); - return map; + result = struGisInfo.struPtzPosEx.dwFocus; } + return result; } /** @@ -501,7 +475,6 @@ * @param cmd 鐩告満鍛戒护 */ @Override - @SdkOperate public boolean setPreset(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); @@ -509,7 +482,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); @@ -524,7 +497,6 @@ * @param cmd 鐩告満鍛戒护 */ @Override - @SdkOperate public boolean gotoPreset(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); @@ -532,7 +504,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); @@ -550,15 +522,15 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - public Map<String, String> getVideoCompressionCfg(CameraCmd cmd) { + public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return null; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); - Map<String, String> map = new HashMap<>(); + Map<String, Object> map = new HashMap<>(); NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30(); compressioncfg.write(); Pointer pioint = compressioncfg.getPointer(); @@ -615,85 +587,85 @@ videoBitrate = "淇濈暀"; break; case 1: - videoBitrate = "16K(淇濈暀)"; + videoBitrate = "16(淇濈暀)"; break; case 2: - videoBitrate = "32K"; + videoBitrate = "32"; break; case 3: - videoBitrate = "48k"; + videoBitrate = "48"; break; case 4: - videoBitrate = "64k"; + videoBitrate = "64"; break; case 5: - videoBitrate = "80k"; + videoBitrate = "80"; break; case 6: - videoBitrate = "96k"; + videoBitrate = "96"; break; case 7: - videoBitrate = "128k"; + videoBitrate = "128"; break; case 8: - videoBitrate = "160k"; + videoBitrate = "160"; break; case 9: - videoBitrate = "192k"; + videoBitrate = "192"; break; case 10: - videoBitrate = "224k"; + videoBitrate = "224"; break; case 11: - videoBitrate = "256K"; + videoBitrate = "256"; break; case 12: - videoBitrate = "320K"; + videoBitrate = "320"; break; case 13: - videoBitrate = "384K"; + videoBitrate = "384"; break; case 14: - videoBitrate = "448K"; + videoBitrate = "448"; break; case 15: - videoBitrate = "512K"; + videoBitrate = "512"; break; case 16: - videoBitrate = "640K"; + videoBitrate = "640"; break; case 17: - videoBitrate = "768K"; + videoBitrate = "768"; break; case 18: - videoBitrate = "896K"; + videoBitrate = "896"; break; case 19: - videoBitrate = "1024K"; + videoBitrate = "1024"; break; case 20: - videoBitrate = "1280K"; + videoBitrate = "1280"; break; case 21: - videoBitrate = "1536K"; + videoBitrate = "1536"; break; case 22: - videoBitrate = "1792K"; + videoBitrate = "1792"; break; case 23: videoBitrate = "2048K"; break; case 24: - videoBitrate = "3072K"; + videoBitrate = "3072"; break; case 25: - videoBitrate = "4096K"; + videoBitrate = "4096"; break; case 26: - videoBitrate = "8192K"; + videoBitrate = "8192"; break; case 27: - videoBitrate = "16384K"; + videoBitrate = "16384"; break; default: videoBitrate = "鍏朵粬"; @@ -703,43 +675,43 @@ String resolution = ""; switch (compressioncfg.struNormHighRecordPara.byResolution) { case 0: - resolution = "DCIF(528*384/528*320)"; + resolution = "528*384/528*320"; break; case 1: - resolution = "CIF(352*288/352*240)"; + resolution = "352*288/352*240"; break; case 2: - resolution = "QCIF(176*144/176*120)"; + resolution = "176*144/176*120"; break; case 3: - resolution = "4CIF(704*576/704*480)"; + resolution = "704*576/704*480"; break; case 4: - resolution = "2CIF(704*288/704*240)"; + resolution = "704*288/704*240"; break; case 6: - resolution = "QVGA(320*240)"; + resolution = "320*240"; break; case 7: - resolution = "QQVGA(160*120)"; + resolution = "160*120"; break; case 16: - resolution = "VGA(640*480)"; + resolution = "640*480"; break; case 17: - resolution = "UXGA(1600*1200)"; + resolution = "1600*1200"; break; case 18: - resolution = "SVGA(800*600)"; + resolution = "800*600"; break; case 19: - resolution = "HD720P(1280*720)"; + resolution = "1280*720"; break; case 20: - resolution = "XVGA(1280*960)"; + resolution = "1280*960"; break; case 21: - resolution = "HD900P(1600*900)"; + resolution = "1600*900"; break; case 22: resolution = "1360*1024"; @@ -751,7 +723,7 @@ resolution = "1920*1920"; break; case 27: - resolution = "1920*1080p"; + resolution = "1920*1080"; break; case 28: resolution = "2560*1920"; @@ -766,10 +738,80 @@ resolution = "涓嶅湪褰撳墠鍒嗚鲸鐜囩储寮曪紝璇疯仈绯荤鐞嗗憳娣诲姞"; break; } - map.put("resolution", resolution); - map.put("videoBitrate", videoBitrate); - map.put("videoEncType", videoEncType); - map.put("streamType", streamType); + //甯х巼 + String nFrameRate = ""; + switch (compressioncfg.struNormHighRecordPara.dwVideoFrameRate) { + case 0: + nFrameRate = "0"; + break; + case 1: + nFrameRate = "1/16"; + break; + case 2: + nFrameRate = "1/8"; + break; + case 3: + nFrameRate = "1/4"; + break; + case 4: + nFrameRate = "1/2"; + break; + case 5: + nFrameRate = "1"; + break; + case 6: + nFrameRate = "2"; + break; + case 7: + nFrameRate = "4"; + break; + case 8: + nFrameRate = "6"; + break; + case 9: + nFrameRate = "8"; + break; + case 10: + nFrameRate = "10"; + break; + case 11: + nFrameRate = "12"; + break; + case 12: + nFrameRate = "16"; + break; + case 13: + nFrameRate = "20"; + break; + case 14: + nFrameRate = "15"; + break; + case 15: + nFrameRate = "18"; + break; + case 16: + nFrameRate = "22"; + break; + case 17: + nFrameRate = "25"; + break; + case 18: + nFrameRate = "30"; + break; + case 19: + nFrameRate = "35"; + break; + case 20: + nFrameRate = "40"; + break; + default: + nFrameRate = "鏈煡"; + break; + } + map.put("resolution", resolution);//鍒嗚鲸鐜� + map.put("videoBitrate", videoBitrate);//姣旂壒鐜� + map.put("videoEncType", videoEncType);//缂栫爜 + map.put("nFrameRate", nFrameRate);//甯х巼 } else { int code = hCNetSDK.NET_DVR_GetLastError(); @@ -794,9 +836,9 @@ String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return null; + return new HashMap<>(); } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); Pointer pioint = m_ptzPosCurrent.getPointer(); @@ -828,7 +870,6 @@ log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } - } /** @@ -840,7 +881,6 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� */ @Override - @SdkOperate public boolean setPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); @@ -848,13 +888,13 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); m_ptzPosCurrent.wAction = 1; try { - String p = String.valueOf(ptz.get("p") * 10); - String t = String.valueOf(ptz.get("t") * 10); - String z = String.valueOf(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)); @@ -873,14 +913,13 @@ } @Override - @SdkOperate public boolean guideTargetPosition(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); m_ptzPosCurrent.wAction = 1; try { @@ -908,49 +947,6 @@ } } - /** - * @鎻忚堪 鎿嶆帶閿佸畾 - * @鍙傛暟 [userId, channelNum] - * @杩斿洖鍊� boolean - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:36 - * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 - */ - @Override - @SdkOperate - public boolean controlLock(CameraCmd cmd) { - String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満 - 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();//鐢宠鑰� - 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; - } /** * @鎻忚堪 鑾峰彇ptz閿佸畾淇℃伅 @@ -967,7 +963,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return -1; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG(); Pointer point = netDvrPtzLockcfg.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -999,7 +995,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL(); initialpositionctrl.dwSize = initialpositionctrl.size(); @@ -1031,7 +1027,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return new HashMap<>(); } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE(); Pointer point = m_ptzPosCurrent.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -1080,7 +1076,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX(); Pointer point = struCameraParam.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -1126,7 +1122,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX(); Pointer point = struDayNigh.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -1174,7 +1170,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); Pointer point = struFocusMode.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -1217,7 +1213,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); Pointer point = struFocusMode.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -1247,7 +1243,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); int dwStop; if (enable) { dwStop = 0;//寮�鍚� @@ -1280,7 +1276,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG(); Pointer point = struDeicing.getPointer(); IntByReference ibrBytesReturned = new IntByReference(0); @@ -1317,7 +1313,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30(); if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) { // 杩斿洖Boolean鍊硷紝鍒ゆ柇鏄惁鑾峰彇璁惧鑳藉姏 @@ -1360,7 +1356,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); //鍥剧墖淇℃伅 NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); //璁剧疆鍥剧墖鍒嗚鲸鐜� @@ -1424,7 +1420,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); //寮哄埗I甯х粨鏋勪綋瀵硅薄 HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� netDvrIFrame.read(); @@ -1468,6 +1464,15 @@ GlobalVariable.previewMap.remove(cameraId); } log.debug("褰曞儚鍋滄"); + //瀛樺叆minio + String BucketName = "record"; + String ObjectName = IdUtils.simpleUUID() + ".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) { @@ -1477,15 +1482,15 @@ } @Override - public void recordStart(CameraCmd cmd) { + public boolean recordStart(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return; + return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); //寮哄埗I甯х粨鏋勪綋瀵硅薄 HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� netDvrIFrame.read(); @@ -1515,18 +1520,20 @@ int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); - return; + return false; } 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; + return false; } log.debug("褰曞儚寮�濮�"); + return true; } catch (Exception ex) { log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage()); + return false; } } @@ -1540,7 +1547,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); //region 寮哄埗I甯� HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� netDvrIFrame.read(); @@ -1586,14 +1593,15 @@ } @Override - public void recordStopNotToMinio(CameraCmd cmd) { + public boolean recordStopNotToMinio(CameraCmd cmd) { + boolean result = false; try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return; + return false; } - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); //寮哄埗I甯х粨鏋勪綋瀵硅薄 HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� netDvrIFrame.read(); @@ -1620,9 +1628,12 @@ GlobalVariable.previewMap.remove(cameraId); } log.debug("褰曞儚鍋滄"); + result = true; } catch (Exception ex) { log.error("褰曞儚鍋滄寮傚父" + ex.getMessage()); + result = false; } + return result; } //鑾峰彇IP閫氶亾 @@ -1678,7 +1689,7 @@ return new HashMap<>(); } // 鑾峰彇鍙傛暟 - Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId); + Integer userId = (Integer) 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(); -- Gitblit v1.9.3