TxVodUtil.java 9.07 KB
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();
        }
    }
}