From 0c357e5f37be55d18a13f13d17756a9084ee1a8d Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 Apr 2022 10:53:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=B7=E5=BA=B7mp4=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/config/ConfigProperties.java | 2 ++ .../lib/hik/HikCameraControlModuleImpl.java | 21 ++------------ .../web/lib/hik/HikLoginModuleImpl.java | 28 ++++++++++++++----- .../zhehekeji/web/service/CameraService.java | 1 + .../zhehekeji/web/service/OrderService.java | 2 ++ .../com/zhehekeji/web/service/PlcService.java | 2 +- web/src/main/resources/application-dev.yml | 7 +++-- web/src/main/resources/application-prod.yml | 4 +++ web/src/main/resources/application-test.yml | 6 ++-- 9 files changed, 42 insertions(+), 31 deletions(-) diff --git a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java index 809be34..c707e88 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -51,6 +51,8 @@ public class ConfigProperties { private Long delayCaptureTime; + private Long delayDownloadMp4; + } @Data diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java index b95859f..be362c7 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java @@ -260,36 +260,19 @@ public class HikCameraControlModuleImpl implements CameraControlModule { start = start.minusMinutes(1); end = end.minusMinutes(1); PathUtil.checkDirc(path); - Duration duration = Duration.between(start, end); - Long seconds = duration.getSeconds(); - long timeDiff = 90 - seconds; - if(timeDiff > 0){ - //海康录像时间短会下载失败 - start = start.minusSeconds(timeDiff); - } HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME(); startTime.setTime(start.getYear(), start.getMonthValue(), start.getDayOfMonth(), start.getHour(), start.getMinute(), start.getSecond()); HCNetSDK.NET_DVR_TIME endTime = new HCNetSDK.NET_DVR_TIME(); endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond()); -// HCNetSDK.NET_DVR_PLAYCOND struDownloadCond = new HCNetSDK.NET_DVR_PLAYCOND(); -// struDownloadCond.dwChannel = 1; -// struDownloadCond.struStartTime = startTime; -// struDownloadCond.struStopTime = endTime; -// struDownloadCond.write(); log.info("start download mp4 path:{} ,cameraId:{},start_time:{},end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime()); int lUserID = CameraConnMap.getConnId(cameraId).intValue(); - //int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime_V40(lUserID,path.getBytes(),struDownloadCond); int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(lUserID, 1, startTime, endTime, path); if (result == -1) { log.error("downloadMp4 error code:{},cameraId:{},path:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path); } else { - HikLoginModuleImpl.hcNetsdk.NET_DVR_PlayBackControl(result, HikLoginModuleImpl.hcNetsdk.NET_DVR_PLAYSTART,0,null); - /*if(!ok){ - log.error("downloadMp4 error code:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); - }*/ Timer downloadtimer = new Timer(); downloadtimer.schedule(new DownloadTask(result,downloadtimer,path,cameraId), 0, 5000); } @@ -325,11 +308,11 @@ public class HikCameraControlModuleImpl implements CameraControlModule { HikLoginModuleImpl.hcNetsdk.NET_DVR_StopGetFile(handler); //ffmpeg转码 log.info("download over,cameraId:{}",cameraId); - /*String ffmpegFile = path+"ffmpeg.mp4"; + String ffmpegFile = path+"ffmpeg.mp4"; convetor(path,ffmpegFile); PathUtil.deleteFile(path); File file = new File(ffmpegFile); - file.renameTo(new File(path));*/ + file.renameTo(new File(path)); }else { log.debug("cameraId:{},progress:{}",cameraId,nPos.getValue()); } diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java index edc3bdb..b777d45 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java @@ -12,12 +12,16 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class HikLoginModuleImpl implements CameraControlLoginModule { + + public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; public static HCNetSDK hcNetsdk = HCNetSDK.INSTANCE; private static int MAX_RECONNET_TIME = 100; + private static boolean hasInit = Boolean.FALSE; + static HikExceptionCallBack hikExceptionCallBack = new HikExceptionCallBack(); /** @@ -30,13 +34,16 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { public boolean init() { //public static boolean init(NetSDKLib.fDisConnect disConnect, NetSDKLib.fHaveReConnect haveReConnect) { Pointer pointer = null; - - Boolean bInit = hcNetsdk.NET_DVR_Init(); - if(!bInit) { - log.error("hik Initialize SDK failed"); - return false; + if(!hasInit){ + Boolean ok = hcNetsdk.NET_DVR_Init(); + if(!ok){ + log.error("hik Initialize SDK failed"); + return false; + } + hasInit = Boolean.TRUE; } + Boolean ok = hcNetsdk.NET_DVR_SetExceptionCallBack_V30(0,0,hikExceptionCallBack,pointer); if(!ok){ log.error("hik callback config error"); @@ -81,7 +88,11 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { m_strLoginInfo.write(); HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息 - int m_lUserID = hcNetsdk.NET_DVR_Login_V30(m_strIp,(short) m_nPort,m_strUser,m_strPassword,m_strDeviceInfo30); + int m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo); + int lChannel = 2; + //byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值 + + int tryTimes = 0; while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){ log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError()); @@ -90,11 +101,14 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { } catch (InterruptedException e) { e.printStackTrace(); } - m_lUserID = hcNetsdk.NET_DVR_Login_V30(m_strIp,(short) m_nPort,m_strUser,m_strPassword,m_strDeviceInfo30); + m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo); tryTimes ++; } if(m_lUserID >= 0){ log.info("hik login success"); + //此id是用来保存视频的 且id不是固定的 + int lDChannel = (int)m_strDeviceInfo.struDeviceV30.byStartDChan + lChannel -1; + return new NetSDKLib.LLong(m_lUserID); }else { return null; diff --git a/web/src/main/java/com/zhehekeji/web/service/CameraService.java b/web/src/main/java/com/zhehekeji/web/service/CameraService.java index 3ebebaf..cd9173b 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CameraService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CameraService.java @@ -86,6 +86,7 @@ public class CameraService { if(StringUtils.isEmpty(camera.getRtcServer())){ camera.setRtcServer("127.0.0.1"); } + camera.setRtsp("rtsp://"+configProperties.getCameraConfig().getCameraUser()+":"+configProperties.getCameraConfig().getCameraPassword()+"@"+camera.getIp()+":554/cam/realmonitor?channel=1&subtype=0"); try { cameraMapper.updateById(camera); } catch (DuplicateKeyException e) { diff --git a/web/src/main/java/com/zhehekeji/web/service/OrderService.java b/web/src/main/java/com/zhehekeji/web/service/OrderService.java index 130fdf5..9d4c336 100644 --- a/web/src/main/java/com/zhehekeji/web/service/OrderService.java +++ b/web/src/main/java/com/zhehekeji/web/service/OrderService.java @@ -43,6 +43,7 @@ public class OrderService { orders.forEach(orderVO -> { if (streetMap.get(orderVO.getStreetId()) != null) { orderVO.setStreetName(streetMap.get(orderVO.getStreetId()).getName()); + } //计算订单的时间 @@ -80,6 +81,7 @@ public class OrderService { public String location(OrderVO orderVO,Street street){ //from to 模型 + if (orderVO.getInOut1() != null && orderVO.getInOut2() != null) { //左右货架 货位号 //库内转库内 看 to diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 9e14de4..d84d6bd 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -179,7 +179,7 @@ public class PlcService { @Override public void run() { String realPath = configProperties.getSavePath().getMp4Path() + path; - TaskDelayExecutor.addMp4DelayTask(cameraId,realPath,startTime,endTime,12000L); + TaskDelayExecutor.addMp4DelayTask(cameraId,realPath,startTime,endTime,configProperties.getCameraConfig().getDelayDownloadMp4()); } }); thread.start(); diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml index be3d2c6..03a3952 100644 --- a/web/src/main/resources/application-dev.yml +++ b/web/src/main/resources/application-dev.yml @@ -30,11 +30,14 @@ cameraConfig: cameraType: 1 cameraPassword: a1234567 cameraUser: admin + # ------海康默认是8000 中威是37777 cameraPort: 37777 #相机抓图延迟 毫秒 delayCaptureTime: 2000 - #OCR识别延迟 毫秒 - delayScanTime: 2000 + # 下载mp4延迟 海康的下载mp4需要2分钟 + # 中威延迟10s就可 + # 单位毫秒 + delayDownloadMp4: 120000 # ------------ # -----图片 mp4下载地址 diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 693ad83..891242d 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -34,6 +34,10 @@ cameraConfig: videoServer: 127.0.0.1:8083 #相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 delayCaptureTime: 3500 + # 下载mp4延迟 海康的下载mp4需要2分钟 + # 中威延迟10s就可 + # 单位毫秒 + delayDownloadMp4: 120000 # ------------ # -----图片 mp4下载地址 savePath: diff --git a/web/src/main/resources/application-test.yml b/web/src/main/resources/application-test.yml index 4c6df38..b18ba9e 100644 --- a/web/src/main/resources/application-test.yml +++ b/web/src/main/resources/application-test.yml @@ -34,8 +34,10 @@ cameraConfig: videoServer: 127.0.0.1:8083 #相机抓图延迟 毫秒 delayCaptureTime: 2000 - #OCR识别延迟 毫秒 - delayScanTime: 2000 + # 下载mp4延迟 海康的下载mp4需要2分钟 + # 中威延迟10s就可 + # 单位毫秒 + delayDownloadMp4: 120000 # ------------ # -----图片 mp4下载地址 savePath: