| | |
| | | package cn.iocoder.yudao.module.digitalcourse.service.coursemedia; |
| | | |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.core.util.RandomUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.http.HttpRequest; |
| | |
| | | import cn.iocoder.yudao.module.digitalcourse.service.voices.VoicesServiceImpl; |
| | | import cn.iocoder.yudao.module.digitalcourse.util.SrtToVttUtil; |
| | | import cn.iocoder.yudao.module.infra.api.config.ConfigApi; |
| | | import cn.iocoder.yudao.module.infra.api.file.FileApi; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.StandardCopyOption; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | |
| | | |
| | | @Resource |
| | | private VoicesServiceImpl serviceImpl; |
| | | @Resource |
| | | private FileApi fileApi; |
| | | |
| | | /** |
| | | * 远程合并视频 |
| | |
| | | result = "D:/heygem_data/face2face/temp" + result; |
| | | videoUrls.add(result); |
| | | System.out.println("驱动视频名"+result); |
| | | // 如果成功,更新状态为1(成功) |
| | | courseMediaDO.setStatus(1); |
| | | courseMediaMapper.updateById(courseMediaDO); |
| | | } catch (Exception e) { |
| | | retryCount++; |
| | | if (retryCount >= maxRetries) { |
| | |
| | | String newFileName = updateReqVO.getName().replaceAll("[\\s\\p{Punct}]", ""); |
| | | ProcessBuilder builder = new ProcessBuilder( |
| | | "ffmpeg", "-f", "concat", "-safe","0", "-i",fileListPath , "-c", "copy", "D:/heygem_data/face2face/temp/"+"111111.mp4" |
| | | // q |
| | | ); |
| | | builder.redirectErrorStream(true); |
| | | Process process = null; |
| | |
| | | } catch (IOException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | |
| | | |
| | | // "D:/heygem_data/face2face/temp/"+"111111.mp4"将这个文件转成byte[] |
| | | byte[] bytes = FileUtil.readBytes(FileUtil.file("D:/heygem_data/face2face/temp/"+"111111.mp4")); |
| | | String file = fileApi.createFile(bytes); |
| | | // 如果成功,更新状态为1(成功) |
| | | courseMediaDO.setStatus(1); |
| | | courseMediaDO.setPreviewUrl(file); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Date date = new Date(); |
| | | courseMediaDO.setFinishTime(sdf.format(date)); |
| | | courseMediaDO.setProgress(100.0f); |
| | | courseMediaMapper.updateById(courseMediaDO); |
| | | } |
| | | |
| | | // 四舍五入方法 |
| | |
| | | if (status == 2) { |
| | | result = data.getString("result"); |
| | | System.out.println("任务已完成,结果文件路径: " + result); |
| | | } else if (status == 3){ |
| | | throw new RuntimeException("任务失败,请联系管理员"); |
| | | } else { |
| | | System.out.println("任务尚未完成,当前进度: " + data.getIntValue("progress") + "%"); |
| | | } |
| | | |
| | | // 等待一段时间再进行下一次轮询(避免频繁请求) |
| | | // 每隔 5 秒轮询一次 |
| | | Thread.sleep(5000); |
| | |
| | | interruptedException.printStackTrace(); |
| | | } |
| | | } |
| | | // 当 status 不等于 2 时继续循环 |
| | | } while (status != 2); |
| | | // 当 status 等于 时继续循环 |
| | | } while (status == 1 ); |
| | | return result; |
| | | } |
| | | |