美文网首页
基于对象存储OBS的视频截图实践

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

作者: Captain7 | 来源:发表于2019-01-20 22:22 被阅读41次

    对于存放在华为云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地址,至此已经获取到指定时间点的视频截图。

    相关文章

      网友评论

          本文标题:基于对象存储OBS的视频截图实践

          本文链接:https://www.haomeiwen.com/subject/yluxjqtx.html