Commit 94d831a8e8add7832064c8a04b0e3fbb9dc13c20

Authored by 648540858
1 parent 858ae0f0

只保留录像合并功能

src/main/java/top/panll/assist/config/StartConfig.java deleted 100755 → 0
1 -package top.panll.assist.config;  
2 -  
3 -import net.bramp.ffmpeg.FFmpeg;  
4 -import net.bramp.ffmpeg.FFprobe;  
5 -import org.slf4j.Logger;  
6 -import org.slf4j.LoggerFactory;  
7 -import org.springframework.beans.factory.annotation.Autowired;  
8 -import org.springframework.beans.factory.annotation.Value;  
9 -import org.springframework.boot.CommandLineRunner;  
10 -import org.springframework.core.annotation.Order;  
11 -import org.springframework.stereotype.Component;  
12 -import top.panll.assist.dto.UserSettings;  
13 -import top.panll.assist.service.FFmpegExecUtils;  
14 -import top.panll.assist.service.VideoFileService;  
15 -  
16 -import java.io.*;  
17 -import java.nio.charset.StandardCharsets;  
18 -  
19 -/**  
20 - * 用于启动检查环境  
21 - */  
22 -@Component  
23 -@Order(value=1)  
24 -public class StartConfig implements CommandLineRunner {  
25 -  
26 - private final static Logger logger = LoggerFactory.getLogger(StartConfig.class);  
27 -  
28 - @Value("${server.port}")  
29 - private String port;  
30 -  
31 - @Autowired  
32 - private UserSettings userSettings;  
33 -  
34 - @Autowired  
35 - private VideoFileService videoFileService;  
36 -  
37 -  
38 - @Override  
39 - public void run(String... args) {  
40 - String record = userSettings.getRecord();  
41 - if (!record.endsWith(File.separator)) {  
42 - userSettings.setRecord(userSettings.getRecord() + File.separator);  
43 - }  
44 -  
45 - File recordFile = new File(record);  
46 - if (!recordFile.exists()){  
47 - logger.warn("[userSettings.record]路径不存在,开始创建");  
48 - boolean mkResult = recordFile.mkdirs();  
49 - if (!mkResult) {  
50 - logger.info("[userSettings.record]目录创建失败");  
51 - System.exit(1);  
52 - }  
53 - }else {  
54 - if ( !recordFile.isDirectory()) {  
55 - logger.warn("[userSettings.record]路径是文件,请修改为目录");  
56 - System.exit(1);  
57 - }  
58 - if (!recordFile.canRead()) {  
59 - logger.error("[userSettings.record]路径无法读取");  
60 - System.exit(1);  
61 - }  
62 - if (!recordFile.canWrite()) {  
63 - logger.error("[userSettings.record]路径无法写入");  
64 - System.exit(1);  
65 - }  
66 - }  
67 - }  
68 -}  
src/main/java/top/panll/assist/config/WebMvcConfig.java
@@ -17,7 +17,7 @@ public class WebMvcConfig extends WebMvcConfigurerAdapter { @@ -17,7 +17,7 @@ public class WebMvcConfig extends WebMvcConfigurerAdapter {
17 17
18 @Override 18 @Override
19 public void addResourceHandlers(ResourceHandlerRegistry registry) { 19 public void addResourceHandlers(ResourceHandlerRegistry registry) {
20 - File file = new File(userSettings.getRecord()); 20 + File file = new File(userSettings.getRecordTempPath());
21 registry.addResourceHandler("/download/**").addResourceLocations("file://" + file.getAbsolutePath() + "/"); 21 registry.addResourceHandler("/download/**").addResourceLocations("file://" + file.getAbsolutePath() + "/");
22 super.addResourceHandlers(registry); 22 super.addResourceHandlers(registry);
23 } 23 }
src/main/java/top/panll/assist/dto/UserSettings.java
@@ -13,12 +13,9 @@ public class UserSettings { @@ -13,12 +13,9 @@ public class UserSettings {
13 private String id; 13 private String id;
14 14
15 @Value("${userSettings.record}") 15 @Value("${userSettings.record}")
16 - private String record; 16 + private String recordTempPath = "./recordTemp";
17 17
18 - @Value("${userSettings.recordDay:7}")  
19 - private int recordDay;  
20 -  
21 - @Value("${userSettings.recordTempDay:-1}") 18 + @Value("${userSettings.recordTempDay:7}")
22 private int recordTempDay; 19 private int recordTempDay;
23 20
24 @Value("${userSettings.ffmpeg}") 21 @Value("${userSettings.ffmpeg}")
@@ -38,14 +35,6 @@ public class UserSettings { @@ -38,14 +35,6 @@ public class UserSettings {
38 this.id = id; 35 this.id = id;
39 } 36 }
40 37
41 - public String getRecord() {  
42 - return record;  
43 - }  
44 -  
45 - public void setRecord(String record) {  
46 - this.record = record;  
47 - }  
48 -  
49 public String getFfmpeg() { 38 public String getFfmpeg() {
50 return ffmpeg; 39 return ffmpeg;
51 } 40 }
@@ -62,20 +51,9 @@ public class UserSettings { @@ -62,20 +51,9 @@ public class UserSettings {
62 this.ffprobe = ffprobe; 51 this.ffprobe = ffprobe;
63 } 52 }
64 53
65 - public int getRecordDay() {  
66 - return recordDay;  
67 - }  
68 -  
69 - public void setRecordDay(int recordDay) {  
70 - this.recordDay = recordDay;  
71 - }  
72 54
73 public int getRecordTempDay() { 55 public int getRecordTempDay() {
74 - if (recordTempDay == -1) {  
75 - return recordDay;  
76 - }else {  
77 - return recordTempDay;  
78 - } 56 + return recordTempDay;
79 } 57 }
80 58
81 public void setRecordTempDay(int recordTempDay) { 59 public void setRecordTempDay(int recordTempDay) {
@@ -89,4 +67,12 @@ public class UserSettings { @@ -89,4 +67,12 @@ public class UserSettings {
89 public void setThreads(int threads) { 67 public void setThreads(int threads) {
90 this.threads = threads; 68 this.threads = threads;
91 } 69 }
  70 +
  71 + public String getRecordTempPath() {
  72 + return recordTempPath;
  73 + }
  74 +
  75 + public void setRecordTempPath(String recordTempPath) {
  76 + this.recordTempPath = recordTempPath;
  77 + }
92 } 78 }
src/main/java/top/panll/assist/service/FileManagerTimer.java
@@ -39,7 +39,7 @@ public class FileManagerTimer { @@ -39,7 +39,7 @@ public class FileManagerTimer {
39 // @Scheduled(fixedDelay = 2000) //测试 20秒执行一次 39 // @Scheduled(fixedDelay = 2000) //测试 20秒执行一次
40 @Scheduled(cron = "0 0 0 * * ?") //每天的0点执行 40 @Scheduled(cron = "0 0 0 * * ?") //每天的0点执行
41 public void execute(){ 41 public void execute(){
42 - if (userSettings.getRecord() == null) { 42 + if (userSettings.getRecordTempPath() == null) {
43 return; 43 return;
44 } 44 }
45 45
@@ -51,7 +51,7 @@ public class FileManagerTimer { @@ -51,7 +51,7 @@ public class FileManagerTimer {
51 lastTempCalendar.add(Calendar.DAY_OF_MONTH, -recordTempDay); 51 lastTempCalendar.add(Calendar.DAY_OF_MONTH, -recordTempDay);
52 lastTempDate = lastTempCalendar.getTime(); 52 lastTempDate = lastTempCalendar.getTime();
53 logger.info("[录像巡查]移除合并任务临时文件 {} 之前的文件", formatter.format(lastTempDate)); 53 logger.info("[录像巡查]移除合并任务临时文件 {} 之前的文件", formatter.format(lastTempDate));
54 - File recordTempFile = new File(userSettings.getRecord()); 54 + File recordTempFile = new File(userSettings.getRecordTempPath());
55 if (recordTempFile.exists() && recordTempFile.isDirectory() && recordTempFile.canWrite()) { 55 if (recordTempFile.exists() && recordTempFile.isDirectory() && recordTempFile.canWrite()) {
56 File[] tempFiles = recordTempFile.listFiles(); 56 File[] tempFiles = recordTempFile.listFiles();
57 if (tempFiles != null) { 57 if (tempFiles != null) {
src/main/java/top/panll/assist/service/VideoFileService.java
@@ -46,7 +46,7 @@ public class VideoFileService { @@ -46,7 +46,7 @@ public class VideoFileService {
46 private final SimpleDateFormat simpleDateFormatForTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 46 private final SimpleDateFormat simpleDateFormatForTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
47 47
48 public List<File> getAppList(Boolean sort) { 48 public List<File> getAppList(Boolean sort) {
49 - File recordFile = new File(userSettings.getRecord()); 49 + File recordFile = new File(userSettings.getRecordTempPath());
50 if (recordFile.isDirectory()) { 50 if (recordFile.isDirectory()) {
51 File[] files = recordFile.listFiles((File dir, String name) -> { 51 File[] files = recordFile.listFiles((File dir, String name) -> {
52 File currentFile = new File(dir.getAbsolutePath() + File.separator + name); 52 File currentFile = new File(dir.getAbsolutePath() + File.separator + name);
@@ -63,7 +63,7 @@ public class VideoFileService { @@ -63,7 +63,7 @@ public class VideoFileService {
63 } 63 }
64 64
65 public SpaceInfo getSpaceInfo(){ 65 public SpaceInfo getSpaceInfo(){
66 - File recordFile = new File(userSettings.getRecord()); 66 + File recordFile = new File(userSettings.getRecordTempPath());
67 SpaceInfo spaceInfo = new SpaceInfo(); 67 SpaceInfo spaceInfo = new SpaceInfo();
68 spaceInfo.setFree(recordFile.getFreeSpace()); 68 spaceInfo.setFree(recordFile.getFreeSpace());
69 spaceInfo.setTotal(recordFile.getTotalSpace()); 69 spaceInfo.setTotal(recordFile.getTotalSpace());
@@ -116,7 +116,7 @@ public class VideoFileService { @@ -116,7 +116,7 @@ public class VideoFileService {
116 logger.debug("获取[app: {}, stream: {}, statime: {}, endTime: {}]的视频", app, stream, 116 logger.debug("获取[app: {}, stream: {}, statime: {}, endTime: {}]的视频", app, stream,
117 startTimeStr, endTimeStr); 117 startTimeStr, endTimeStr);
118 118
119 - File recordFile = new File(userSettings.getRecord()); 119 + File recordFile = new File(userSettings.getRecordTempPath());
120 File streamFile = new File(recordFile.getAbsolutePath() + File.separator + app + File.separator + stream + File.separator); 120 File streamFile = new File(recordFile.getAbsolutePath() + File.separator + app + File.separator + stream + File.separator);
121 if (!streamFile.exists()) { 121 if (!streamFile.exists()) {
122 logger.warn("获取[app: {}, stream: {}, statime: {}, endTime: {}]的视频时未找到目录: {}", app, stream, 122 logger.warn("获取[app: {}, stream: {}, statime: {}, endTime: {}]的视频时未找到目录: {}", app, stream,
@@ -223,7 +223,7 @@ public class VideoFileService { @@ -223,7 +223,7 @@ public class VideoFileService {
223 fileList.add(file); 223 fileList.add(file);
224 } 224 }
225 225
226 - File recordFile = new File(userSettings.getRecord() ); 226 + File recordFile = new File(userSettings.getRecordTempPath() );
227 MergeOrCutTaskInfo mergeOrCutTaskInfo = new MergeOrCutTaskInfo(); 227 MergeOrCutTaskInfo mergeOrCutTaskInfo = new MergeOrCutTaskInfo();
228 mergeOrCutTaskInfo.setId(taskId); 228 mergeOrCutTaskInfo.setId(taskId);
229 mergeOrCutTaskInfo.setApp(videoTaskInfo.getApp()); 229 mergeOrCutTaskInfo.setApp(videoTaskInfo.getApp());
@@ -238,7 +238,7 @@ public class VideoFileService { @@ -238,7 +238,7 @@ public class VideoFileService {
238 mergeOrCutTaskInfo.setPercentage("1"); 238 mergeOrCutTaskInfo.setPercentage("1");
239 // 处理文件路径 239 // 处理文件路径
240 String recordFileResultPath = recordFile.getAbsolutePath() + File.separator + taskId + ".mp4"; 240 String recordFileResultPath = recordFile.getAbsolutePath() + File.separator + taskId + ".mp4";
241 - Path relativize = Paths.get(userSettings.getRecord()).relativize(Paths.get(recordFileResultPath)); 241 + Path relativize = Paths.get(userSettings.getRecordTempPath()).relativize(Paths.get(recordFileResultPath));
242 try { 242 try {
243 Files.copy(fileList.get(0).toPath(), Paths.get(recordFileResultPath)); 243 Files.copy(fileList.get(0).toPath(), Paths.get(recordFileResultPath));
244 } catch (IOException e) { 244 } catch (IOException e) {
@@ -260,7 +260,7 @@ public class VideoFileService { @@ -260,7 +260,7 @@ public class VideoFileService {
260 mergeOrCutTaskInfo.setPercentage("1"); 260 mergeOrCutTaskInfo.setPercentage("1");
261 261
262 // 处理文件路径 262 // 处理文件路径
263 - Path relativize = Paths.get(userSettings.getRecord()).relativize(Paths.get(result)); 263 + Path relativize = Paths.get(userSettings.getRecordTempPath()).relativize(Paths.get(result));
264 mergeOrCutTaskInfo.setRecordFile(relativize.toString()); 264 mergeOrCutTaskInfo.setRecordFile(relativize.toString());
265 if (videoTaskInfo.getRemoteHost() != null) { 265 if (videoTaskInfo.getRemoteHost() != null) {
266 mergeOrCutTaskInfo.setDownloadFile(videoTaskInfo.getRemoteHost() + "/download.html?url=download/" + relativize); 266 mergeOrCutTaskInfo.setDownloadFile(videoTaskInfo.getRemoteHost() + "/download.html?url=download/" + relativize);
@@ -376,7 +376,7 @@ public class VideoFileService { @@ -376,7 +376,7 @@ public class VideoFileService {
376 } 376 }
377 377
378 public boolean collection(String app, String stream, String type) { 378 public boolean collection(String app, String stream, String type) {
379 - File streamFile = new File(userSettings.getRecord() + File.separator + app + File.separator + stream); 379 + File streamFile = new File(userSettings.getRecordTempPath() + File.separator + app + File.separator + stream);
380 boolean result = false; 380 boolean result = false;
381 if (streamFile.exists() && streamFile.isDirectory() && streamFile.canWrite()) { 381 if (streamFile.exists() && streamFile.isDirectory() && streamFile.canWrite()) {
382 File signFile = new File(streamFile.getAbsolutePath() + File.separator + type + ".sign"); 382 File signFile = new File(streamFile.getAbsolutePath() + File.separator + type + ".sign");
@@ -390,7 +390,7 @@ public class VideoFileService { @@ -390,7 +390,7 @@ public class VideoFileService {
390 } 390 }
391 391
392 public boolean removeCollection(String app, String stream, String type) { 392 public boolean removeCollection(String app, String stream, String type) {
393 - File signFile = new File(userSettings.getRecord() + File.separator + app + File.separator + stream + File.separator + type + ".sign"); 393 + File signFile = new File(userSettings.getRecordTempPath() + File.separator + app + File.separator + stream + File.separator + type + ".sign");
394 boolean result = false; 394 boolean result = false;
395 if (signFile.exists() && signFile.isFile()) { 395 if (signFile.exists() && signFile.isFile()) {
396 result = signFile.delete(); 396 result = signFile.delete();
src/main/resources/all-application.yml
@@ -29,9 +29,9 @@ server: @@ -29,9 +29,9 @@ server:
29 # [根据业务需求配置] 29 # [根据业务需求配置]
30 user-settings: 30 user-settings:
31 # [可选 ] zlm配置的录像路径,不配置则使用当前目录下的record目录 即: ./record 31 # [可选 ] zlm配置的录像路径,不配置则使用当前目录下的record目录 即: ./record
32 - record: /media/lin/Server/ZLMediaKit/dev/ZLMediaKit/release/linux/Debug/www/record 32 + record-temp-path: ./recordTemp
33 # [可选 ] 录像保存时长(单位: 天)每天晚12点自动对过期文件执行清理, 不配置则不删除 33 # [可选 ] 录像保存时长(单位: 天)每天晚12点自动对过期文件执行清理, 不配置则不删除
34 - recordDay: 7 34 + record-temp-day: 7
35 # [可选 ] 录像下载合成临时文件保存时长, 不配置默认取值recordDay(单位: 天)每天晚12点自动对过期文件执行清理 35 # [可选 ] 录像下载合成临时文件保存时长, 不配置默认取值recordDay(单位: 天)每天晚12点自动对过期文件执行清理
36 # recordTempDay: 7 36 # recordTempDay: 7
37 # [必选 ] ffmpeg路径 37 # [必选 ] ffmpeg路径