
# MPC的视频截图能力帮助视频网站客户快速构建媒体处理平台
#### 场景说明
视频网站对视频画面截图有着多样化的业务诉求，包括视频封面、拖动预览、审核、海报、剧照等。媒体处理服务支持同步截图、异步截图，也支持指定时间点、固定时间间隔截图，有效帮助视频网站客户快速构建媒体处理平台。例如：拖动预览，视频播放过程中，鼠标悬浮在进度条上，可以根据预览画面，拖到进度到指定的位置。
#### 实现原理
视频网站在构建媒体处理平台时，需要创建一个截图任务管理服务。该服务负责管理视频截图任务，包括创建、查询截图任务等操作。
视频网站截图任务管理服务通过SDK/API调用MPC的视频截图能力，首先MPC视频截图服务从OBS拉取原视频，再按照请求参数要求对原视频进行截图，完成截图后将文件放入OBS指定路径。视频网站的关联业务服务可以从"视频网站截图任务管理服务"获取到截图文件信息，并将截图应用于视频封面、视频播放过程中拖动预览画面、审核等场景中。
表1服务功能 
| 服务名称         | 功能                                            |
|:---|:---|
| 视频网站截图任务管理服务 | 主要负责视频截图任务的管理，包括创建、查询截图任务等操作。                 |
| MPC视频截图服务    | 负责从OBS拉取原视频，按照任务要求对原视频进行截图，完成后将截图文件放入OBS指定路径。 |
| OBS对象存储服务    | 用于客户上传和存储媒体文件。                                |
   
图1实现原理图   
![](https://support.huaweicloud.com/bestpractice-mpc/zh-cn_image_0000001771750333.png)
#### 开发时序图
图2创建截图任务   
![](https://support.huaweicloud.com/bestpractice-mpc/zh-cn_image_0000001772108181.png)
图3取消截图任务   
![](https://support.huaweicloud.com/bestpractice-mpc/zh-cn_image_0000001724578762.png)
图4查询截图任务   
![](https://support.huaweicloud.com/bestpractice-mpc/zh-cn_image_0000001772179025.png)
#### 操作步骤
1. 参考[上传音视频文件](https://support.huaweicloud.com/usermanual-mpc/mpc010002.html)，上传一个视频文件至OBS桶中。
2. 创建截图任务。 
   示例代码如下所示：
   ```
   // 设置截图输入视频地址
       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();
   ```
   
   
3. 查询截图任务。 
   示例代码如下所示：
   ```
   ListThumbnailsTaskRequest request = new ListThumbnailsTaskRequest();
       List<String> listRequestTaskId = new ArrayList<>();
       listRequestTaskId.add(taskId);
       request.withTaskId(listRequestTaskId);
       ListThumbnailsTaskResponse response = initMpcClient().listThumbnailsTask(request);
       logger.info(response.toString());
   ```
   
   
4. 查看运行结果。 
   创建截图任务，返回截图任务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集成示例
视频截图功能的详细说明和示例代码，请参考[创建截图任务](https://codelabs.developer.huaweicloud.com/codelabs/samples/4f113a5c9f8e46289c064a2807f9a2a3)。
