package com.iformall.sm; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; import com.iformall.douyin.pay.orderQuery.OrderQueryResult; import com.iformall.douyin.pay.orderQuery.QueryMerchantResult; import com.iformall.douyin.pay.orderQuery.QueryRefundResult; import com.iformall.douyin.pay.orderQuery.QuerySettleResult; import com.iformall.douyin.pay.preOrder.*; import com.iformall.enums.EnumMouldPatchType; import com.iformall.enums.EnumPayStatus; import com.iformall.enums.EnumVideoType; import com.iformall.exception.MallinkException; import com.iformall.utils.Base64Util; import com.iformall.utils.HttpUtil; import com.iformall.utils.sign.SignUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import sun.net.www.content.audio.wav; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.*; @Slf4j @Component public class AiVideoHelper { public static String oral_broadcasting; @Value("${suimang.oral_broadcasting}") public void setOralBroadcasting(String oral_broadcasting){ this.oral_broadcasting = oral_broadcasting; } public static String photo_speak; @Value("${suimang.photo_speak}") public void setPhotoSpeak(String photo_speak){ this.photo_speak = photo_speak; } public static String photo_speak_hy; @Value("${suimang.photo_speak_hy}") public void setPhotoSpeakHy(String photo_speak_hy){ this.photo_speak_hy = photo_speak_hy; } public static String callbackUrl; @Value("${suimang.callbackUrl}") public void setCallbackUrl(String callbackUrl){ this.callbackUrl = callbackUrl; } public static boolean localDeploy;//是否是私有化部署 @Value("${suimang.local_deploy}") public void setLocalDeploy(boolean localDeploy) { this.localDeploy = localDeploy; } public static String token;//跟遂芒唯一验证 @Value("${suimang.token}") public void setToken(String token) { this.token = token; } public static String doPost(String url, String params) { return HttpUtil.doAiVideoPost(url,params); } public static AiVideoResult createVideo(AiVideoParam videoParam) { // videoParam.setTask_id(taskId); if (StringUtils.isNotBlank(videoParam.getCallback_url())) { videoParam.setCallback_url(videoParam.getCallback_url()); } else { videoParam.setCallback_url(callbackUrl + "/callback/oral/broadcasting"); } //videoParam.setToken(token); log.info("生成视频start request:" + videoParam.neglectImgString()); String response = doPost(oral_broadcasting+"/gen_dh_video", JSONObject.toJSONString(videoParam)); log.info("生成视频end response:"+response); AiVideoResult result = new AiVideoResult(); if(StringUtils.isBlank(response)){ result.setSuccess(false); result.setMsg("请求生成视频异常,请稍后重试"); return result; } JSONObject jsonObject = JSON.parseObject(response); JSONObject status = jsonObject.getJSONObject("status"); Integer code = status.getInteger("code"); if(code == null){ result.setSuccess(false); result.setMsg("请求生成视频异常,请稍后重试"); return result; } if(code.intValue() == 1000){ JSONObject data = jsonObject.getJSONObject("data"); JSONObject video = data.getJSONObject("video"); result.setSuccess(true); result.setMsg("success"); result.setDuration(video.getFloatValue("duration")); result.setUrl(video.getString("url")); }else{ result.setSuccess(false); result.setMsg(status.getString("msg")); } return result; // Integer code = jsonObject.getInteger("err_no"); // if (null != code && code.intValue() == 0 ) { // CreatePreOrderResult result = new CreatePreOrderResult(); // result.setSuccess(true); // result.setOutOrderNo(preOrder.getOutOrderNo()); // JSONObject data = jsonObject.getJSONObject("data"); // if (null != data ) { // result.setOrderId(data.getString("order_id")); // result.setToken(data.getString("order_token")); // }else { // log.error("createPreOrder reponse empity. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response); // result.setSuccess(false); // result.setMsg("createPreOrder reponse empity."+response); // } // return result; // }else { // log.error("createPreOrder reponse error. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response); // CreatePreOrderResult result = new CreatePreOrderResult(); // result.setSuccess(false); // result.setMsg("createPreOrder reponse error."+response); // return result; // } } public static AiCheckPhotoResult checkPhoto(AiCheckPhotoParam param) { // String response = doPost("http://111.198.0.15:22299" + "/image_qualit", JSONObject.toJSONString(param)); //param.setToken(token); String response = doPost(photo_speak + "/image_qualit", JSONObject.toJSONString(param)); log.info("图片质量审核 end response:" + response); AiCheckPhotoResult result = new AiCheckPhotoResult(); if (StringUtils.isBlank(response)) { result.setSuccess(false); result.setMsg("(MetaService)图片质量审核失败,请稍后重试"); return result; } JSONObject jsonObject = JSON.parseObject(response); JSONObject status = jsonObject.getJSONObject("status"); Integer code = status.getInteger("code"); String msg = status.getString("msg"); if (code == null) { result.setSuccess(false); result.setMsg("(MetaService)请求图片质量检查失败,请稍后重试"); return result; } if (code.intValue() == 2000) { result.setCode(code); result.setSuccess(true); String resultMsg = result.getMsgInfo(code, msg); result.setMsg(resultMsg); } else { result.setCode(code); result.setSuccess(false); String resultMsg = result.getMsgInfo(code, msg); result.setMsg(resultMsg); } return result; } public static AiPreviewResult voicePreview(AiPreviewParam param) { //param.setToken(token); log.info("TTS音色预览 start request:" + JSONObject.toJSONString(param)); String response = doPost(photo_speak + "/tts_wav", JSONObject.toJSONString(param)); log.info("TTS音色预览 end response:" + response); AiPreviewResult result = new AiPreviewResult(); if (StringUtils.isBlank(response)) { result.setSuccess(false); result.setMsg("(MetaService) no result"); return result; } JSONObject jsonObject = JSON.parseObject(response); JSONObject status = jsonObject.getJSONObject("status"); JSONObject data = jsonObject.getJSONObject("data"); String strURL = null; String time = null; if (data != null){ strURL = data.getString("url"); time = data.getString("time"); } Integer code = status.getInteger("code"); String msg = status.getString("msg"); if (code == null) { result.setSuccess(false); result.setMsg("(MetaService) error,"+msg); return result; } if (code.intValue() == 3000) { result.setCode(200); result.setSuccess(true); result.setUrl(photo_speak + strURL); result.setTime(Double.valueOf(time)); result.setMsg("(MetaService) error,"+msg); } else { result.setCode(code); result.setSuccess(false); result.setMsg("(MetaService) error,"+msg); } return result; } public static AiPhotoSpeakResult createPhotoSpeakVideo(AiPhotoSpeakParam videoParam,Long taskId) { videoParam.setTask_id(taskId); videoParam.setCallback_url(callbackUrl + "/callback/photo/speak"); log.info("生成视频start request:" + videoParam.neglectImgString()); String response = doPost(photo_speak + "/img_talking", JSONObject.toJSONString(videoParam)); log.info("生成视频end response:" + response); AiPhotoSpeakResult result = new AiPhotoSpeakResult(); if (StringUtils.isBlank(response)) { result.setSuccess(false); result.setMsg("(MetaService) not result"); return result; } JSONObject jsonObject = JSON.parseObject(response); JSONObject status = jsonObject.getJSONObject("status"); Integer code = status.getInteger("code"); String msg = status.getString("msg"); if (code == null) { result.setSuccess(false); result.setMsg("(MetaService) error."+msg); return result; } if (code.intValue() == 4000) { JSONObject data = jsonObject.getJSONObject("data"); String videoUrl = data.getString("url"); String saveDir = data.getString("save_dir"); String audioPath = data.getString("audio_path"); result.setSuccess(true); result.setUrl(videoUrl); result.setSaveDir(saveDir); result.setCode(code); result.setAudioPath(audioPath); result.setMsg("(MetaService) error."+msg); } else { result.setSuccess(false); result.setCode(code); result.setMsg("(MetaService) error."+msg); } return result; } public static AiVideoHqResult videoHq(AiVideoHqParam param,Long taskId) { param.setTask_id(taskId); param.setCallback_url(callbackUrl + "/callback/photo/speak"); String response = doPost(photo_speak_hy + "/video_hq", JSONObject.toJSONString(param)); log.info("视频超分 end response:" + response); AiVideoHqResult result = new AiVideoHqResult(); if (StringUtils.isBlank(response)) { result.setSuccess(false); result.setMsg("(MetaService)视频超分失败,请稍后重试"); return result; } JSONObject jsonObject = JSON.parseObject(response); JSONObject status = jsonObject.getJSONObject("status"); JSONObject data = jsonObject.getJSONObject("data"); String strURL = null; if (data != null){ strURL = data.getString("url"); } Integer code = status.getInteger("code"); String msg = status.getString("msg"); if (code == null) { result.setSuccess(false); result.setMsg("(MetaService)视频超分异常,请稍后重试"); return result; } if (code.intValue() == 5000) { result.setCode(200); result.setSuccess(true); result.setUrl(strURL); String resultMsg = result.getMsgInfo(code, msg); result.setMsg(resultMsg); } else { result.setCode(code); result.setSuccess(false); String resultMsg = result.getMsgInfo(code, msg); result.setMsg(resultMsg); } return result; } public static void main(String[] args) { // AiVideoParam videoParam = new AiVideoParam(); // videoParam.setGen_txt("我写了一篇小说,你帮我看看。"); // videoParam.setVideo_template_id("16776650495633934_PgNAW8Sm"); // videoParam.setVoice_id("zh-CN-XiaohanNeural"); // videoParam.setVoice_style("default"); // AiVideoParam.VideoFiles videoFiles = new AiVideoParam.VideoFiles(); // AiVideoParam.BackGround backGround = new AiVideoParam.BackGround(); // backGround.setType("vertical"); // backGround.setImage(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/background/grace/1080.jpg")); // videoFiles.setBack_ground(backGround); // AiVideoParam.Material digitalHuman = new AiVideoParam.Material(); // int[] digitalHumanCoord = new int[]{0,0}; // digitalHuman.setCoord(digitalHumanCoord); // digitalHuman.setLevel(0); // digitalHuman.setRatio(1.0f); // videoFiles.setDigital_human(digitalHuman); // videoParam.setVideo_files(videoFiles); // // AiVideoResult video = AiVideoHelper.createVideo(videoParam); // // AiPhotoSpeakParam param = new AiPhotoSpeakParam(); // param.setGen_txt("道可道,非常道。名可名,非常名。无名天地之始;有名万物之母。故常无欲,以观其妙;常有欲,以观其徼。此两者,同出而异名,同谓之玄。玄之又玄,众妙之门"); // param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personphoto/165640997370212321.png")); // param.setGender("female"); // param.setVoice_id("zh-CN-XiaoqiuNeural"); // param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak"); // param.setTask_id(837169827124269056L); // param.setVoice_style("default"); // param.setUrl("None"); // AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); // AiPhotoSpeakParam param = new AiPhotoSpeakParam(); // param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak"); // param.setTask_id(836805079248850944L); // param.setGen_txt("None"); // param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/capi/2023-06-07/6da595fe12ef405bb6434f31e6bad4ec.png")); // param.setGender("None"); // param.setVoice_id("default"); // param.setVoice_style("default"); // param.setUrl("https://video.metavatar.cc/sv/262b03bd-18929af12fd/262b03bd-18929af12fd.mp3"); // AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); AiCheckPhotoParam param = new AiCheckPhotoParam(); String img = Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personmould/16760216806604820_cSHoijDX_grace_1080.jpg"); param.setImg(img); AiCheckPhotoResult result = AiVideoHelper.checkPhoto(param); System.out.println(result); // // AiPreviewParam param = new AiPreviewParam(); // param.setGen_txt("今天是个好日子"); // param.setVoice_id("ar-DZ-AminaNeural"); // param.setVoice_style("default"); // param.setGender("female"); // AiPreviewResult result = AiVideoHelper.voicePreview(param); // System.out.println(result); // AiVideoHqParam param = new AiVideoHqParam(); // param.setSave_dir("static/tts/2023-07-07/16886958135060428.wav.mp4"); // param.setAudio_path("static/tts/2023-07-07/16886958135060428.wav"); // param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak"); // param.setTask_id(836541377936281600L); // AiVideoHqResult result = AiVideoHelper.videoHq(param); // System.out.println(result); } }