阿里雲點播SDK下載安裝地址:https://helpcdn.aliyun.com/document_detail...
阿里雲點播上傳SDK下載地址:https://helpcdn.aliyun.com/document_detail...
<?php
/**
* Notes: 視訊點播
* User : zzy
* Date : 2019/10/31
* Time : 8:52
*/
defined('BASEPATH') OR exit('No direct script access allowed');
require_once APPPATH.'/vendor/aliyuncs/aliyun-php-sdk/aliyun-php-sdk-core/Config.php';
require_once APPPATH."/vendor/aliyuncs/oss-sdk-php/autoload.php";
use vod\Request\V20170321 as vod;
use OSS\OssClient;
use OSS\Core\OssException;
class AliyunDemand{
private $accessKeyId = '';
private $accessKeySecret = '';
private $callback = '';
private $connection;
/**
* 建構函式初始化配置
*/
public function __construct()
{
$CI = &get_instance();
$CI->config->load('aliyundemand',TRUE);
$config = $CI->config->item('demand','aliyundemand');
$this->accessKeyId = $config['accessKeyId'];
$this->accessKeySecret = $config['accessKeySecret'];
$this->callback = $config['callback'];
$this->connection = $this->initVodClient($this->accessKeyId,$this->accessKeySecret);
}
/**
* Notes: 初始化點播服務
* User: zzy
* Date: 2019/10/31
* Time: 8:56
* Version:
* @param $accessKeyId
* @param $accessKeySecret
* @return DefaultAcsClient
*/
private function initVodClient($accessKeyId, $accessKeySecret) {
$regionId = 'cn-shanghai'; // 點播服務接入區域
$profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret);
return new DefaultAcsClient($profile);
}
/**
* Notes:重新整理上傳憑證
* User: zzy
* Date: 2019/10/31
* Time: 15:25
* Version:
* @param $vodClient
* @param $videoId
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function refresh_upload_video($vodClient, $videoId) {
$request = new vod\RefreshUploadVideoRequest();
$request->setVideoId($videoId);
return $this->connection->getAcsResponse($request);
}
/**
* Notes: 初始化點播oss
* User: zzy
* Date: 2019/10/31
* Time: 18:34
* Version:
* @param $uploadAuth
* @param $uploadAddress
* @return OssClient
* @throws OssException
*/
public function init_oss_client($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:大檔案分片上傳,支援斷點續傳;最大支援48.8TB
* User: zzy
* Date: 2019/10/31
* Time: 15:28
* Version:
* @param $ossClient
* @param $uploadAddress
* @param $localFile
* @return mixed
*/
public function multipart_upload_file($ossClient, $uploadAddress, $localFile) {
return $ossClient->multiuploadFile($uploadAddress['Bucket'], $uploadAddress['FileName'], $localFile);
}
/**
* 獲取視訊上傳地址和憑證
* @param client 傳送請求客戶端w
* @return CreateUploadVideoResponse 獲取視訊上傳地址和憑證響應資料
*/
/**
* Notes:獲取視訊上傳地址和憑證
* User: zzy
* Date: 2019/10/31
* Time: 16:43
* Version:
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
* @return CreateUploadVideoResponse 獲取視訊上傳地址和憑證響應資料
*/
public function createUploadVideo($data) {
$request = new vod\CreateUploadVideoRequest();
isset($data['title'])?$request->setTitle($data['title']):""; //標題,UTF8,128大小
isset($data['fileName'])?$request->setFileName($data['fileName']):""; //視訊原始檔名
isset($data['fileSize'])?$request->setFileSize($data['fileSize']):""; //大小,位元組
isset($data['description'])?$request->setDescription($data['description']):""; //描述,utf-8
isset($data['coverURL'])?$request->setCoverURL($data['coverURL']):""; //封面url
isset($data['cateId'])?$request->setCateId($data['cateId']):""; //分類id
isset($data['tags'])?$request->setTags($data['tags']):""; //標籤,隔開
isset($data['templateGroupId'])?$request->setTemplateGroupId($data['templateGroupId']):""; //轉碼模板組ID
isset($data['storageLocation'])?$request->setStorageLocation($data['storageLocation']):""; //儲存地址
$request->setAcceptFormat('JSON');
return $this->connection->getAcsResponse($request);
}
/**
* Notes:修改視訊資訊
* User: zzy
* Date: 2019/11/1
* Time: 13:07
* Version:
* @param $videoId
* @param $data
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function updateVideoInfo($videoId,$data) {
$request = new vod\UpdateVideoInfoRequest();
$request->setVideoId($videoId);
isset($data['title'])?$request->setTitle($data['title']):""; //標題,UTF8,128大小
isset($data['description'])?$request->setDescription($data['description']):""; //描述,utf-8
isset($data['coverURL'])?$request->setCoverURL($data['coverURL']):""; //封面url
isset($data['tags'])?$request->setTags($data['tags']):""; //標籤,隔開
isset($data['cateId'])?$request->setCateId($data['cateId']):""; //分類id
$request->setAcceptFormat('JSON');
return $this->connection->getAcsResponse($request);
}
/**
* Notes: 刪除音訊資訊
* User: zzy
* Date: 2019/11/1
* Time: 13:08
* Version:
* @param $videoIds
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function deleteVideos($videoIds) {
$request = new vod\DeleteVideoRequest();
$request->setVideoIds($videoIds); // 支援批量刪除視訊;videoIds為傳入的視訊ID列表,多個用逗號分隔
$request->setAcceptFormat('JSON');
$request->setAcceptFormat('JSON');
return $this->connection->getAcsResponse($request);
}
/**
* Notes: 上傳點播網路視訊
* User: zzy
* Date: 2019/11/5
* Time: 14:04
* Version:
* @return string
*/
public function ossUploadWebVideo($videoUrl,$videoTitle,$description='',$cateId='',$tags=''){
try {
$uploader = new AliyunVodUploader($this->accessKeyId, $this->accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($videoUrl, $videoTitle,$description,$cateId,$tags);
/* $userData = array(
"MessageCallback"=>array("CallbackURL"=>$this->callback),//你的回撥地址,http://www.xxx.com,這個地址回返回一個json格式,你用獲取HTTP裡的body值
);
$uploadVideoRequest->setUserData(json_encode($userData));*/
$res = $uploader->uploadWebVideo($uploadVideoRequest);
return array("status"=>1,"data"=>$res);
} catch (Exception $e) {
return array("status"=>0,"data"=>$e->getMessage());
}
}
/**
* Notes: 點播本地視訊上傳
* User: zzy
* Date: 2019/10/31
* Time: 16:38
* Version:
*/
public function UploadLocalVideo($data)
{
try {
#$file = $_FILES;
$localFile = PUBLIC_PATH.$data['videoUrl'];
$createRes = $this->createUploadVideo($data);
$videoId = $createRes->VideoId;
$uploadAddress = json_decode(base64_decode($createRes->UploadAddress), true);
$uploadAuth = json_decode(base64_decode($createRes->UploadAuth), true);
$ossClient = $this->init_oss_client($uploadAuth, $uploadAddress);
$result = $this->multipart_upload_file($ossClient, $uploadAddress, $localFile);
return array("status"=>1,"data"=>$videoId);
} catch (Exception $e) {
return array("status"=>0,"data"=>$e->getMessage());
}
}
/**
* Notes: 獲取音訊播放地址
* User: zzy
* Date: 2019/10/31
* Time: 18:15
* Version:
* @param $client
* @param $videoId
* @return mixed
*/
public function getPlayInfo($videoId) {
$request = new vod\GetPlayInfoRequest();
$request->setVideoId($videoId);
$request->setAuthTimeout(0);
$request->setAcceptFormat('JSON');
$videoInfoObj = $this->connection->getAcsResponse($request);
if($videoInfoObj) {
$videoInfoArr = json_decode( json_encode( $videoInfoObj),true);
return $videoInfoArr;
} else {
return false;
}
}
/**
* Notes: 獲取播放憑證
* User: zzy
* Date: 2019/10/31
* Time: 18:28
* Version:
* @param $videoId
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function getPlayAuth($videoId) {
$request = new vod\GetVideoPlayAuthRequest();
$request->setVideoId($videoId);
$request->setAuthInfoTimeout(3000);
$request->setAcceptFormat('JSON');
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:媒資分類-建立分類
* User: zzy
* Date: 2019/10/31
* Time: 18:30
* Version:
* @param $cateName 分類名稱
* @param int $parentId 父級id
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function addCategory($cateName, $parentId=-1) {
$request = new vod\AddCategoryRequest();
$request->setCateName($cateName);
$request->setParentId($parentId);
$request->setAcceptFormat('JSON');
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes: 媒資分類-修改分類
* User: zzy
* Date: 2019/10/31
* Time: 18:31
* Version:
* @param $client
* @param $cateId
* @param $cateName
* @return mixed
*/
public function updateCategory($cateId, $cateName) {
$request = new vod\UpdateCategoryRequest();
$request->setCateId($cateId);
$request->setCateName($cateName); // 分類名稱
$request->setAcceptFormat('JSON');
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:媒資分類-刪除分類
* User: zzy
* Date: 2019/10/31
* Time: 18:31
* Version:
* @param $client
* @param $cateId
* @return mixed
*/
public function deleteCategory($cateId) {
$request = new vod\DeleteCategoryRequest();
$request->setCateId($cateId);
$request->setAcceptFormat('JSON');
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:媒資分類-查詢分類及其子分類
* User: zzy
* Date: 2019/10/31
* Time: 18:32
* Version:
* @param int $cateId
* @param int $pageNo
* @param int $pageSize
* @return mixed
*/
public function getCategories($cateId=-1, $pageNo=1, $pageSize=10) {
$request = new vod\GetCategoriesRequest();
$request->setCateId($cateId); // 分類ID,預設為根節點分類ID即-1
$request->setPageNo($pageNo);
$request->setPageSize($pageSize);
$request->setAcceptFormat('JSON');
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:提交智慧稽核作業
* User: zzy
* Date: 2019/11/1
* Time: 9:21
* Version:
* @return mixed
*/
public function submitAIMediaAuditJob($videoId) {
$request = new vod\SubmitAIMediaAuditJobRequest();
// 設定視訊ID
$request->setMediaId($videoId);
// 返回結果
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:查詢智慧稽核作業
* User: zzy
* Date: 2019/11/1
* Time: 9:24
* Version:
* @param $videoId
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function getAIMediaAuditJob($videoId) {
$request = new vod\GetAIMediaAuditJobRequest();
// 設定作業ID
$request->setJobId($videoId);
// 返回結果
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:獲取智慧稽核結果摘要
* User: zzy
* Date: 2019/11/1
* Time: 9:25
* Version:
* @param $videoId
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function getMediaAuditResult($videoId) {
$request = new vod\GetMediaAuditResultRequest();
// 設定視訊ID
$request->setMediaId($videoId);
// 返回結果
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:獲取智慧稽核結果詳情
* User: zzy
* Date: 2019/11/1
* Time: 9:29
* Version:
* @param $videoId 視訊id
* @param $page 結果詳情頁碼
* @return mixed|SimpleXMLElement
* @throws ClientException
* @throws ServerException
*/
public function getMediaAuditResultDetail($videoId,$page) {
$request = new vod\GetMediaAuditResultDetailRequest();
// 設定視訊ID
$request->setMediaId($videoId);
// 設定翻頁
$request->setPageNo($page);
// 返回結果
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:預熱快取
* User: zzy
* Date: 2019/11/1
* Time: 9:30
* Version:
* @param $client
* @return mixed
*/
public function preloadVodObjectCaches($videoPath) {
$request = new vod\PreloadVodObjectCachesRequest();
// 需要預熱的檔案路徑
$request->setObjectPath($videoPath);
// 返回結果
$response = $this->connection->getAcsResponse($request);
return $response;
}
/**
* Notes:查詢重新整理預熱次數限制和餘量
* User: zzy
* Date: 2019/11/1
* Time: 9:31
* Version:
* @return mixed
*/
public function describeVodRefreshQuota() {
$request = new vod\DescribeVodRefreshQuotaRequest();
$response = $this->connection->getAcsResponse($request);
return $response;
}
}