Transcoding-Job转码任务
更新时间:2022-09-22
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) {
CreateTranscodingJobResponse job = client.createTranscodingJob(pipelineName, sourceKey, targetKey, presetName);
System.out.println("jobId:" + job.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信息
ListTranscodingJobsResponse listTranscodingJobs = client.listTranscodingJobs(pipelineName);
List<Job> jobs = listTranscodingJobs.getJobs();
for (Job job : jobs) {
System.out.println("jobId: " + job.getJobId());
}
}
listTranscodingJobs方法返回ListTranscodingJobsResponse对象,ListTranscodingJobsResponse对象包含了此次listTranscodingJobs请求的返回结果。用户可以通过ListTranscodingJobsResponse中的getJobs方法获取所有Job的描述信息。
查询指定的Transcoding Job信息
用户可以通过如下代码通过jobId读取某个Job:
public void getJob(MediaClient client, String jobId) {
GetTranscodingJobResponse resp = client.getTranscodingJob(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());
}