音视频处理MCT

    Transcoding-Job转码任务

    Transcoding Job(任务)是音视频转码中最基本的执行单元,每个任务将一个原始的音视频资源转码成目标规格的音视频资源。因此,任务和转码的目标是一一对应的,也就是说如果用户需要将一个原始多媒体文件转换成三种目标规格,比如从AVI格式转码成FLV/MP4/HLS格式,那么用户将会需要创建三个任务。

    创建Transcoding Job

    用户在创建转码任务时,需要为转码任务指定所属的Pipeline、所需应用的Preset以及原始音视频资源的BOS Key以及目标音视频资源BOS Key。

    如下代码创建一个Job, 并获取新创建的jobID:

    public void createJob(MediaClient client, String pipelineName,
              String sourceKey, String targetKey, String presetName) {
        String jobId = client.createJob(pipelineName, sourceKey, targetKey, presetName).getJobId();
    }

    如下代码创建一个支持视频合并、去水印、加水印(Job上而不是Preset上指定watermarkId)的Job, 并获取新创建的jobID:

    public void createJob(MediaClient client, String pipelineName,
              List<SourceClip> clips, String targetKey, String presetName, String watermarkId, Area delogoArea) {
        // Area delogoArea = new Area().withX(10).withY(200).withWidth(100).withHeight(150);
        String jobId = mediaClient.createTranscodingJob(pipelineName, clips, targetKey, presetName, 
                           watermarkId, delogoArea).getJobId();
    }

    如下代码创建一个支持视频合并、去水印、加水印、去黑边、插入多样叠加效果(Insert)的Job, 并获取新创建的jobID:

    public void createJob(MediaClient client, String pipelineName,
              List<SourceClip> clips, String targetKey, String presetName, String watermarkId, Area delogoArea, 
              Area crop, List<Insert> inserts) {
        // Layout layout = new Layout().withHorizontalAlignment("right").withHorizontalOffsetInPixel(10)
        //                              .withVerticalAlignment("top").withVerticalOffsetInPixel(100);
        // Timeline timeline = new Timeline().withStartTimeInMillisecond(4500).withDurationInMillisecond(3000);
        // Insert insert = new Insert().withBucket("testbucket").withKey("logo.png").withType("image")
        //                              .withLayout(layout).withTimeline(timeline);
        String jobId = mediaClient.createTranscodingJob(pipelineName, clips, targetKey, presetName, 
                           watermarkId, delogoArea, crop, inserts).getJobId();
    }

    说明:

    • warteramrkId、delogo、crop、inserts等可设置为null,表示不使用功能。
    • 如果多个视频不转码只需要合并时,Preset中 transmux 设置为true即可实现。

    列出指定Pipeline的所有Transcoding Job

    如下代码通过指定pipelineName查询该Pipeline下的所有Job:

    public void listJobs(MediaClient client, String pipelineName) {
    
        // 获取指定Pipeline下的所有Job信息
        List<Job> jobs = client.listJobs(pipelineName).getJobs();
        for (Job job : jobs) {
            System.out.println("jobId: " + job.getJobId());
        }
    }

    listJobs方法返回ListJobsResponse对象,ListJobsResponse对象包含了此次listJob请求的返回结果。用户可以通过ListJobsResponse中的getJobs方法获取所有Job的描述信息。

    查询指定的Transcoding Job信息

    用户可以通过如下代码通过jobId读取某个Job:

    public void getJob(MediaClient client, String jobId) {
        GetJobResponse resp = client.getJob(jobId);
        System.out.println("pipelineName: " + resp.getPipelineName());
        System.out.println("sourceKey: " + resp.getSource().getSourceKey());
        System.out.println("targetKey: " + resp.getTarget().getTargetKey());
        System.out.println("jobStatus: " + resp.getJobStatus());
        System.out.println("startTime: " + resp.getStartTime());
        System.out.println("endTime: " + resp.getEndTime());
    }
    上一篇
    Pipeline队列
    下一篇
    Preset模板