|
|
|
@ -1,5 +1,6 @@
|
|
|
|
package com.zhehekeji.web.lib.hik;
|
|
|
|
package com.zhehekeji.web.lib.hik;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.sun.jna.NativeLong;
|
|
|
|
import com.sun.jna.ptr.IntByReference;
|
|
|
|
import com.sun.jna.ptr.IntByReference;
|
|
|
|
import com.zhehekeji.common.util.PathUtil;
|
|
|
|
import com.zhehekeji.common.util.PathUtil;
|
|
|
|
import com.zhehekeji.core.util.Assert;
|
|
|
|
import com.zhehekeji.core.util.Assert;
|
|
|
|
@ -10,7 +11,9 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.*;
|
|
|
|
import java.io.*;
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
|
|
|
|
import java.time.Duration;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Timer;
|
|
|
|
import java.util.Timer;
|
|
|
|
@ -254,42 +257,52 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) {
|
|
|
|
public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) {
|
|
|
|
|
|
|
|
|
|
|
|
PathUtil.checkDirc(path);
|
|
|
|
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();
|
|
|
|
HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME();
|
|
|
|
startTime.setTime(start.getYear(), start.getMonthValue(), start.getDayOfMonth(), start.getHour(), start.getMinute(), start.getSecond());
|
|
|
|
startTime.setTime(start.getYear(), start.getMonthValue(), start.getDayOfMonth(), start.getHour(), start.getMinute(), start.getSecond());
|
|
|
|
HCNetSDK.NET_DVR_TIME endTime = new HCNetSDK.NET_DVR_TIME();
|
|
|
|
HCNetSDK.NET_DVR_TIME endTime = new HCNetSDK.NET_DVR_TIME();
|
|
|
|
endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond());
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
|
|
HCNetSDK.NET_DVR_PLAYCOND struDownloadCond = new HCNetSDK.NET_DVR_PLAYCOND();
|
|
|
|
log.info("start download mp4 path:{} ,cameraId:{},start_time:{},end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime());
|
|
|
|
struDownloadCond.dwChannel = 1;
|
|
|
|
|
|
|
|
struDownloadCond.struStartTime = startTime;
|
|
|
|
|
|
|
|
struDownloadCond.struStopTime = endTime;
|
|
|
|
|
|
|
|
struDownloadCond.write();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info("start download mp4 path:{} ,cameraId:{}",path,cameraId);
|
|
|
|
|
|
|
|
int lUserID = CameraConnMap.getConnId(cameraId).intValue();
|
|
|
|
int lUserID = CameraConnMap.getConnId(cameraId).intValue();
|
|
|
|
|
|
|
|
|
|
|
|
int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime_V40(lUserID,path.getBytes(StandardCharsets.UTF_8),struDownloadCond);
|
|
|
|
//int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime_V40(lUserID,path.getBytes(),struDownloadCond);
|
|
|
|
if (result < 0) {
|
|
|
|
int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(lUserID, 1, startTime, endTime, path);
|
|
|
|
log.error("downloadMp4 error code:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
|
|
|
|
if (result == -1) {
|
|
|
|
|
|
|
|
log.error("downloadMp4 error code:{},cameraId:{},path:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
|
|
Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PlayBackControl(result, HikLoginModuleImpl.hcNetsdk.NET_DVR_PLAYSTART,0,null);
|
|
|
|
HikLoginModuleImpl.hcNetsdk.NET_DVR_PlayBackControl(result, HikLoginModuleImpl.hcNetsdk.NET_DVR_PLAYSTART,0,null);
|
|
|
|
if(!ok){
|
|
|
|
/*if(!ok){
|
|
|
|
log.error("downloadMp4 error code:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
|
|
|
|
log.error("downloadMp4 error code:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
Timer downloadtimer = new Timer();
|
|
|
|
Timer downloadtimer = new Timer();
|
|
|
|
downloadtimer.schedule(new DownloadTask(result,downloadtimer,path), 0, 500);
|
|
|
|
downloadtimer.schedule(new DownloadTask(result,downloadtimer,path,cameraId), 0, 5000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class DownloadTask extends java.util.TimerTask {
|
|
|
|
class DownloadTask extends java.util.TimerTask {
|
|
|
|
private Integer handler;
|
|
|
|
private Integer handler;
|
|
|
|
private Timer downloadtimer;
|
|
|
|
private Timer downloadtimer;
|
|
|
|
|
|
|
|
private Integer cameraId;
|
|
|
|
|
|
|
|
|
|
|
|
private String path;
|
|
|
|
private String path;
|
|
|
|
public DownloadTask(Integer handler,Timer downloadtimer,String path){
|
|
|
|
public DownloadTask(Integer handler,Timer downloadtimer,String path,int cameraId){
|
|
|
|
this.handler = handler;
|
|
|
|
this.handler = handler;
|
|
|
|
|
|
|
|
this.cameraId = cameraId;
|
|
|
|
this.downloadtimer = downloadtimer;
|
|
|
|
this.downloadtimer = downloadtimer;
|
|
|
|
this.path = path;
|
|
|
|
this.path = path;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -301,21 +314,23 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
|
|
|
|
HikLoginModuleImpl.hcNetsdk.NET_DVR_PlayBackControl(handler, HCNetSDK.NET_DVR_PLAYGETPOS, 0, nPos);
|
|
|
|
HikLoginModuleImpl.hcNetsdk.NET_DVR_PlayBackControl(handler, HCNetSDK.NET_DVR_PLAYGETPOS, 0, nPos);
|
|
|
|
if (nPos.getValue() > 100)
|
|
|
|
if (nPos.getValue() > 100)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
log.error("download mp4 error:{},cameraId:{},path:{}",HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path);
|
|
|
|
HikLoginModuleImpl.hcNetsdk.NET_DVR_StopGetFile(handler);
|
|
|
|
HikLoginModuleImpl.hcNetsdk.NET_DVR_StopGetFile(handler);
|
|
|
|
downloadtimer.cancel();
|
|
|
|
downloadtimer.cancel();
|
|
|
|
log.error("download mp4 error");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (nPos.getValue() == 100)
|
|
|
|
if (nPos.getValue() == 100)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
HikLoginModuleImpl.hcNetsdk.NET_DVR_StopGetFile(handler);
|
|
|
|
|
|
|
|
downloadtimer.cancel();
|
|
|
|
downloadtimer.cancel();
|
|
|
|
|
|
|
|
HikLoginModuleImpl.hcNetsdk.NET_DVR_StopGetFile(handler);
|
|
|
|
//ffmpeg转码
|
|
|
|
//ffmpeg转码
|
|
|
|
log.info("download over");
|
|
|
|
log.info("download over,cameraId:{}",cameraId);
|
|
|
|
String ffmpegFile = path+"ffmpeg.mp4";
|
|
|
|
/*String ffmpegFile = path+"ffmpeg.mp4";
|
|
|
|
convetor(path,ffmpegFile);
|
|
|
|
convetor(path,ffmpegFile);
|
|
|
|
PathUtil.deleteFile(path);
|
|
|
|
PathUtil.deleteFile(path);
|
|
|
|
File file = new File(ffmpegFile);
|
|
|
|
File file = new File(ffmpegFile);
|
|
|
|
file.renameTo(new File(path));
|
|
|
|
file.renameTo(new File(path));*/
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
|
|
|
log.debug("cameraId:{},progress:{}",cameraId,nPos.getValue());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|