ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -64,12 +64,6 @@ private IArdCamerasService ardCamerasService; // //初始登录所有相机 // @PostConstruct // public void initLoginAll() { // cameraSdkService.loginAll(); // } @RequestMapping("/preview") private String preview() { return "preview"; ard-work/src/main/java/com/ruoyi/device/camera/service/impl/AsyncLogin.java
@@ -1,5 +1,6 @@ package com.ruoyi.device.camera.service.impl; import com.ruoyi.common.utils.Threads; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.dhsdk.service.IDhClientService; import com.ruoyi.device.hiksdk.service.IHikClientService; @@ -10,7 +11,7 @@ import javax.annotation.Resource; /** * @ClassName test * @ClassName 异步登录 * @Description: * @Author 刘苏义 * @Date 2023/10/23 21:39 @@ -26,11 +27,13 @@ @Async public void hikLogin(ArdCameras ardCameras) { Threads.sleep(200); hikClientService.login(ardCameras); } @Async public void dhLogin(ArdCameras ardCameras) { Threads.sleep(200); dhClientService.login(ardCameras); } } ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -69,10 +69,11 @@ if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { hikClientService.login(ardCamera); asyncLogin.hikLogin(ardCamera); result = true; } else if (factory.equals("2")) { result = dhClientService.login(ardCamera); asyncLogin.dhLogin(ardCamera); result = true; } } } catch (Exception ex) { ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
@@ -69,11 +69,11 @@ cmdObject.read(); result = true; } else { log.error("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint()); log.error("Parse [" + strCmd + "] Config Failed!" + ToolKits.getErrorCodePrint()); result = false; } } else { log.error("Get %s Config Failed!Last Error = %s\n", strCmd, getErrorCodePrint()); log.error("Get [" + strCmd + "] Config Failed!Last Error = " + getErrorCodePrint()); result = false; } @@ -90,25 +90,27 @@ if (bRet) { cmdObject.read(); } else { log.error("Get %s Config Failed!Last Error = %s\n", strCmd, getErrorCodePrint()); log.error("Get ["+strCmd+"] Config Failed!Last Error = " + getErrorCodePrint()); result = false; } return result; } // 获取配置 public static boolean GetConfig(NetSDKLib.LLong hLoginHandle, int nChn,int type,Structure cmdObject) { public static boolean GetConfig(NetSDKLib.LLong hLoginHandle, int nChn, int type, Structure cmdObject) { boolean result = false; // 获取 cmdObject.write(); if (netsdk.CLIENT_GetConfig(hLoginHandle, type, nChn, cmdObject.getPointer(), cmdObject.size(), 4000, null)) { cmdObject.read(); result=true; result = true; } else { log.error("GetConfig Failed!" + getErrorCodePrint()); result=false; result = false; } return result; } /** * 设置单个配置 * @@ -131,11 +133,12 @@ if (netsdk.CLIENT_SetNewDevConfig(hLoginHandle, strCmd, nChn, szBuffer, nBufferLen, error, restart, 3000)) { result = true; } else { log.error("Set %s Config Failed! Last Error = %s\n", strCmd, getErrorCodePrint()); log.error("Set [" + strCmd + "] Config Failed! Last Error = " + getErrorCodePrint()); result = false; } } else { log.error("Packet " + strCmd + " Config Failed!" + getErrorCodePrint()); log.error("Parse [" + strCmd + "] Config Failed!" + ToolKits.getErrorCodePrint()); result = false; } ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java
@@ -18,7 +18,7 @@ public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; // 设备信息 public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); // public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); // 登陆句柄 public static LLong m_hLoginHandle = new LLong(0);// @@ -66,7 +66,6 @@ int tryTimes = 1; //登录时尝试建立链接1次 netsdk.CLIENT_SetConnectTime(waitTime, tryTimes); // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime // 接口设置的登录设备超时时间和尝试次数意义相同,可选 NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM(); @@ -102,7 +101,7 @@ * 登录设备 * \endif */ public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword, NetSDKLib.NET_DEVICEINFO_Ex lpDeviceInfo) { IntByReference nError = new IntByReference(0); //入参 NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam = new NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY(); @@ -111,9 +110,8 @@ pstInParam.szPassword = m_strPassword.getBytes(); pstInParam.szUserName = m_strUser.getBytes(); //出参 NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY(); pstOutParam.stuDeviceInfo = m_stDeviceInfo; LLong m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError); //NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY(); LLong m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, lpDeviceInfo, nError); //m_hLoginHandle=netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam); if (m_hLoginHandle.longValue() == 0) { log.debug("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, getErrorCodePrint()); ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
@@ -74,7 +74,8 @@ @Override public Boolean login(ArdCameras camera) { LoginModule.init(disConnect, haveReConnect); LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword()); NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo); if (loginId.longValue() > 0) { //log.debug(camera.getIp() + ":" + camera.getPort() + "登录成功"); if (GlobalVariable.loginMap.containsKey(camera.getId())) { @@ -83,13 +84,14 @@ //删除管理通道 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); camera.setState("1"); camera.setChanNum(LoginModule.m_stDeviceInfo.byChanNum); camera.setChanNum(m_stDeviceInfo.byChanNum); camera.setStartDChan(1); camera.setLoginId((int) loginId.longValue()); ardCamerasService.updateArdCameras(camera); GlobalVariable.loginMap.put(camera.getId(), loginId); //获取最新通道 for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { ArdChannel channel = new ArdChannel(); AV_CFG_ChannelName av_cfg_channelName = new AV_CFG_ChannelName(); boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName); @@ -115,7 +117,6 @@ if (vtdu != null) { vtduService.deleteVtduByName(name); } //添加到流媒体 CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); @@ -792,62 +793,66 @@ @Override public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) { Map<String, Object> map = new HashMap<>(); String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return null; } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO(); cfg_encode_info.nChannelID = chanNo - 1; boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info); if (b) { int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//视频格式 String videoEncType = ""; switch (emCompression) { case 0: videoEncType = "MPEG4"; break; case 1: videoEncType = "MS-MPEG4"; break; case 2: videoEncType = "MPEG2"; break; case 3: videoEncType = "MPEG1"; break; case 4: videoEncType = "H.263"; break; case 5: videoEncType = "MJPG"; break; case 6: videoEncType = "FCC-MPEG4"; break; case 7: videoEncType = "标准h264"; break; case 8: videoEncType = "标准h265"; break; case 9: videoEncType = "SVAC"; break; default: videoEncType = "未知"; break; try { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return null; } int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate; int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth; int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight; String resolution = nWidth + "*" + nHeight; float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate; map.put("resolution", resolution);//分辨率 map.put("videoBitrate", String.valueOf(nBitRate));//比特率 map.put("videoEncType", videoEncType);//编码 map.put("nFrameRate", String.valueOf(nFrameRate));//帧率 LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO(); cfg_encode_info.nChannelID = chanNo - 1; boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info); if (b) { int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//视频格式 String videoEncType = ""; switch (emCompression) { case 0: videoEncType = "MPEG4"; break; case 1: videoEncType = "MS-MPEG4"; break; case 2: videoEncType = "MPEG2"; break; case 3: videoEncType = "MPEG1"; break; case 4: videoEncType = "H.263"; break; case 5: videoEncType = "MJPG"; break; case 6: videoEncType = "FCC-MPEG4"; break; case 7: videoEncType = "标准h264"; break; case 8: videoEncType = "标准h265"; break; case 9: videoEncType = "SVAC"; break; default: videoEncType = "未知"; break; } int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate; int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth; int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight; String resolution = nWidth + "*" + nHeight; float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate; map.put("resolution", resolution);//分辨率 map.put("videoBitrate", String.valueOf(nBitRate));//比特率 map.put("videoEncType", videoEncType);//编码 map.put("nFrameRate", String.valueOf(nFrameRate));//帧率 } } catch (Exception ex) { log.error("取码流压缩参数异常:" + ex.getMessage()); } return map; } @@ -881,7 +886,7 @@ // 设备断线回调: 当设备出现断线时,SDK会调用该函数 private static class DisConnect implements NetSDKLib.fDisConnect { public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { log.warn("Device["+pchDVRIP+"] Port["+nDVRPort+"] DisConnect!"); log.warn("Device[" + pchDVRIP + "] Port[" + nDVRPort + "] DisConnect!"); } } @@ -889,7 +894,7 @@ private static class HaveReConnect implements NetSDKLib.fHaveReConnect { @Override public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) { log.warn("ReConnect Device["+pchDVRIP+"] Port["+nDVRPort+"]"); log.warn("ReConnect Device[" + pchDVRIP + "] Port[" + nDVRPort + "]"); } } ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -184,6 +184,7 @@ for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) { if (ardVideoInspectTaskStep.getId() == null) { //新的步骤,添加 ardVideoInspectTaskStep.setId(IdUtils.simpleUUID()); ardVideoInspectTaskStepMapper.insertArdVideoInspectTaskStep(ardVideoInspectTaskStep); } else { //已有步骤,更新 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
@@ -463,7 +463,10 @@ for (Items item : items) { nameList.add(item.getName()); } } catch (ForestRuntimeException ex) { }catch (ForestNetworkException ex) { log.error("获取流媒体name列表异常:"+ex.getMessage()); } catch (ForestRuntimeException ex) { log.error("获取流媒体name列表异常:"+ex.getMessage()); } return nameList; ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java
@@ -117,8 +117,8 @@ */ @Override public int deleteVtduByName(String name) { log.debug("流媒体【" + name + "】通道删除"); mediaService.removePath(name); log.debug("流媒体【" + name + "】通道删除"); return vtduMapper.deleteVtduByName(name); } ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java
@@ -17,7 +17,7 @@ /** * 增加路径 */ @Post(url = "/config/paths/add/{name}") @Post(url = "/config/paths/add/{name}",async = true) public String addPath(@Var("name") String name, @JSONBody Conf body); /**