1.录像名增加uuid防止重名

2.增加球机通道信息(录像机视频下载)
3.球机连接采用定时(每分钟)去判断是否连接到,不再运用才去获取
dongguan-huaweiyun
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 416094590c
commit a32771ab13

@ -26,6 +26,7 @@ import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Api(value = "CameraControl",tags = "球机控制管理")
@ -373,12 +374,30 @@ public class CameraControlController {
@PostMapping("/mp4/record")
@ApiOperation(value = "录像")
public Result<String> record(@RequestBody CameraRecord cameraRecord) {
Camera camera = cameraMapper.selectById(cameraRecord.getCameraId());
checkLogin(cameraRecord.getCameraId());
String url ="work/"+cameraRecord.getStartTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+"-"+ UUID.randomUUID() +".mp4";
cameraRecord.setPath(url);
cameraRecordMapper.insert(cameraRecord);
ConfigProperties.SavePath savePath = configProperties.getSavePath();
if (camera.getChannel() ==1){
cameraControlModule.downloadMp4(cameraRecord.getCameraId(),"D:\\"+url, cameraRecord.getStartTime(),cameraRecord.getEndTime(),savePath);
}else {
Camera cameraNvr = cameraMapper.selectOne(new QueryWrapper<Camera>().eq("type", 2));
cameraControlModule.downloadMp4(cameraNvr.getId(), "D:\\" + url, cameraRecord.getStartTime(), cameraRecord.getEndTime(), savePath, camera.getChannel());
}
return Result.success(configProperties.getServerOpenInfo().getDomain()+url);
}
@PostMapping("/mp4/record1")
@ApiOperation(value = "录像")
public Result<String> record1(@RequestBody CameraRecord cameraRecord) {
checkLogin(cameraRecord.getCameraId());
String url ="work/"+cameraRecord.getStartTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".mp4";
cameraRecord.setPath(url);
cameraRecordMapper.insert(cameraRecord);
ConfigProperties.SavePath savePath = configProperties.getSavePath();
cameraControlModule.downloadMp4(cameraRecord.getCameraId(),"D:\\"+url, cameraRecord.getStartTime(),cameraRecord.getEndTime(),savePath);
cameraControlModule.downloadMp4(cameraRecord.getCameraId(),"D:\\"+url, cameraRecord.getStartTime(),cameraRecord.getEndTime(),savePath,33);
return Result.success(configProperties.getServerOpenInfo().getDomain()+url);
}

@ -43,5 +43,6 @@ public class Camera {
private LocalDateTime updateTime;
private Integer rtspPort;
private Integer channel =1;
private Integer cameraType = 1;
}

@ -110,6 +110,7 @@ public interface CameraControlModule {
void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath);
void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath,Integer channel);
/**
*
*

@ -278,8 +278,28 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
Timer downloadtimer = new Timer();
downloadtimer.schedule(new DownloadTask(result,downloadtimer,path,cameraId,savePath), 0, 5000);
}
}
public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath,Integer channel) {
PathUtil.checkDirc(path);
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());
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(lUserID, channel, 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);
Timer downloadtimer = new Timer();
downloadtimer.schedule(new DownloadTask(result,downloadtimer,path,cameraId,savePath), 0, 5000);
}
}
class DownloadTask extends java.util.TimerTask {

@ -306,6 +306,36 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule {
}
}
public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end, ConfigProperties.SavePath savePath,Integer channel) {
PathUtil.checkDirc(path);
NetSDKLib.NET_TIME startTime = new NetSDKLib.NET_TIME();
startTime.setTime(start.getYear(), start.getMonthValue(), start.getDayOfMonth(), start.getHour(), start.getMinute(), start.getSecond());
NetSDKLib.NET_TIME endTime = new NetSDKLib.NET_TIME();
endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond());
NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE download_by_data_type = new NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE();
download_by_data_type.nChannelID = 0;
download_by_data_type.stStartTime = startTime;
download_by_data_type.stStopTime = endTime;
download_by_data_type.szSavedFileName = path;
download_by_data_type.emDataType = 3;
download_by_data_type.emRecordType = 0;
download_by_data_type.cbDownLoadPos = mp4ReceiveCB;
download_by_data_type.write();
NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE net_out_download_by_data_type = new NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE();
net_out_download_by_data_type.write();
NetSDKLib.LLong l = JoywareLoginModuleImpl.netsdk.CLIENT_DownloadByDataType(CameraConnMap.getConnId(cameraId), download_by_data_type.getPointer(), net_out_download_by_data_type.getPointer(), 8000);
if(l.longValue() != 0){
log.info("start download mp4 path:{},startTime:{} ,endTime:{},now:{},status:{},cameraId:{}", path, start, end, LocalDateTime.now(),l.longValue(),cameraId);
}else {
log.error("download mp4 error:{},startTime:{} ,endTime:{},cameraId:{}",ToolKits.getErrorCodePrint(),start,end,cameraId);
}
}
/**
*
*

@ -111,16 +111,11 @@ public class CameraService {
public PageInfo<Camera> cameras(StreetSearch streetSearch) {
PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize());
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>(0));
if (cameras.size() > 0) {
CountDownLatch latch = new CountDownLatch(cameras.size());
cameras.forEach(camera -> {
StatusThread statusThread = new StatusThread(camera, latch);
statusThread.start();
});
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
for(Camera camera : cameras){
if (CameraConnMap.cameraMap.containsKey(camera.getId())) {
camera.setStatus("连接成功");
} else {
camera.setStatus("未连接");
}
}
@ -141,7 +136,11 @@ public class CameraService {
try {
Boolean ok = false;
if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) {
if(CameraConnMap.getConnId(camera.getId()) ==null){
cameraLogin(camera);
}
ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue());
} else {
ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()));
}

@ -4,9 +4,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.SftpATTRS;
import com.leaper.web.config.ConfigProperties;
import com.leaper.web.entity.Camera;
import com.leaper.web.entity.LightSource;
import com.leaper.web.entity.OrderLive;
import com.leaper.web.entity.PicData;
import com.leaper.web.lib.CameraConnMap;
import com.leaper.web.lib.hik.HikLoginModuleImpl;
import com.leaper.web.lib.joyware.JoywareLoginModuleImpl;
import com.leaper.web.mapper.CameraMapper;
import com.leaper.web.mapper.LightSourceMapper;
import com.leaper.web.mapper.OrderLiveMapper;
import com.leaper.web.mapper.PicDataMapper;
@ -31,12 +36,16 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
@Component
@EnableScheduling
@Slf4j
public class CronTab {
@Resource
private CameraMapper cameraMapper;
@Resource
private ConfigProperties configProperties;
@Resource
@ -89,6 +98,61 @@ public class CronTab {
}
}
@Scheduled(cron = "0 * * * * ?")
//@Scheduled(cron = "0 0/1 * * * *")
public void cameraConn() {
log.info("球机连接判断");
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>(0));
if (cameras.size() > 0) {
CountDownLatch latch = new CountDownLatch(cameras.size());
cameras.forEach(camera -> {
StatusThread statusThread = new StatusThread(camera, latch);
statusThread.start();
});
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class StatusThread extends Thread {
private Camera camera;
private CountDownLatch latch;
public StatusThread(Camera camera, CountDownLatch latch) {
this.camera = camera;
this.latch = latch;
}
@Override
public void run() {
try {
Boolean ok = false;
if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) {
ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue());
} else {
ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()));
}
if (ok) {
camera.setStatus("连接正常");
} else {
CameraConnMap.disConn(camera.getId());
camera.setStatus("未连接");
}
} catch (Exception e) {
CameraConnMap.disConn(camera.getId());
camera.setStatus("未连接");
} finally {
latch.countDown();
}
}
}
public static void putTime(Integer streetId){
lightTimeMap.put(streetId,System.currentTimeMillis());
}

Loading…
Cancel
Save