更新时间:2024-01-31 GMT+08:00
MPC的视频截图能力帮助视频网站客户快速构建媒体处理平台
场景说明
视频网站对视频画面截图有着多样化的业务诉求,包括视频封面、拖动预览、审核、海报、剧照等。媒体处理服务支持同步截图、异步截图,也支持指定时间点、固定时间间隔截图,有效帮助视频网站客户快速构建媒体处理平台。例如:拖动预览,视频播放过程中,鼠标悬浮在进度条上,可以根据预览画面,拖到进度到指定的位置。
实现原理
视频网站在构建媒体处理平台时,需要创建一个截图任务管理服务。该服务负责管理视频截图任务,包括创建、查询截图任务等操作。
视频网站截图任务管理服务通过SDK/API调用MPC的视频截图能力,首先MPC视频截图服务从OBS拉取原视频,再按照请求参数要求对原视频进行截图,完成截图后将文件放入OBS指定路径。视频网站的关联业务服务可以从“视频网站截图任务管理服务”获取到截图文件信息,并将截图应用于视频封面、视频播放过程中拖动预览画面、审核等场景中。
服务名称 |
功能 |
---|---|
视频网站截图任务管理服务 |
主要负责视频截图任务的管理,包括创建、查询截图任务等操作。 |
MPC视频截图服务 |
负责从OBS拉取原视频,按照任务要求对原视频进行截图,完成后将截图文件放入OBS指定路径。 |
OBS对象存储服务 |
用于客户上传和存储媒体文件。 |
图1 实现原理图
开发时序图
图2 创建截图任务
图3 取消截图任务
图4 查询截图任务
操作步骤
- 参考上传音视频文件,上传一个视频文件至OBS桶中。
- 创建截图任务。
示例代码如下所示:
// 设置截图输入视频地址 ObsObjInfo input = new ObsObjInfo().withBucket("<example-bucket>").withLocation("<Region ID>").withObject("<example-path/input.mp4>"); ObsObjInfo output = new ObsObjInfo().withBucket("<example-bucket>").withLocation("<Region ID>").withObject("<example-path/output>"); // 创建截图请求 CreateThumbnailsTaskRequest request = new CreateThumbnailsTaskRequest(); CreateThumbReq body = new CreateThumbReq(); List<Integer> listThumbnailParaDots = new ArrayList<>(); listThumbnailParaDots.add(50000); // 设置截图类型,此处理按时间点截图 ThumbnailPara thumbnailParabody = new ThumbnailPara(); // 设置采样类型,指定时间点截图 thumbnailParabody.withType(ThumbnailPara.TypeEnum.fromValue("DOTS")) // 设置截图输出文件名称 .withOutputFilename("photo") // 设置采样截图的时间间隔值 .withTime(10) // 设置采样类型为“TIME”模式的开始时间,和“time”配合使用 .withStartTime(100) // 采样类型为“TIME”模式的持续时间,和“time”、“start_time”配合使用,表示从视频文件的第“start_time”开始,持续时间为“duration”,每间隔“time”生成一张截图,单位:秒。 .withDuration(1) // 指定时间截图的时间点数组 .withDots(listThumbnailParaDots) // 设置截图文件格式 .withFormat(1) // 设置截图的宽 .withWidth(96) // 设置截图的高 .withHeight(96); body.withThumbnailPara(thumbnailParabody); body.withOutput(output); body.withInput(input); request.withBody(body); // 发送截图请求 CreateThumbnailsTaskResponse response = initMpcClient().createThumbnailsTask(request); logger.info(response.toString()); return response.getTaskId();
- 查询截图任务。
示例代码如下所示:
ListThumbnailsTaskRequest request = new ListThumbnailsTaskRequest(); List<String> listRequestTaskId = new ArrayList<>(); listRequestTaskId.add(taskId); request.withTaskId(listRequestTaskId); ListThumbnailsTaskResponse response = initMpcClient().listThumbnailsTask(request); logger.info(response.toString());
- 查看运行结果。
创建截图任务,返回截图任务ID。
{"task_id": "1024"}
查询截图任务的状态和结果。
{ "task_array" : [ { "task_id" : 2528, "status" : "SUCCEEDED", "create_time" : 20201118121333, "end_time" : 20201118121336, "input" : { "bucket" : "example-bucket", "location" : "region01", "object" : "example-input.ts" }, "output" : { "bucket" : "example-bucket", "location" : "region01", "object" : "example-output/example-path" }, "thumbnail_info" : [ { "pic_name" : "9.jpg" }, { "pic_name" : "5.jpg" } ] } ], "is_truncated" : 0, "total" : 1 }
SDK集成示例
视频截图功能的详细说明和示例代码,请参考创建截图任务。