所有文档

          音视频处理 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模板