阿里云视频点播转码 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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 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年前

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