package com.tanpu.feo.feojob.utils; import com.google.common.collect.Maps; import com.qcloud.vod.VodUploadClient; import com.qcloud.vod.model.VodUploadRequest; import com.qcloud.vod.model.VodUploadResponse; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.vod.v20180717.VodClient; import com.tencentcloudapi.vod.v20180717.models.*; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import java.util.Map; /** * 腾讯点播 */ @Configuration public class TxVodUtil { /** * 腾讯云的SecretId */ private static String secretId; /** * 腾讯云的SecretKey */ private static String secretKey; /** * 腾讯云地区 */ private static String region; private static String procedure; private static Long subAppId; private static Long classId; private static VodUploadClient vodUploadClient; private static VodClient vodClient; @Value("${tencent.cloud.secretId}") public void setSecretId(String secretId) { TxVodUtil.secretId = secretId; } @Value("${tencent.cloud.secretKey}") public void setSecretKey(String secretKey) { TxVodUtil.secretKey = secretKey; } @Value("${tencent.cloud.region}") public void setRegion(String region) { TxVodUtil.region = region; } @Value("${tencent.cloud.vod.procedure}") public void setProcedure(String procedure) { TxVodUtil.procedure = procedure; } @Value("${tencent.cloud.vod.subAppId}") public void setSubAppId(Long subAppId) { TxVodUtil.subAppId = subAppId; } @Value("${tencent.cloud.vod.classId}") public void setClassId(Long classId) { TxVodUtil.classId = classId; } public static VodUploadClient getVodUploadClient() { if (vodUploadClient == null) { vodUploadClient = new VodUploadClient(secretId, secretKey); } return vodUploadClient; } public static VodClient getVodClient() { Credential credential = new Credential(secretId, secretKey); if (vodClient == null) { vodClient = new VodClient(credential, region); } return vodClient; } /** * 上传点播视频 * * @param filePath * @return */ public static VodUploadResponse upload(String filePath) { VodUploadRequest request = new VodUploadRequest(); request.setMediaFilePath(filePath); request.setSubAppId(subAppId); request.setClassId(classId); request.setProcedure(procedure); try { VodUploadResponse vodUploadResponse = getVodUploadClient().upload(region, request); if (vodUploadResponse != null && StringUtils.isNotBlank(vodUploadResponse.getFileId())) { return vodUploadResponse; } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 文件转码 * * @param fileId * @return */ public static String processTrans(String fileId, Long templateId) { ProcessMediaRequest processMediaRequest = new ProcessMediaRequest(); processMediaRequest.setFileId(fileId); MediaProcessTaskInput taskInput = new MediaProcessTaskInput(); TranscodeTaskInput[] transcodeTaskInputs = new TranscodeTaskInput[1]; TranscodeTaskInput i = new TranscodeTaskInput(); i.setDefinition(templateId); transcodeTaskInputs[0] = i; taskInput.setTranscodeTaskSet(transcodeTaskInputs); processMediaRequest.setMediaProcessTask(taskInput); try { ProcessMediaResponse res = getVodClient().ProcessMedia(processMediaRequest); if (res != null && StringUtils.isNotBlank(res.getTaskId())) { return res.getTaskId(); } } catch (Exception e) { e.printStackTrace(); } return ""; } /** * 获取点播任务详情 * * @param taskId * @return */ public static DescribeTaskDetailResponse getTaskDetail(String taskId) { DescribeTaskDetailRequest taskReq = new DescribeTaskDetailRequest(); taskReq.setTaskId(taskId); taskReq.setSubAppId(subAppId); try { return getVodClient().DescribeTaskDetail(taskReq); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 获取转码候url * * @param fileId * @return */ public static Map<String, String> getTransUrlByFileId(String fileId) { DescribeTasksRequest taskReq = new DescribeTasksRequest(); taskReq.setFileId(fileId); taskReq.setStatus("FINISH"); taskReq.setSubAppId(subAppId); try { DescribeTasksResponse tasksRes = getVodClient().DescribeTasks(taskReq); if (tasksRes != null && tasksRes.getTaskSet() != null && tasksRes.getTaskSet().length > 0) { String taskId = tasksRes.getTaskSet()[0].getTaskId(); // 获取任务详情 DescribeTaskDetailResponse taskRes = getTaskDetail(taskId); if (taskRes != null && taskRes.getStatus().equals("FINISH") && taskRes.getProcedureTask() != null && taskRes.getProcedureTask().getStatus().equals("FINISH")) { Map<String, String> result = Maps.newHashMap(); for (MediaProcessTaskResult mediaProcessTaskResult : taskRes.getProcedureTask().getMediaProcessResultSet()) { if (mediaProcessTaskResult.getType().equals("Transcode")) { // 转码文件地址 result.put("videoUrl", mediaProcessTaskResult.getTranscodeTask().getOutput().getUrl()); } else if (mediaProcessTaskResult.getType().equals("CoverBySnapshot")) { // 封面 result.put("coverUrl", mediaProcessTaskResult.getCoverBySnapshotTask().getOutput().getCoverUrl().replace("http://", "https://")); } } return result; } } } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { String txCloudSecretId = "AKIDTjjV2IhK4ZKBm8z5g14vPedNSJuFnTIq"; /** * 腾讯云访问secretkey */ String txCloudSecretKey = "PaVBZfeQwDVXKr7TZOzM6c9VZNwGJGyA"; VodUploadClient client = new VodUploadClient(txCloudSecretId, txCloudSecretKey); VodUploadRequest request = new VodUploadRequest(); request.setMediaFilePath("C://Users//John.Hu//Downloads//v.f100010.mp4"); request.setProcedure("STD-H264-MP4-1080P"); request.setSubAppId(1500000662L); request.setClassId(782943L); try { // VodUploadResponse response = client.upload("ap-shanghai", request); // System.out.println("Upload MediaUrl = {}" + response.getMediaUrl()); // System.out.println("Upload FileId = {}" + response.getFileId()); // System.out.println("Upload CoverUrl = {}" + response.getCoverUrl()); // System.out.println("Upload RequestId = {}" + response.getRequestId()); Credential credential = new Credential(txCloudSecretId, txCloudSecretKey); VodClient vodClient = new VodClient(credential, "ap-shanghai"); // ProcessMediaRequest processMediaRequest = new ProcessMediaRequest(); // processMediaRequest.setFileId("5285890811956391348"); // MediaProcessTaskInput taskInput = new MediaProcessTaskInput(); // TranscodeTaskInput[] transcodeTaskInputs = new TranscodeTaskInput[1]; // TranscodeTaskInput i = new TranscodeTaskInput(); // i.setDefinition(100010L); // transcodeTaskInputs[0]=i; // taskInput.setTranscodeTaskSet(transcodeTaskInputs); // processMediaRequest.setMediaProcessTask(taskInput); // ProcessMediaResponse res = vodClient.ProcessMedia(processMediaRequest); // System.out.println("任务返回:"+res.getTaskId()); DescribeTaskDetailRequest taskReq = new DescribeTaskDetailRequest(); taskReq.setTaskId("1500000662-procedurev2-83c0147bbf2f70131c214cbb3e8bdc1dt0"); taskReq.setSubAppId(1500000662L); DescribeTaskDetailResponse detailResponse = vodClient.DescribeTaskDetail(taskReq); System.out.println("任务返回:" + detailResponse.toString()); // DescribeTasksRequest r = new DescribeTasksRequest(); // r.setFileId("5285890814434477117"); // r.setSubAppId(1500000662L); // r.setStatus("FINISH"); // DescribeTasksResponse dr = vodClient.DescribeTasks(r); // System.out.println("大小:" + dr.getTaskSet().length); // TaskSimpleInfo[] taskSimpleInfos = dr.getTaskSet(); } catch (Exception e) { e.printStackTrace(); } } }