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