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 281 File[] files = dateFile.listFiles((File dir, String name) ->{
282 282 boolean filterResult = true;
283 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 285 String[] timeArray = name.split("-");
286 286 if (timeArray.length == 3){
287 287 String fileStartTimeStr = dateFile.getName() + " " + timeArray[0];
... ... @@ -361,28 +361,53 @@ public class VideoFileService {
361 361 + filesInTime.get(filesInTime.size()- 1).getName().split("-")[1];
362 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 383 String key = String.format("%S_%S_%S_%S", keyStr, mergeOrCutTaskInfo.getApp(), mergeOrCutTaskInfo.getStream(), mergeOrCutTaskInfo.getId());
384 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 411 return taskId;
387 412 }
388 413  
... ...