Commit a6321f08588fb93bb26361b6a8e3d4778e437af1
1 parent
55fcdddc
优化文件合并逻辑,只有一个文件则直接复制
Showing
1 changed file
with
44 additions
and
19 deletions
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 |