|
|
@@ -27,6 +27,7 @@ import java.nio.file.Path;
|
|
|
import java.nio.file.Paths;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.UUID;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@@ -122,32 +123,29 @@ public class TbFileServiceImpl extends ServiceImpl<TbFileMapper, TbFile> impleme
|
|
|
log.info("上传文件的路径:{},返回的新文件路径:{}", filePath, subFileName);
|
|
|
|
|
|
//生成视频的封面图片文件(该方法内部会执行 FFmpeg 命令并验证)
|
|
|
- String thumbnailFilePath = generateThumbnailFilePath(subFileName, file.getOriginalFilename());
|
|
|
+ /*String thumbnailFilePath = generateThumbnailFilePath(subFileName, file.getOriginalFilename());
|
|
|
String substring = thumbnailFilePath.substring(thumbnailFilePath.lastIndexOf("\\upload"));
|
|
|
-
|
|
|
substring = "/profile" + substring;
|
|
|
log.info("生成视频的封面图片文件路径:{}", substring);
|
|
|
- substring = substring.replace("\\", "/");
|
|
|
+ substring = substring.replace("\\", "/");*/
|
|
|
|
|
|
- // 构建文件访问的完整 URL
|
|
|
- //String url = serverConfig.getUrl() + fileName;
|
|
|
ajax.put("url", fileName);
|
|
|
ajax.put("fileName", fileName);
|
|
|
ajax.put("newFileName", FileUtils.getName(fileName));
|
|
|
ajax.put("originalFilename", file.getOriginalFilename());
|
|
|
// 封面图URL路径(针对视频文件)
|
|
|
- ajax.put("coverUrl", substring);
|
|
|
+ //ajax.put("coverUrl", substring);
|
|
|
|
|
|
// 保存文件记录到数据库
|
|
|
TbFile tbFile = new TbFile();
|
|
|
tbFile.setMd5(md5);
|
|
|
tbFile.setFileName(file.getOriginalFilename());
|
|
|
tbFile.setFileUrl(fileName);
|
|
|
- tbFile.setCoverUrl(substring);
|
|
|
+ //tbFile.setCoverUrl(substring);
|
|
|
this.save(tbFile);
|
|
|
return ajax;
|
|
|
} catch (Exception e) {
|
|
|
- // 上传失败,返回错误信息
|
|
|
+ e.printStackTrace();
|
|
|
return AjaxResult.error(e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
@@ -245,19 +243,20 @@ public class TbFileServiceImpl extends ServiceImpl<TbFileMapper, TbFile> impleme
|
|
|
String thumbnailPathStr = thumbnailPath.toString();
|
|
|
log.info("开始生成封面图片,视频文件的路径: {}, 封面图片的路径: {}", videoPath, thumbnailPathStr);
|
|
|
|
|
|
- // 3. 执行 FFmpeg 命令生成封面
|
|
|
+ // 3. 执行 FFmpeg 命令生成封面图片
|
|
|
try {
|
|
|
- executeFfmpegCommand(videoPath, thumbnailPathStr);
|
|
|
- log.info("FFmpeg 命令执行成功");
|
|
|
+ //添加固定前缀(linux环境中需要添加,windows环境中不需要添加)
|
|
|
+ String prefix = "/usr/local/java";
|
|
|
+ executeFfmpegCommand(prefix+videoPath, prefix+thumbnailPathStr);
|
|
|
+ log.info("FFmpeg命令执行成功");
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- Thread.currentThread().interrupt();
|
|
|
- throw new VideoThumbnailService.VideoProcessException("封面生成过程被中断", e);
|
|
|
+ throw new VideoThumbnailService.VideoProcessException("视频封面文件生成过程被中断", e);
|
|
|
}
|
|
|
|
|
|
// 4. 验证生成的封面文件
|
|
|
validateThumbnailFile(thumbnailPathStr);
|
|
|
- log.info("封面图片生成成功: {}", thumbnailPathStr);
|
|
|
+ log.info("视频封面图片生成成功: {}", thumbnailPathStr);
|
|
|
return thumbnailPathStr;
|
|
|
}
|
|
|
|
|
|
@@ -283,6 +282,7 @@ public class TbFileServiceImpl extends ServiceImpl<TbFileMapper, TbFile> impleme
|
|
|
* @param thumbnailPath 封面图片保存路径
|
|
|
*/
|
|
|
private void executeFfmpegCommand(String videoPath, String thumbnailPath) throws IOException, InterruptedException, VideoThumbnailService.VideoProcessException {
|
|
|
+ log.info("开始执行FFmpeg命令,视频文件路径: {}, 封面图片保存路径: {}", videoPath, thumbnailPath);
|
|
|
// 构建 FFmpeg 命令
|
|
|
// -ss: 截取时间点
|
|
|
// -i: 输入文件
|
|
|
@@ -305,6 +305,9 @@ public class TbFileServiceImpl extends ServiceImpl<TbFileMapper, TbFile> impleme
|
|
|
|
|
|
// 执行命令
|
|
|
ProcessBuilder processBuilder = new ProcessBuilder(command);
|
|
|
+ Map<String, String> env = processBuilder.environment();
|
|
|
+ env.put("LD_LIBRARY_PATH", "/usr/local/ffmpeg-8.0/lib");
|
|
|
+ env.put("PATH", env.get("PATH") + ":/usr/local/ffmpeg-8.0/bin");
|
|
|
processBuilder.redirectErrorStream(true);
|
|
|
Process process = processBuilder.start();
|
|
|
|
|
|
@@ -327,7 +330,7 @@ public class TbFileServiceImpl extends ServiceImpl<TbFileMapper, TbFile> impleme
|
|
|
log.error("FFmpeg 执行失败,输出: {}", output);
|
|
|
throw new VideoThumbnailService.VideoProcessException("FFmpeg 执行失败,退出码: " + exitCode);
|
|
|
}
|
|
|
- log.debug("FFmpeg 输出: {}", output);
|
|
|
+ log.info("FFmpeg 输出: {}", output);
|
|
|
}
|
|
|
|
|
|
|