阿里云视频点播转码 Composer 版
阿里云视频点播
阿里云视频点播集是音视频采集、编辑、上传、自动化转码处理、媒体资源管理、高效云剪辑处理、分发加速、视频播放于一体的一站式音视频点播解决方案。
安装SDK
composer require alibabacloud/sdk
版本要求
您必须使用
PHP 5.5.0
或更高版本可通过
php -v
命令查看当前的PHP版本;若未安装,请到PHP官网下载合适的版本。使用 Composer 并优化自动加载
composer dump-autoload --optimize
详情使用可参考
DEMO
<?php
/**
* Notes: 视频点播
* User : zzy
* Date : 2020/1/15
* Time : 10:23
*/
namespace App\Library;
use OSS\OssClient;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Vod\Vod;
class AliyunOnDemand
{
private $accessKeyId = '';
private $accessKeySecret = '';
private $callback = '';
private $client;
public function __construct()
{
$this->accessKeyId = config('aliyun.oss.accessKeyId');
$this->accessKeySecret = config('aliyun.oss.accessKeySecret');
$this->callback = config('aliyun.onDemand.callback');
$this->initVodClient();
}
/**
* Notes: 初始化
* User: zzy
* Date: 2020/1/15
* Time: 10:28
* Version:
*/
private function initVodClient()
{
$regionId = 'cn-shanghai'; // 点播服务接入区域
$this->client = AlibabaCloud::accessKeyClient($this->accessKeyId, $this->accessKeySecret)
->regionId($regionId)
->connectTimeout(1)
->timeout(3)
->asDefaultClient();
}
/**
* Notes: 初始化点播
* User: zzy
* Date: 2020/1/15
* Time: 10:34
* Version:
* @param $uploadAuth
* @param $uploadAddress
*/
public function initOssClient($uploadAuth, $uploadAddress)
{
$ossClient = new OssClient($uploadAuth['AccessKeyId'], $uploadAuth['AccessKeySecret'], $uploadAddress['Endpoint'],
false, $uploadAuth['SecurityToken']);
$ossClient->setTimeout(86400 * 7); // 设置请求超时时间,单位秒,默认是5184000秒, 建议不要设置太小,如果上传文件很大,消耗的时间会比较长
$ossClient->setConnectTimeout(10); // 设置连接超时时间,单位秒,默认是10秒
return $ossClient;
}
/**
* Notes: 获取播放地址
* User: zzy
* Date: 2020/1/15
* Time: 10:45
* Version:
* @param $videoId
* @return \AlibabaCloud\Client\Result\Result
* @throws ClientException
* @throws ServerException
*/
public function getPlayInfo($videoId)
{
try
{
$request = Vod::v20170321()->getPlayInfo()
->withVideoId($videoId)
->format('JSON')
->request();
return array("status" => 1, "data" => $request);
}
catch (Exception $e)
{
return array("status" => 0, "data" => $e->getMessage());
}
}
/**
* Notes: 上传本地视频-点播转码
* User: zzy
* Date: 2020/1/15
* Time: 10:51
* Version:
* @param $data
*/
public function localUploadLocalVideo($data, $isCallback = 1, $localFile)
{
$request = Vod::v20170321()->createUploadVideo();
$request->withTitle($data['title']);//标题,UTF8,128大小
$request->withFileName($data['fileName']);//视频源文件名
$request->withDescription(isset($data['description']) ? $data['description'] : '');//描述,utf-8
$request->withCoverURL(isset($data['coverURL']) ? $data['coverURL'] : '');//封面url
$request->withCateId(isset($data['cateId']) ? $data['cateId'] : ''); //分类id
$request->withTags(isset($data['tags']) ? $data['tags'] : ''); //标签,隔开
$request->withTemplateGroupId(isset($data['templateGroupId']) ? $data['templateGroupId'] : ''); //转码模板组ID
$request->withStorageLocation(isset($data['storageLocation']) ? $data['storageLocation'] : ''); //存储地址
if($isCallback == 1)
{
$userData = array(
"MessageCallback" => array("CallbackURL" => $this->callback),
"Extend" => array("title" => $data['title']),
'EventType' => 'TranscodeComplete',
);
$request->withUserData(json_encode($userData));
}
$result = $request->request();
$videoId = $result->VideoId;
$uploadAddress = json_decode(base64_decode($result->UploadAddress), true);
$uploadAuth = json_decode(base64_decode($result->UploadAuth), true);
$ossClient = $this->initOssClient($uploadAuth, $uploadAddress);
$this->multipartUploadFile($ossClient, $uploadAddress, $localFile);
return array("status" => 1, "data" => $videoId);
}
/**
* Notes: 分片上传
* User: zzy
* Date: 2020/1/15
* Time: 10:36
* Version:
* @param $ossClient
* @param $uploadAddress
* @param $localFile
* @return mixed
*/
public static function multipartUploadFile($ossClient, $uploadAddress, $localFile)
{
return $ossClient->multiuploadFile($uploadAddress['Bucket'], $uploadAddress['FileName'], $localFile);
}
/**
* Notes: 刷新播放凭证
* User: zzy
* Date: 2020/1/15
* Time: 14:45
* Version:
* @param $videoId
*/
public function refreshUploadVideo($videoId)
{
$result = Vod::v20170321()
->refreshUploadVideo()
->withVideoId($videoId)
->request();
return $result['VideoId'];
}
/**
* URL批量拉取上传
*
*
* @param $url
* @param $title
* @param $templateGroupId
* @return array
* @throws ClientException
* @throws ServerException
*/
public static function uploadMediaByURL($url, $title, $templateGroupId)
{
$uploadMetadataList = [];
$uploadMetadata = [];
$uploadMetadata['SourceUrl'] = $url;
$uploadMetadata['Title'] = $title;
$uploadMetadata['TemplateGroupId'] = $templateGroupId;
$uploadMetadataList[] = $uploadMetadata;
$result = Vod::v20170321()
->uploadMediaByURL()
->withUploadURLs($url)
->withUploadMetadatas(json_encode($uploadMetadataList))
->connectTimeout(0)
->timeout(0)
->request()->toArray();
return $result;
}
/**
* 获取URL上传信息
*
* @return array
* @throws ServerException
* @throws ClientException
*/
public function getURLUploadInfos()
{
$result = Vod::v20170321()
->getURLUploadInfos()
->withUploadURLs('url1,url2')
->connectTimeout(60)
->timeout(65)
->request()->toArray();
return $result['URLUploadInfoList'];
/* 或
$result = Vod::v20170321()
->getURLUploadInfos()
->withJobIds('jobId1,jobId2')
->connectTimeout(60)
->timeout(65)
->request()->toArray();*/
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
要写就介绍一下。不然堆一堆代码放这的意义是什么?
提示 Class 'OSS\OssClient' not found
主楼大哥哥 上传 转码 直接都在嘛
@pszhao
@最闲的码农 感觉主楼 :+1:
请教主楼 laravel 框架 有咨询插件吗? 就是装上了就是一个咨询系统