基于对象存储OBS的视频截图实践

2019-01-20  本文已影响41人  Captain7

对于存放在华为云OBS的视频文件,视频截图的实现方式有两种:
1.使用华为云官网提供的媒体转码MPC服务中的截图功能,但当前MPC只提供了按时间间隔采样的方式,且为异步调用,所以能力还有待完善。
链接:https://www.huaweicloud.com/product/mpc.html
2.使用华为云市场严选的视频云转码API服务,功能丰富且支持同步截图功能。
链接:https://market.huaweicloud.com/product/00301-120269-0--0

本文主要描述方式二的操作过程以提供实践参考。
一、前提条件
华为云账号、AK/SK、OBS桶名、OBS桶对应的endpoint信息

二、开通云市场中的视频转码API服务
在云市场-视频转码服务API页面,点击“立即开通”。



然后在【资源中心】-【我的云市场】-【已购买的应用】页面可以看到该服务,点击“管理”进入具体的详情页面。




在详情页面将“AppKey”和“AppSecret”记录下来。
然后回到云市场视频转码API服务页面,可查看API接口说明、调试API以及获取使用指南。

三、API调用前代码准备
访问:https://support.huaweicloud.com/devg-apig/apig-zh-dev-180525060.html 获取对应语言的API开发代码,此处以PHP举例。
访问:https://support.huaweicloud.com/devg-apig/apig-zh-dev-180521057.html 下载API网关的PHP SDK。


参考示例代码可修改为要调用的API服务。

四、设置存储库并调用视频截图
在截图之前,需要先设置存储库(转码服务截图后将截图上传到该对象存储桶)。
首先查看:视频云转码API接口调用规范.pdf
获取设置存储库的API接口说明:


然后编写相应的PHP代码(这里以最简单的AK/SK授权方式为例),关键代码参考如下:
 require 'signer.php';
    $signer = new Signer();
    $signer->AppKey = 'c138ea******';
    $signer->AppSecret = "ccb47****";

    $req = new Request();
    $req->method = 'GET';
    $req->scheme = 'http';
    $req->host = 'transcodeapi.apistore.huaweicloud.com';
    $req->uri = '/bucket/setBucket';
    $req->query = array(
        "name" => "obs-0116",
        "config" => json_encode(array(
            "endpoint" => "obs.cn-north-1.myhuaweicloud.com",
            "bucket" => "obs-0116",
            "AK" => "NKZA****",
            "SK" => "ialUuB***"
        ))
    );
    var_dump($req->query) ;
    $req->headers = array(
        'content-type' => 'application/json',
        'x-stage' => 'RELEASE',
    );
    $req->body = '';
    $curl = $signer->Sign($req);

根据响应信息可判断是否设置成功。成功后就可以调用视频截图功能了,先查询API文档中的截图接口说明:



然后编写相应的PHP代码,关键代码参考如下:

require 'signer.php';
    $signer = new Signer();
    $signer->AppKey = 'c138e***';
    $signer->AppSecret = "ccb47***";

    $req = new Request();
    $req->method = 'GET';
    $req->scheme = 'http';
    $req->host = 'transcodeapi.apistore.huaweicloud.com';
    $req->uri = '/videoSnapshot/synchronous/create';
    $req->query = array(
        "input" => json_encode(array("fileUrl" => "https://xxx.obs.cn-south-1.myhuaweicloud.com/obs-intro.mp4")),
        "snapshotConfig" => json_encode(array(
            "outputBucket" => "obs-0116",
            "time" => "30000",
            "width" => "600",
            "height" => "400"
        ))
    );
    var_dump($req->query) ;
    $req->headers = array(
        'content-type' => 'application/json',
        'x-stage' => 'RELEASE',
    );
    $req->body = '';
    $curl = $signer->Sign($req);

调用成功后的响应信息里会包含截帧图片的URL地址,至此已经获取到指定时间点的视频截图。

上一篇 下一篇

猜你喜欢

热点阅读