场景
点播上传 SDK 缺乏需要的语言版本 (如 C/C++Go 等) 或相应的功能(如网络流上传追加上传), 可以直接使用 OSS 的 SDK 进行上传
准备工作
确认已开通点播服务并完成了相关配置
确认已准备了阿里云账号 AK, 并授予了上传权限
上传步骤
一访问点播服务获取上传地址和上传凭证
这一步还会创建视频媒资记录, 返回视频 ID, 请妥善保存, 后续可根据视频 ID 进行视频播放管理和 AI 处理等
二对上传地址 (UploadAddress) 和上传凭证 (UploadAuth) 分别进行 Base64 解析, 得到 OSS 的上传地址和授权信息
UploadAddress 字段 Base64 解码后, 得到 JSON 格式字符串, 包含字段如下:
UploadAuth 字段 Base64 解码后, 得到 JSON 格式字符串, 包含字段如下:
三调用 OSS SDK 将视频文件上传至指定的 bucket 中, 注意使用 STS Auth 方式, 且使用 UploadAddress 和 UploadAuth 进行初始化, 不要使用自己的 AK 等信息
代码实现
核心代码实现共分 4 步:
使用 AK 初始化 VOD 客户端
获取视频上传地址和凭证
使用上传凭证和地址初始化 OSS 客户端
上传本地文件
可以使用点播服务的接口 SDK(JavaPHPPython.NET), 或 API(接口说明调用示例)获取上传地址和凭证
使用 OSS SDK 在服务端上传, 目前支持如下版本:
OSS-Java-SDKOSS-PHP-SDKOSS-Python-SDKOSS-C-SDKOSS-Go-SDKOSS-Ruby-SDKOSS-.NET-SDK
客户端上传建议使用 VOD 的上传 SDK:VOD-Android-SDKVOD-iOS-SDKVOD-JavaScript-SDK; 客户端上传时需要在服务端获取上传地址和凭证下发给客户端, 以确保数据安全
PHP 上传示例
环境准备
PHP 5.3+, 可通过 php -v 命令查看当前的 PHP 版本
cURL 扩展, 可通过 php -m 命令查看 curl 扩展是否已经安装好
安装
在您的 PHP 项目中添加空文件夹 aliyun-php-sdk
从 aliyun-openapi-php-sdk 下载整个源码, 解压后拷贝 aliyun-php-sdk-core 和 aliyun-php-sdk-vod 两个文件夹到 aliyun-php-sdk 目录下
从 aliyun-oss-php-sdk 下载最新的 OSS PHP SDK 的源码, 解压 ZIP 文件后添加文件夹到 aliyun-php-sdk 目录下以下载 v.2.2.4 Source code (zip) 为例, 解压后文件夹为 aliyun-oss-php-sdk-2.2.4
打开 aliyun-php-sdk/aliyun-php-sdk-core/Config.php 文件, 找到 //config sdk auto load path., 在这行下面添加:
Autoloader::addAutoloadPath("aliyun-php-sdk-vod");
在代码中引用 VOD 和 OSS 的文件:
- require_once './aliyun-php-sdk/aliyun-php-sdk-core/Config.php'; // 假定您的源码文件和 aliyun-php-sdk 处于同一目录
- require_once './aliyun-php-sdk/aliyun-oss-php-sdk-2.2.4/autoload.php';
- use vod\Request\V20170321 as vod;
- use OSS\OssClient;
- use OSS\Core\OssException;
更多信息可参考 VOD PHP SDK 安装 和 OSS PHP SDK 安装
参考代码
定义核心步骤的函数:
使用 AK 初始化 VOD 客户端
- function init_vod_client($accessKeyId, $accessKeySecret) {
- $regionId = 'cn-shanghai'; // 点播服务所在的 Region, 国内请填 cn-shanghai, 不要填写别的区域
- $profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret);
- return new DefaultAcsClient($profile);
- }
获取视频上传地址和凭证
- function create_upload_video($vodClient) {
- $request = new vod\CreateUploadVideoRequest();
- $request->setTitle("视频标题"); // 视频标题(必填参数)
- $request->setFileName("文件名称. mov"); // 视频源文件名称, 必须包含扩展名(必填参数)
- $request->setDescription("视频描述"); // 视频源文件描述(可选)
- $request->setCoverURL("http://img.alicdn.com/tps/TB1qnJ1PVXXXXXCXXXXXXXXXXXX-700-700.png"); // 自定义视频封面(可选)
- $request->setTags("标签 1, 标签 2"); // 视频标签, 多个用逗号分隔(可选)
- return $vodClient->getAcsResponse($request);
- }
使用上传凭证和地址初始化 OSS 客户端(注意需要先 Base64 解码并 Json Decode 再传入)
- 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;
- }
上传本地文件
- function upload_local_file($ossClient, $uploadAddress, $localFile) {
- return $ossClient->uploadFile($uploadAddress['Bucket'], $uploadAddress['FileName'], $localFile);
- }
刷新上传凭证
- function refresh_upload_video($vodClient, $videoId) {
- $request = new vod\RefreshUploadVideoRequest();
- $request->setVideoId($videoId);
- return $vodClient->getAcsResponse($request);
- }
执行完整流程(注意捕获异常):
- $accessKeyId = '<AccessKeyId>'; // 您的 AccessKeyId
- $accessKeySecret = '<AccessKeySecret>'; // 您的 AccessKeySecret
- $localFile = '/Users/yours/Video/testVideo.flv'; // 需要上传到 VOD 的本地视频文件的完整路径
- try {
- // 初始化 VOD 客户端并获取上传地址和凭证
- $vodClient = init_vod_client($accessKeyId, $accessKeySecret);
- $createRes = create_upload_video($vodClient);
- // 执行成功会返回 VideoIdUploadAddress 和 UploadAuth
- $videoId = $createRes->VideoId;
- $uploadAddress = json_decode(base64_decode($createRes->UploadAddress), true);
- $uploadAuth = json_decode(base64_decode($createRes->UploadAuth), true);
- // 使用 UploadAuth 和 UploadAddress 初始化 OSS 客户端
- $ossClient = init_oss_client($uploadAuth, $uploadAddress);
- // 上传文件, 注意是同步上传会阻塞等待, 耗时与文件大小和网络上行带宽有关
- //$result = upload_local_file($ossClient, $uploadAddress, $localFile);
- $result = multipart_upload_file($ossClient, $uploadAddress, $localFile);
- printf("Succeed, VideoId: %s", $videoId);
- } catch (Exception $e) {
- // var_dump($e);
- printf("Failed, ErrorMessage: %s", $e->getMessage());
- }
Demo 下载
可下载完整的 PHP 版上传 Demo 源码, 更多使用信息请参考 OSS-PHP-SDK 上传文件
为了扶持更多创业者, 降低入行门槛, 视频点播已在原有的视频点播服务五个套餐包基础上, 推出了超值体验套餐包
只需一分钱即可获得 10GB 流量 50GB 存储 100 分钟转码, 可供个人小微企业门户网站体验使用
点击进入活动页面, 立即购买, 完成支付
进入视频点播产品页面, 点击立即开通, 开通视频点播服务, 进行初始化配置, 用户可以在控制台进行视频上传, 转码设置视频管理和视频预览等操作
另外, 体验完成后, 阿里云也为提供了五个点播套餐包, 供各种需求用户选择
来源: https://yq.aliyun.com/articles/541003