From 1b2793215f88816f084d23cf375fb95308aaac22 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 26 Sep 2025 14:26:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(video):=20=E8=A7=A3=E5=86=B3=E5=B9=B6?= =?UTF-8?q?=E5=8F=91=E7=8E=AF=E5=A2=83=E4=B8=8B=E8=A7=86=E9=A2=91=E7=89=87?= =?UTF-8?q?=E6=AE=B5=E5=A4=84=E7=90=86=E7=9A=84=E6=96=87=E4=BB=B6=E5=90=8D?= =?UTF-8?q?=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为输出文件名添加时间戳和线程ID后缀,确保唯一性 -为临时文件名添加时间戳和线程ID后缀,防止并发冲突 - 避免因文件名重复导致的视频处理错误 --- src/main/java/com/ycwl/basic/task/VideoPieceGetter.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java index 09448641..2fd4da1a 100644 --- a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java +++ b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java @@ -299,7 +299,9 @@ public class VideoPieceGetter { ffmpegTask.setFileList(listByDtRange); ffmpegTask.setDuration(duration); ffmpegTask.setOffsetStart(BigDecimal.valueOf(offset, 3)); - File outFile = new File(deviceId.toString() + "_" + faceSampleId + ".mp4"); + // 使用时间戳和线程ID确保输出文件名唯一性,避免并发冲突 + String uniqueSuffix = System.currentTimeMillis() + "_" + Thread.currentThread().getId(); + File outFile = new File(deviceId.toString() + "_" + faceSampleId + "_" + uniqueSuffix + ".mp4"); ffmpegTask.setOutputFile(outFile.getAbsolutePath()); boolean result = startFfmpegTask(ffmpegTask); if (!result) { @@ -437,7 +439,9 @@ public class VideoPieceGetter { boolean notOk = task.getFileList().stream().map(file -> { try { if (file.isNeedDownload() || (!file.getName().endsWith(".ts"))) { - String tmpFile = file.getName() + ".ts"; + // 使用时间戳和线程ID确保临时文件名唯一性,避免并发冲突 + String uniqueSuffix = System.currentTimeMillis() + "_" + Thread.currentThread().getId(); + String tmpFile = file.getName() + "_" + uniqueSuffix + ".ts"; boolean result = convertMp4ToTs(file, tmpFile); // 因为是并行转换,没法保证顺序,就直接存里面 if (result) {