文档首页/ 媒体处理 MPC/ 最佳实践/ MPC的视频截图能力帮助视频网站客户快速构建媒体处理平台
更新时间:2024-01-31 GMT+08:00

MPC的视频截图能力帮助视频网站客户快速构建媒体处理平台

场景说明

视频网站对视频画面截图有着多样化的业务诉求,包括视频封面、拖动预览、审核、海报、剧照等。媒体处理服务支持同步截图、异步截图,也支持指定时间点、固定时间间隔截图,有效帮助视频网站客户快速构建媒体处理平台。例如:拖动预览,视频播放过程中,鼠标悬浮在进度条上,可以根据预览画面,拖到进度到指定的位置。

实现原理

视频网站在构建媒体处理平台时,需要创建一个截图任务管理服务。该服务负责管理视频截图任务,包括创建、查询截图任务等操作。

视频网站截图任务管理服务通过SDK/API调用MPC的视频截图能力,首先MPC视频截图服务从OBS拉取原视频,再按照请求参数要求对原视频进行截图,完成截图后将文件放入OBS指定路径。视频网站的关联业务服务可以从“视频网站截图任务管理服务”获取到截图文件信息,并将截图应用于视频封面、视频播放过程中拖动预览画面、审核等场景中。

表1 服务功能

服务名称

功能

视频网站截图任务管理服务

主要负责视频截图任务的管理,包括创建、查询截图任务等操作。

MPC视频截图服务

负责从OBS拉取原视频,按照任务要求对原视频进行截图,完成后将截图文件放入OBS指定路径。

OBS对象存储服务

用于客户上传和存储媒体文件。

图1 实现原理图

开发时序图

图2 创建截图任务
图3 取消截图任务
图4 查询截图任务

操作步骤

  1. 参考上传音视频文件,上传一个视频文件至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集成示例

视频截图功能的详细说明和示例代码,请参考创建截图任务