1、安装 SDK 核心库 OpenAPI。
文档地址:https://next.api.aliyun.com/api-tools/sdk/vod?version=2017-03-21&language=php-tea
2、 最新版本库中代码报错;我降了版本错误就消失了。
composer require alibabacloud/darabonba-openapi 0.2.5
3、安装 VOD
composer require alibabacloud/vod-20170321 2.16.9
4、具体代码如下
<?php
namespace App\Http\Repositories\ShangQuan\Admin;
use Illuminate\Http\Request;
use App\Model\ShangQuan\Circle;
use AlibabaCloud\SDK\Vod\V20170321\Vod;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Vod\V20170321\Models\CreateUploadVideoRequest;
use AlibabaCloud\SDK\Vod\V20170321\Models\GetVideoInfoRequest;
use AlibabaCloud\SDK\Vod\V20170321\Models\GetPlayInfoRequest;
use AlibabaCloud\SDK\Vod\V20170321\Models\GetVideoPlayAuthRequest;
use AlibabaCloud\SDK\Vod\V20170321\Models\RefreshUploadVideoRequest;
use AlibabaCloud\SDK\Vod\V20170321\Models\DeleteVideoRequest;
class VideoRepository
{
protected $request;
protected $circle;
/**
* @param Request $request
* @param Circle $circle
*/
public function __construct(Request $request, Circle $circle)
{
$this->request = $request;
$this->circle = $circle;
}
/**
* 使用AK&SK初始化账号Client
* @return Vod
*/
public static function createClient()
{
$config = new Config([
"accessKeyId" => env('ACCESS_KEY_ID', 'LTAI5t9dxYaMkD*******'),
"accessKeySecret" => env('ACCESS_KEY_SECRET', 'Em5k7ziWljwUByFHsvS0G*******'),
]);
//访问的域名
$config->endpoint = "vod.cn-shanghai.aliyuncs.com";
return new Vod($config);
}
/**
* 获取视频上传地址和凭证
* @return array
*/
public function create()
{
$data = $this->request->all();
if (empty($data['file'])) {
return ["message" => "视频名称不能为空!", "code" => 201];
}
if (empty($data['title'])) {
return ["message" => "视频标题不能为空!", "code" => 201];
}
$client = self::createClient();
$createUploadVideoRequest = new CreateUploadVideoRequest([
"fileName" => $data['file'],//文件名称
"cateId" => $data['cateId'] ?? env('CATE_ID'),//类型名称
'title' => $data['title'],//标题
'coverURL' => $data['coverURL'] ?? '',//自定义视频封面的URL地址
'templateGroupId' => env('TEMPLATE_GROUP_ID') //转码模板
]);
$result = $client->createUploadVideo($createUploadVideoRequest);
if (!empty($result->body)) {
return ["message" => "获取成功!", "data" => $result->body];
}
return ["message" => "获取失败!", "code" => 201];
}
/**
* 获取视频基本信息
* @return array|array[]
*/
public function info()
{
$videoId = request('videoId');
if (empty($videoId)) {
return ["message" => "参数错误videoId!", "code" => 201];
}
$client = self::createClient();
$getPlayInfoRequest = new GetVideoInfoRequest([
"videoId" => $videoId
]);
$result = $client->getVideoInfo($getPlayInfoRequest);
if (!empty($result->body)) {
return ["message" => "获取成功!", "data" => $result->body];
}
return ["message" => "获取失败!", "code" => 201];
}
/**
* 获取视频播放地址
* @return array|array[]
*/
public function play()
{
$videoId = request('videoId');
$authTimeout = request('authTimeout', '300');
if (empty($videoId)) {
return ["message" => "参数错误videoId!", "code" => 201];
}
$client = self::createClient();
$getPlayInfoRequest = new GetPlayInfoRequest([
"videoId" => $videoId,
"authTimeout" => $authTimeout, //视频链接过期时间
"definition" => 'fd'
]);
$result = $client->getPlayInfo($getPlayInfoRequest);
if (!empty($result->body)) {
return ["message" => "获取成功!", "data" => $result->body];
}
return ["message" => "获取失败!", "code" => 201];
}
/**
* 获取视频播放凭证
* @return array|array[]
*/
public function auth()
{
$videoId = request('videoId');
if (empty($videoId)) {
return ["message" => "参数错误videoId!", "code" => 201];
}
$client = self::createClient();
$getPlayInfoRequest = new GetVideoPlayAuthRequest([
"videoId" => $videoId,
]);
$result = $client->getVideoPlayAuth($getPlayInfoRequest);
if (!empty($result->body)) {
return ["message" => "获取成功!", "data" => $result->body];
}
return ["message" => "获取失败!", "code" => 201];
}
/**
* 刷新视频上传凭证
* @return array|array[]
*/
public function refresh()
{
$videoId = request('videoId');
if (empty($videoId)) {
return ["message" => "参数错误videoId!", "code" => 201];
}
$client = self::createClient();
$getPlayInfoRequest = new RefreshUploadVideoRequest([
"videoId" => $videoId,
]);
$result = $client->refreshUploadVideo($getPlayInfoRequest);
if (!empty($result->body)) {
return ["message" => "获取成功!", "data" => $result->body];
}
return ["message" => "获取失败!", "code" => 201];
}
/**
* 删除完整视频
* @return array|array[]
*/
public function delete()
{
$videoIds = request('videoIds');
if (empty($videoIds)) {
return ["message" => "参数错误videoIds!", "code" => 201];
}
$client = self::createClient();
$getPlayInfoRequest = new DeleteVideoRequest([
"videoIds" => $videoIds,
]);
$result = $client->deleteVideo($getPlayInfoRequest);
if (!empty($result->body)) {
return ["message" => "删除成功!", "data" => $result->body];
}
return ["message" => "删除失败!", "code" => 201];
}
}
5、API接口文档地址: https://console-docs.apipost.cn/preview/2c1bd42304482640/cf56471aa6aa81f3