Browse Source

视频下载

master
刘力 2 years ago
parent
commit
03339dd4ce
  1. 18
      storeroom/src/main/java/com/storeroom/modules/device/controller/CameraController.java
  2. 45
      storeroom/src/main/java/com/storeroom/modules/device/controller/DeviceController.java
  3. 10
      storeroom/src/main/java/com/storeroom/modules/device/service/CameraInfoService.java
  4. 10
      storeroom/src/main/java/com/storeroom/modules/device/service/impl/CameraInfoServiceImpl.java
  5. 10
      storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceCamerBindImpl.java
  6. 17
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java

18
storeroom/src/main/java/com/storeroom/modules/device/controller/CameraController.java

@ -7,22 +7,30 @@ import com.storeroom.annotaion.rest.AnonymousPostMapping;
import com.storeroom.annotaion.rest.AnonymousPutMapping;
import com.storeroom.exception.BaseException;
import com.storeroom.modules.device.domain.DeviceCamerBind;
import com.storeroom.modules.device.service.CameraInfoService;
import com.storeroom.modules.device.service.DeviceCamerBindService;
import com.storeroom.modules.device.service.DeviceService;
import com.storeroom.modules.device.service.dto.DeviceCamerBindCrieria;
import com.storeroom.modules.device.service.dto.DeviceInfoDto;
import com.storeroom.utils.ApiResponse;
import com.storeroom.utils.FileUtil;
import com.storeroom.utils.StringUtils;
import com.storeroom.utils.enums.ResponseStatus;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Set;
@ -35,7 +43,10 @@ public class CameraController {
private final DeviceService deviceService;
private final DeviceCamerBindService deviceCamerBindService;
private final CameraInfoService cameraInfoService;
@Value("${file.windows.path}")
private String path;
@ApiOperation("创建摄像机")
@AnonymousPostMapping("create")
@ -97,6 +108,13 @@ public class CameraController {
return ApiResponse.success(ResponseStatus.SUCCESS);
}
@ApiOperation("下载视频")
@AnonymousGetMapping("download")
public void downloadVideo(@RequestParam("fileName") String fileName, HttpServletResponse response, HttpServletRequest request) {
File file = new File(path + "/videos/", fileName);
FileUtil.downloadFile(request, response, file, false);
}
/**
* 验证必填值
*

45
storeroom/src/main/java/com/storeroom/modules/device/controller/DeviceController.java

@ -2,21 +2,16 @@ package com.storeroom.modules.device.controller;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.storeroom.annotaion.rest.AnonymousDeleteMapping;
import com.storeroom.annotaion.rest.AnonymousGetMapping;
import com.storeroom.annotaion.rest.AnonymousPostMapping;
import com.storeroom.exception.BaseException;
import com.storeroom.modules.device.domain.AlarmDeseCaBinetLog;
import com.storeroom.modules.device.domain.DeviceInfo;
import com.storeroom.modules.device.service.ArchivesCasesService;
import com.storeroom.modules.device.service.DeviceService;
import com.storeroom.modules.device.service.OperatingStateService;
import com.storeroom.modules.device.domain.*;
import com.storeroom.modules.device.service.*;
import com.storeroom.modules.storeroom3d.service.AlarmInfoService;
import com.storeroom.modules.storeroom3d.service.ThirdApiService;
import com.storeroom.utils.ApiResponse;
import com.storeroom.utils.HttpUtils;
import com.storeroom.utils.StringUtils;
import com.storeroom.utils.*;
import com.storeroom.utils.enums.ResponseStatus;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -30,10 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
@RestController
@RequiredArgsConstructor
@ -46,6 +38,8 @@ public class DeviceController {
private final ArchivesCasesService archivesCaseService;
private final AlarmInfoService alarmInfoService;
private final ThirdApiService thirdApiService;
private final CameraInfoService cameraInfoService;
private final DeviceCamerBindService deviceCamerBindService;
@ApiOperation("获取所有设备")
@AnonymousGetMapping("all")
@ -166,8 +160,31 @@ public class DeviceController {
@ApiOperation("第三方对接-上传密集架报警信息")
@AnonymousPostMapping("log")
public Object deseCabinetAlarmLog(@RequestBody AlarmDeseCaBinetLog alarmDeseCaBinetLog) {
if (StringUtils.isEmpty(alarmDeseCaBinetLog.getI64Ts())) {
alarmDeseCaBinetLog.setI64Ts(DateUtils.getNowTimeInMillis());
}
deviceService.upLoadAlarmLog(alarmDeseCaBinetLog);
//只记录报警日志下载视频操作开架视频下载由自己接口提供
if (alarmDeseCaBinetLog.getUsLevel() == 1) {
List<CameraInfo> cameraInfoList = new ArrayList<>();
List<DeviceCamerBind> list = deviceCamerBindService.queryStoreroomCode(alarmDeseCaBinetLog.getStoreCode());
list.forEach(item -> {
CameraInfo cameraInfo = new CameraInfo();
cameraInfo.setId(NanoIdUtils.randomNanoId());
cameraInfo.setDeviceCamerBindId(item);
cameraInfo.setDescription(alarmDeseCaBinetLog.getCContext());
cameraInfo.setEvent("密集架报警");
//循环从第三方设备下载视频到服务器
String fileName = deviceCamerBindService.downloadVideo(alarmDeseCaBinetLog.getI64Ts(), item.getDeviceInfoId(), item.getId());
cameraInfo.setDownloadLink(fileName);
cameraInfoList.add(cameraInfo);
});
cameraInfoService.createAll(cameraInfoList);
}
Map<String, Object> objectMap = new HashMap<>();
objectMap.put("code", "");
objectMap.put("errorinfo", "");

10
storeroom/src/main/java/com/storeroom/modules/device/service/CameraInfoService.java

@ -4,20 +4,22 @@ import com.storeroom.modules.device.domain.CameraInfo;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public interface CameraInfoService {
/**
* 创建视频监控信息
*
* @param cameraInfo
*/
void create(CameraInfo cameraInfo);
/**
* 下载视频
* @param response
* @throws IOException
* 创建视频监控信息
* @param cameraInfoList
*/
void downloadVideo(HttpServletResponse response) throws IOException;
void createAll(List<CameraInfo> cameraInfoList);
}

10
storeroom/src/main/java/com/storeroom/modules/device/service/impl/CameraInfoServiceImpl.java

@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Service
@RequiredArgsConstructor
@ -19,12 +20,13 @@ public class CameraInfoServiceImpl implements CameraInfoService {
@Override
public void create(CameraInfo cameraInfo) {
cameraInfoRepository.save(cameraInfo);
}
@Override
public void downloadVideo(HttpServletResponse response) throws IOException {
public void createAll(List<CameraInfo> cameraInfoList) {
cameraInfoRepository.saveAll(cameraInfoList);
}
}

10
storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceCamerBindImpl.java

@ -10,6 +10,7 @@ import com.storeroom.modules.device.service.dto.DeviceCamerBindCrieria;
import com.storeroom.modules.storeroom3d.config.common.VideoClient;
import com.storeroom.utils.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@ -28,6 +29,9 @@ public class DeviceCamerBindImpl implements DeviceCamerBindService {
private final DeviceCamerBindRepository deviceCamerBindRepository;
private final DeviceInfoRepository deviceInfoRepository;
@Value("${file.windows.path}")
private String path;
@Override
public void bind(List<DeviceCamerBind> deviceCamerBind) {
@ -71,6 +75,7 @@ public class DeviceCamerBindImpl implements DeviceCamerBindService {
}
@Override
public List<DeviceCamerBind> queryStoreroomCode(String storeroomCode) {
return deviceCamerBindRepository.findByStoreroomCode(storeroomCode);
@ -101,9 +106,8 @@ public class DeviceCamerBindImpl implements DeviceCamerBindService {
VideoClient videoClient = new VideoClient();
int result = videoClient.LogonDevice(deviceInfo.getDeviceIp(), deviceInfo.getDevicePort(), deviceInfo.getDeviceAccount(), deviceInfo.getDevicePassword());
if (result == 0) {
String i = deviceInfo.getVideoRoute();
videoClient.PlaybackByTimespanMode(strStartTime, strEndTime, Integer.parseInt(deviceInfo.getVideoRoute()));
return "成功";
return videoClient.PlaybackByTimespanMode(strStartTime, strEndTime, Integer.parseInt(deviceInfo.getVideoRoute()), path);
}
throw new BaseException("无法连接该设备");
}

17
storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java

@ -8,6 +8,9 @@ import com.storeroom.modules.storeroom3d.config.common.NVSSDK.*;
import com.storeroom.utils.DateUtils;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import java.io.File;
import java.io.FileOutputStream;
@ -21,6 +24,7 @@ public class VideoClient {
int m_iCurrentCount = 0;
String[] suffix = {".sdv", "", "", ".ps", "", "", ".ts"};
public void LogonNotify(String strIP, String strID, int iLogonID, int iLogonState) {
String strMsg = new String();
m_iLogonID = -1;
@ -164,7 +168,6 @@ public class VideoClient {
return 0;
}
;
/**
* 登录设备
@ -271,20 +274,20 @@ public class VideoClient {
}
public int PlaybackByTimespanMode(String startTime, String endTime, int iChannelNO) {
public String PlaybackByTimespanMode(String startTime, String endTime, int iChannelNO, String path) {
DOWNLOAD_TIMESPAN tDownloadTimeSpan = new DOWNLOAD_TIMESPAN();
tDownloadTimeSpan.m_iSize = tDownloadTimeSpan.size();
//Scanner scanInput = new Scanner(System.in);
//System.out.print("请输入录像文件类型(sdv=0;PS=3;TS=6):");
int iSaveFileType = 6;
tDownloadTimeSpan.m_iSaveFileType = iSaveFileType;
tDownloadTimeSpan.m_iFileFlag = 0; //0:Download multiple files 1:Download into a single file
//判断文件夹是否存在
File file = new File("videos/");
File file = new File(path + "/videos/");
if (!file.exists() && !file.isDirectory()) {
file.mkdirs();
}
String strLocalSaveFileName = new String(file + "/" + DateUtils.getNowTimeInMillis() + "" + suffix[iSaveFileType]);
String fileName = DateUtils.getNowTimeInMillis() + "" + suffix[iSaveFileType];
String strLocalSaveFileName = file + "/" + DateUtils.getNowTimeInMillis() + "" + suffix[iSaveFileType];
tDownloadTimeSpan.m_cLocalFilename = strLocalSaveFileName.getBytes();
tDownloadTimeSpan.m_iChannelNO = iChannelNO; //通道号按实际下载的设备通道号赋值
tDownloadTimeSpan.m_iStreamNo = 0; //码流号0-主码流1-副码流
@ -328,6 +331,6 @@ public class VideoClient {
System.err.println("NetFileDownload:DOWNLOAD_CMD_TIMESPAN fail! iRet=" + iRet);
}
return iRet;
return fileName;
}
}
Loading…
Cancel
Save