Transcoding-Job转码任务
更新时间:2022-09-22
Transcoding Job(任务)是音视频转码中最基本的执行单元,每个任务将一个原始的音视频资源转码成目标规格的音视频资源。因此,任务和转码的目标是一一对应的,也就是说如果用户需要将一个原始多媒体文件转换成三种目标规格,比如从AVI格式转码成FLV/MP4/HLS格式,那么用户将会需要创建三个任务。
创建Transcoding Job
用户在创建转码任务时,需要为转码任务指定所属的Pipeline、所需应用的Preset以及原始音视频资源的BOS Key以及目标音视频资源BOS Key。
如下代码创建一个Job, 并获取新创建的jobID:
Java
1public void createJob(MediaClient client, String pipelineName,
2 String sourceKey, String targetKey, String presetName) {
3 CreateTranscodingJobResponse job = client.createTranscodingJob(pipelineName, sourceKey, targetKey, presetName);
4 System.out.println("jobId:" + job.getJobId());
5}
如下代码创建一个支持视频合并、去水印、加水印(Job上而不是Preset上指定watermarkId)的Job, 并获取新创建的jobID:
Java
1public void createJob(MediaClient client, String pipelineName,
2 List<SourceClip> clips, String targetKey, String presetName, String watermarkId, Area delogoArea) {
3 // Area delogoArea = new Area().withX(10).withY(200).withWidth(100).withHeight(150);
4 String jobId = mediaClient.createTranscodingJob(pipelineName, clips, targetKey, presetName,
5 watermarkId, delogoArea).getJobId();
6}
如下代码创建一个支持视频合并、去水印、加水印、去黑边、插入多样叠加效果(Insert)的Job, 并获取新创建的jobID:
Java
1public void createJob(MediaClient client, String pipelineName,
2 List<SourceClip> clips, String targetKey, String presetName, String watermarkId, Area delogoArea,
3 Area crop, List<Insert> inserts) {
4 // Layout layout = new Layout().withHorizontalAlignment("right").withHorizontalOffsetInPixel(10)
5 // .withVerticalAlignment("top").withVerticalOffsetInPixel(100);
6 // Timeline timeline = new Timeline().withStartTimeInMillisecond(4500).withDurationInMillisecond(3000);
7 // Insert insert = new Insert().withBucket("testbucket").withKey("logo.png").withType("image")
8 // .withLayout(layout).withTimeline(timeline);
9 String jobId = mediaClient.createTranscodingJob(pipelineName, clips, targetKey, presetName,
10 watermarkId, delogoArea, crop, inserts).getJobId();
11}
说明:
- warteramrkId、delogo、crop、inserts等可设置为null,表示不使用功能。
- 如果多个视频不转码只需要合并时,Preset中 transmux 设置为true即可实现。
- 目前仅支持普通队列合并多个视频,加速队列暂不支持。
列出指定Pipeline的所有Transcoding Job
如下代码通过指定pipelineName查询该Pipeline下的所有Job:
Java
1public void listJobs(MediaClient client, String pipelineName) {
2
3 // 获取指定Pipeline下的所有Job信息
4 ListTranscodingJobsResponse listTranscodingJobs = client.listTranscodingJobs(pipelineName);
5 List<Job> jobs = listTranscodingJobs.getJobs();
6 for (Job job : jobs) {
7 System.out.println("jobId: " + job.getJobId());
8 }
9}
listTranscodingJobs方法返回ListTranscodingJobsResponse对象,ListTranscodingJobsResponse对象包含了此次listTranscodingJobs请求的返回结果。用户可以通过ListTranscodingJobsResponse中的getJobs方法获取所有Job的描述信息。
查询指定的Transcoding Job信息
用户可以通过如下代码通过jobId读取某个Job:
Java
1public void getJob(MediaClient client, String jobId) {
2 GetTranscodingJobResponse resp = client.getTranscodingJob(jobId);
3 System.out.println("pipelineName: " + resp.getPipelineName());
4 System.out.println("sourceKey: " + resp.getSource().getSourceKey());
5 System.out.println("targetKey: " + resp.getTarget().getTargetKey());
6 System.out.println("jobStatus: " + resp.getJobStatus());
7 System.out.println("startTime: " + resp.getStartTime());
8 System.out.println("endTime: " + resp.getEndTime());
9}