阿里云视频点播转码 Composer 版

阿里云视频点播

阿里云视频点播集是音视频采集、编辑、上传、自动化转码处理、媒体资源管理、高效云剪辑处理、分发加速、视频播放于一体的一站式音视频点播解决方案。

安装SDK

composer require alibabacloud/sdk

版本要求

  • 您必须使用 PHP 5.5.0 或更高版本

    可通过php -v命令查看当前的PHP版本;若未安装,请到PHP官网下载合适的版本。

  • 使用 Composer 并优化自动加载 composer dump-autoload --optimize

详情使用可参考

阿里云视频点播转码 Composer 版

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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

要写就介绍一下。不然堆一堆代码放这的意义是什么?

4年前 评论
最闲的码农 (楼主) 4年前

提示 Class 'OSS\OssClient' not found

4年前 评论
最闲的码农 (楼主) 4年前
最闲的码农 (楼主) 4年前
yunat2018 (作者) 4年前
pszhao 4年前

主楼大哥哥 上传 转码 直接都在嘛

4年前 评论
最闲的码农 (楼主) 4年前
 $request->withTemplateGroupId(isset($data['templateGroupId']) ? $data['templateGroupId'] : ''); //转码模板组ID

@pszhao

4年前 评论

请教主楼 laravel 框架 有咨询插件吗? 就是装上了就是一个咨询系统

4年前 评论
最闲的码农 (楼主) 4年前
pszhao (作者) 4年前
最闲的码农 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!