Commit a6321f08588fb93bb26361b6a8e3d4778e437af1

Authored by 648540858
1 parent 55fcdddc

优化文件合并逻辑,只有一个文件则直接复制

src/main/java/top/panll/assist/service/VideoFileService.java
@@ -281,7 +281,7 @@ public class VideoFileService { @@ -281,7 +281,7 @@ public class VideoFileService {
281 File[] files = dateFile.listFiles((File dir, String name) ->{ 281 File[] files = dateFile.listFiles((File dir, String name) ->{
282 boolean filterResult = true; 282 boolean filterResult = true;
283 File currentFile = new File(dir + File.separator + name); 283 File currentFile = new File(dir + File.separator + name);
284 - if (currentFile.isFile() && name.contains(":") && name.endsWith(".mp4") && !name.startsWith(".")){ 284 + if (currentFile.isFile() && name.contains(":") && name.endsWith(".mp4") && !name.startsWith(".") && currentFile.length() > 0){
285 String[] timeArray = name.split("-"); 285 String[] timeArray = name.split("-");
286 if (timeArray.length == 3){ 286 if (timeArray.length == 3){
287 String fileStartTimeStr = dateFile.getName() + " " + timeArray[0]; 287 String fileStartTimeStr = dateFile.getName() + " " + timeArray[0];
@@ -361,28 +361,53 @@ public class VideoFileService { @@ -361,28 +361,53 @@ public class VideoFileService {
361 + filesInTime.get(filesInTime.size()- 1).getName().split("-")[1]; 361 + filesInTime.get(filesInTime.size()- 1).getName().split("-")[1];
362 mergeOrCutTaskInfo.setEndTime(endTimeInFile); 362 mergeOrCutTaskInfo.setEndTime(endTimeInFile);
363 } 363 }
  364 + if (filesInTime.size() == 1) {
364 365
365 - ffmpegExecUtils.mergeOrCutFile(filesInTime, recordFile, stream, (status, percentage, result)->{  
366 - // 发出redis通知  
367 - if (status.equals(Progress.Status.END.name())) {  
368 - mergeOrCutTaskInfo.setPercentage("1");  
369 -  
370 - // 处理文件路径  
371 - Path relativize = Paths.get(userSettings.getRecord()).getParent().relativize(Paths.get(result));  
372 - mergeOrCutTaskInfo.setRecordFile(relativize.toString());  
373 - if (remoteHost != null) {  
374 - mergeOrCutTaskInfo.setDownloadFile(remoteHost + "/download.html?url=" + relativize);  
375 - mergeOrCutTaskInfo.setPlayFile(remoteHost + "/" + relativize);  
376 - }  
377 - redisUtil.convertAndSend("topic_mergeorcut_end", mergeOrCutTaskInfo);  
378 - logger.info("[录像合并] 合并完成,APP:{}, STREAM: {}, 任务ID:{}", app, stream, taskId);  
379 - }else {  
380 - mergeOrCutTaskInfo.setPercentage(percentage + "");  
381 - redisUtil.convertAndSend("topic_mergeorcut_continue", mergeOrCutTaskInfo); 366 + // 文件只有一个则不合并,直接复制过去
  367 + mergeOrCutTaskInfo.setPercentage("1");
  368 + // 处理文件路径
  369 + String recordFileResultPath = recordFile.getAbsolutePath() + File.separator + stream + ".mp4";
  370 + Path relativize = Paths.get(userSettings.getRecord()).getParent().relativize(Paths.get(recordFileResultPath));
  371 + try {
  372 + Files.copy(filesInTime.get(0).toPath(), Paths.get(recordFileResultPath));
  373 + } catch (IOException e) {
  374 + e.printStackTrace();
  375 + logger.info("[录像合并] 失败,APP:{}, STREAM: {}, 任务ID:{}", app, stream, taskId);
  376 + return taskId;
  377 + }
  378 + mergeOrCutTaskInfo.setRecordFile(relativize.toString());
  379 + if (remoteHost != null) {
  380 + mergeOrCutTaskInfo.setDownloadFile(remoteHost + "/download.html?url=" + relativize);
  381 + mergeOrCutTaskInfo.setPlayFile(remoteHost + "/" + relativize);
382 } 382 }
383 String key = String.format("%S_%S_%S_%S", keyStr, mergeOrCutTaskInfo.getApp(), mergeOrCutTaskInfo.getStream(), mergeOrCutTaskInfo.getId()); 383 String key = String.format("%S_%S_%S_%S", keyStr, mergeOrCutTaskInfo.getApp(), mergeOrCutTaskInfo.getStream(), mergeOrCutTaskInfo.getId());
384 redisUtil.set(key, mergeOrCutTaskInfo); 384 redisUtil.set(key, mergeOrCutTaskInfo);
385 - }); 385 + redisUtil.convertAndSend("topic_mergeorcut_end", mergeOrCutTaskInfo);
  386 + logger.info("[录像合并] 合并完成,APP:{}, STREAM: {}, 任务ID:{}", app, stream, taskId);
  387 + }else {
  388 + ffmpegExecUtils.mergeOrCutFile(filesInTime, recordFile, stream, (status, percentage, result)->{
  389 + // 发出redis通知
  390 + if (status.equals(Progress.Status.END.name())) {
  391 + mergeOrCutTaskInfo.setPercentage("1");
  392 +
  393 + // 处理文件路径
  394 + Path relativize = Paths.get(userSettings.getRecord()).getParent().relativize(Paths.get(result));
  395 + mergeOrCutTaskInfo.setRecordFile(relativize.toString());
  396 + if (remoteHost != null) {
  397 + mergeOrCutTaskInfo.setDownloadFile(remoteHost + "/download.html?url=" + relativize);
  398 + mergeOrCutTaskInfo.setPlayFile(remoteHost + "/" + relativize);
  399 + }
  400 + redisUtil.convertAndSend("topic_mergeorcut_end", mergeOrCutTaskInfo);
  401 + logger.info("[录像合并] 合并完成,APP:{}, STREAM: {}, 任务ID:{}", app, stream, taskId);
  402 + }else {
  403 + mergeOrCutTaskInfo.setPercentage(percentage + "");
  404 + redisUtil.convertAndSend("topic_mergeorcut_continue", mergeOrCutTaskInfo);
  405 + }
  406 + String key = String.format("%S_%S_%S_%S", keyStr, mergeOrCutTaskInfo.getApp(), mergeOrCutTaskInfo.getStream(), mergeOrCutTaskInfo.getId());
  407 + redisUtil.set(key, mergeOrCutTaskInfo);
  408 + });
  409 + }
  410 +
386 return taskId; 411 return taskId;
387 } 412 }
388 413