在服务端上传场景下,当推荐的上传方式(如上传SDK)无法满足业务需求时,您还可以基于OSS原生SDK上传媒体。本文提供基于OSS原生SDK上传媒体的流程指引、操作步骤和代码示例。点播服务端上传SDK请参见上传SDK(服务端)。Python点播服务端上传SDKOSS原生SDK点播服务端上传SDKC/C++点播服务端上传SDKOSS原生SDK点播服务端上传SDKPHP点播服务端上传SDK点播服务端上传SDKGo-需集成点播服务端SDK获取长传地址和凭证。本文提供上传示例代码。.NET-Node.jsOSS原生SDK-需集成点播服务端SDK获取长传地址和凭证。暂无完整的上传示例代码,仅提供操作参考。上传流程基于OSS原生SDK上传需要开发者自行实现所有上传逻辑,包括在点播服务获取上传地址和凭证、Base64解码上传地址和凭证以及调用OSS能力完成上传。以集成点播服务端SDK获取上传地址和凭证为例,完整的上传流程如下图所示:流程详解上传应用服务器使用RAM用户AK方式(AccessKey ID和AccessKey Secret)或STS临时AK初始化点播客户端。上传应用服务器使用OSS SDK调用OSS上传相关接口将媒体文件上传至指定的存储地址。OSS服务返回上传结果。前提条件您已经开通了视频点播服务。开通步骤请参见开通视频点播服务。您已经完成上传相关的系统配置,包括启用目标存储地域的存储地址和配置回调。操作指引请参见管理存储Bucket及回调设置。您已准备好用于调用点播服务的账号。为避免阿里云账号AccessKey泄露带来的安全风险,推荐您创建RAM用户并授予其VOD相关权限。然后使用RAM用户的AK对(AccessKey ID和AccessKey Secret)访问点播服务。操作指引请参见创建RAM用户并授权。已配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见在Linux、macOS和Windows系统配置环境变量。(可选)如需使用STS临时授权方式(阿里云Security Token Service)访问点播服务,请为RAM用户创建角色并授予角色VOD相关权限。操作指引请参见使用STS临时授权方案上传视频。操作步骤Demo源码针对上述示例,视频点播提供了Demo源码供开发者参考。语言源码更多参考信息PHP上传DemoPHP版上传Demo源码OSS-PHP-SDK上传文件Go上传DemoGO版上传Demo源码OSS-Go-SDK上传文件.NET上传Demo.NET版上传Demo源码OSS-.NET-SDK上传文件Java上传DemoJava版上传Demo源码OSS-Java-SDK上传文件从aliyun-oss-php-sdk下载最新的OSS PHP SDK的源码。解压ZIP文件后添加文件夹到aliyun-php-sdk目录下。以下载V.2.4.3 Source code为例,解压后文件夹为aliyun-oss-php-sdk-2.4.3。更多关于OSS PHP SDK的安装要求及安装方式等信息,请参见OSS PHP SDK安装。<?php
//1、在代码中引用VOD和OSS的文件。
// 假定您的源码文件和aliyun-php-sdk处于同一目录。
require_once './aliyun-php-sdk/aliyun-php-sdk-core/Config.php';
require_once './aliyun-php-sdk/aliyun-oss-php-sdk-2.4.3/autoload.php';
use vod\Request\V20170321 as vod;
use OSS\OssClient;
use OSS\Core\OssException;
//2、使用AK对方式初始化VOD客户端。
function init_vod_client($accessKeyId, $accessKeySecret) {
// 根据点播接入服务所在的Region填写,例如:接入服务在上海,则填cn-shanghai
$regionId = 'cn-shanghai';
$profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret);
return new DefaultAcsClient($profile);
}
//3、获取上传地址和凭证
function create_upload_video($vodClient) {
$request = new vod\CreateUploadVideoRequest();
$request->setTitle("视频标题"); // 视频标题(必填参数)
$request->setFileName("文件名称.mov"); // 视频源文件名称,必须包含扩展名(必填参数)
$request->setDescription("视频描述"); // 视频源文件描述(可选)
// CoverURL示例:-700-****.png
$request->setCoverURL("<your Cover URL>"); // 自定义视频封面(可选)
$request->setTags("标签1,标签2"); // 视频标签,多个用逗号分隔(可选)
return $vodClient->getAcsResponse($request);
}
//4、使用上传凭证和地址通过STS方式初始化OSS客户端。
function init_oss_client($uploadAuth, $uploadAddress) {
$ossClient = new OssClient($uploadAuth['AccessKeyId'], $uploadAuth['AccessKeySecret'], $uploadAddress['Endpoint'],
false, $uploadAuth['SecurityToken']);
// 设置请求超时时间,单位秒,默认是5184000秒, 建议不要设置太小,如果上传文件很大,消耗的时间会比较长
$ossClient->setTimeout(86400*7);
// 设置连接超时时间,单位秒,默认是10秒
$ossClient->setConnectTimeout(10);
return $ossClient;
}
//5、上传。
function upload_local_file($ossClient, $uploadAddress, $localFile) {
return $ossClient->uploadFile($uploadAddress['Bucket'], $uploadAddress['FileName'], $localFile);
}
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'); // 您的AccessKeyId
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'); // 您的AccessKeySecret
$localFile = '/Users/aligame/Downloads/****.mp4'; // 需要上传到VOD的本地视频文件的完整路径
try {
// 初始化VOD客户端并获取上传地址和凭证
$vodClient = init_vod_client($accessKeyId, $accessKeySecret);
$createRes = create_upload_video($vodClient);
// 执行成功会返回VideoId、UploadAddress和UploadAuth。Base64解码UploadAddress和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);
printf("Succeed, VideoId: %s", $videoId);
} catch (Exception $e) {
// var_dump($e);
printf("Failed, ErrorMessage: %s", $e->getMessage());
}
使用go get或glide安装阿里云Go SDK。使用go get安装阿里云Go SDK。go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk使用glide安装阿里云Go SDK。glide get github.com/aliyun/alibaba-cloud-sdk-go安装OSS SDK。操作指引请参见OSS Go SDK安装。步骤一、安装视频点播VOD SDK操作指引请参见Java SDK快速入门。步骤二、安装OSS SDK操作指引请参考OSS Java SDK安装。步骤一、安装视频点播VOD SDK操作指引请参见.NET SDK快速入门。步骤二、安装OSS SDK并初始化操作指引请参见OSS .NET SDK安装。步骤三、初始化点播客户端步骤四、完成上传获取上传地址和凭证(以上传视频为例)。Base64解析获取到的UploadAddress和UploadAuth。使用上传凭证和地址初始化OSS客户端。上传本地文件。(可选)如果上传凭证过期,可刷新上传凭证再上传。执行完整流程(注意捕获异常)。更多语言操作指引开发语言视频点播VOD SDKOSS原生SDKNode.jsVOD Node.js SDK的安装和初始化,请参见Node.js SDK快速入门。获取上传地址和凭证,请参考其他语言的上传逻辑并结合阿里云OpenAPI门户在线调试生成SDK示例,自行实现。更多信息,请参见如何自动生成SDK示例。OSS Node.js SDK安装OSS Node.js SDK初始化OSS Node.js SDK上传文件参考信息:解析上传地址和凭证说明表 1. UploadAddress解析后字段字段描述Bucket点播存储地址。Endpoint点播存储地域标识。FileName点播系统为上传文件分配的文件名。ObjectPrefix当且仅当上传文件是M3U8文件时返回。表 2. UploadAuth解析后字段字段描述AccessKeyId上传用户的AccessKey ID。AccessKeySecret上传用户的AccessKey Secret。SecurityToken上传授权安全令牌。ExpireUTCTime上传地址和凭证过期时间,为UTC时间,格式:yyyy-MM-ddTHH:mm:ssZ。Expiration上传授权过期时间,视频为3000秒,过期需要刷新上传凭证。Region上传地域标识。以下是上传地址和凭证解析前后的示例: