diff --git a/dsAiSupport/src/main/java/com/dsideal/aiSupport/Util/JiMeng/JmErrorCode.java b/dsAiSupport/src/main/java/com/dsideal/aiSupport/Util/JiMeng/JmErrorCode.java new file mode 100644 index 00000000..b5676a6d --- /dev/null +++ b/dsAiSupport/src/main/java/com/dsideal/aiSupport/Util/JiMeng/JmErrorCode.java @@ -0,0 +1,56 @@ +package com.dsideal.aiSupport.Util.JiMeng; + +import lombok.Getter; + +/** + * 火山引擎API错误码枚举 + */ +@Getter +public enum JmErrorCode { + + SUCCESS(10000, "请求成功"), + TEXT_RISK_NOT_PASS(50412, "输入文本前审核未通过"), + POST_TEXT_RISK_NOT_PASS(50413, "输入文本NER、IP、Blocklist等拦截"), + INTERNAL_ERROR(50500, "输出视频审核未通过"); + + private final int code; + private final String message; + + JmErrorCode(int code, String message) { + this.code = code; + this.message = message; + } + + /** + * 根据错误码获取枚举实例 + * @param code 错误码 + * @return 对应的枚举实例,如果不存在则返回null + */ + public static JmErrorCode getByCode(int code) { + for (JmErrorCode errorCode : values()) { + if (errorCode.getCode() == code) { + return errorCode; + } + } + return null; + } + + /** + * 获取错误消息 + * @param code 错误码 + * @return 错误消息,如果错误码不存在则返回"未知错误" + */ + public static String getMessageByCode(int code) { + JmErrorCode errorCode = getByCode(code); + return errorCode != null ? errorCode.getMessage() : "未知错误"; + } + + /** + * 检查是否成功 + * @param code 错误码 + * @return 是否成功 + */ + public static boolean isSuccess(int code) { + return code == SUCCESS.getCode(); + } +} \ No newline at end of file diff --git a/dsAiSupport/src/main/java/com/dsideal/aiSupport/Util/JiMeng/JmText2Video.java b/dsAiSupport/src/main/java/com/dsideal/aiSupport/Util/JiMeng/JmText2Video.java index 3c1bdffc..1214c6f9 100644 --- a/dsAiSupport/src/main/java/com/dsideal/aiSupport/Util/JiMeng/JmText2Video.java +++ b/dsAiSupport/src/main/java/com/dsideal/aiSupport/Util/JiMeng/JmText2Video.java @@ -67,37 +67,79 @@ public class JmText2Video extends JmCommon { } } + /** + * 查询任务结果 + * + * @param taskId 任务ID + * @return 任务结果 + */ + public static JSONObject queryTaskResult(String taskId) { + return queryTaskResult(taskId); + } + public static void main(String[] args) throws Exception { String prompt = "蓝色毛绒玩具在超市里拖地,结果拖把洒出好多五颜六色的粉末,接着把粉末洒向镜头前,镜头随之穿过粉末"; //保存的文件名称 String mp4FileName = "1.mp4"; + // 获取项目根目录路径 + String projectRoot = System.getProperty("user.dir"); + // 拼接相对路径 + String basePath = projectRoot + "/src/main/java/com/dsideal/aiSupport/Util/JiMeng/Example/"; + + // 确保目录存在 + java.io.File dir = new java.io.File(basePath); + if (!dir.exists()) { + dir.mkdirs(); + log.info("创建目录: {}", basePath); + } JSONObject jo = JmText2Video.generateVideo(prompt); log.info("结果:{}", jo); + + int code = jo.getInteger("code"); + if (!JmErrorCode.isSuccess(code)) { + log.error("生成视频失败: 错误码={}, 错误信息={}", code, JmErrorCode.getMessageByCode(code)); + return; + } + String taskId = jo.getJSONObject("data").getString("task_id"); + log.info("任务ID: {}", taskId); + //检查任务是不是已经结束 - while (true) { + int retryCount = 0; + int maxRetries = 30; // 最大重试次数 + int retryInterval = 3000; // 重试间隔(毫秒) + + while (retryCount < maxRetries) { JSONObject result = queryTaskResult(taskId); log.info("查询结果:{}", result); - if (result.getInteger("code") != 10000) { - log.error("查询失败,错误代码=" + result.getInteger("code")); + + code = result.getInteger("code"); + if (!JmErrorCode.isSuccess(code)) { + log.error("查询失败: 错误码={}, 错误信息={}", code, JmErrorCode.getMessageByCode(code)); break; } + JSONObject data = result.getJSONObject("data"); - if (!StrKit.isBlank(data.getString("video_url"))) { + if (data != null && !StrKit.isBlank(data.getString("video_url"))) { String video_url = data.getString("video_url"); log.info("视频地址:{}", video_url); //下载mp4 String saveVideoPath = basePath + mp4FileName; log.info("开始下载视频..."); - log.info("basePath: {}", basePath); downloadFile(video_url, saveVideoPath); log.info("视频已下载到: {}", saveVideoPath); break; } else { - Thread.sleep(3000); + log.info("任务处理中,等待{}毫秒后重试...", retryInterval); + Thread.sleep(retryInterval); + retryCount++; } } + + if (retryCount >= maxRetries) { + log.error("任务查询超时,已达到最大重试次数: {}", maxRetries); + } } }