摘要: 场景 点播上传SDK缺乏需要的语言版本(如C/C++、Go等)或相应的功能(如网络流上传、追加上传),可以直接使用OSS的SDK进行上传。 准备工作 确认已开通点播服务并完成了相关配置。确认已准备了阿里云账号AK,并授予了上传权限。

场景

点播上传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步:

1.使用AK初始化VOD客户端
2.获取视频上传地址和凭证
3.使用上传凭证和地址初始化OSS客户端
4.上传本地文件

可以使用点播服务的接口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-SDK、VOD-iOS-SDK、VOD-JavaScript-SDK;客户端上传时需要在服务端获取上传地址和凭证下发给客户端,以确保数据安全。

PHP上传示例

环境准备

PHP 5.3+,可通过php -v命令查看当前的PHP版本。
cURL 扩展,可通过php -m命令查看curl扩展是否已经安装好。

安装

1.在您的PHP项目中添加空文件夹 aliyun-php-sdk。

2.从 aliyun-openapi-php-sdk 下载整个源码,解压后拷贝 aliyun-php-sdk-core 和 aliyun-php-sdk-vod 两个文件夹到 aliyun-php-sdk 目录下。

3.从 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。

4.打开 aliyun-php-sdk/aliyun-php-sdk-core/Config.php 文件,找到“//config sdk auto load path.”,在这行下面添加:

Autoloader::addAutoloadPath("aliyun-php-sdk-vod");

5.在代码中引用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);
// 执行成功会返回VideoId、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);
$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上传文件。

为了扶持更多创业者,降低入行门槛,视频点播已在原有的视频点播服务五个套餐包基础上,推出了超值体验套餐包。

只需9.9元即可获得10GB流量、50GB存储、100分钟转码,可供个人、小微企业门户网站体验使用。

点击进入活动页面,立即购买,完成支付

进入视频点播产品页面,点击立即开通,开通视频点播服务,进行初始化配置,用户可以在控制台进行视频上传,转码设置、视频管理和视频预览等操作。

另外,体验完成后,阿里云也为提供了五个点播套餐包,供各种需求用户选择。

点击查看购买详情

阅读更多干货好文,请关注扫描以下二维码:

【视频点播最佳实践】使用OSS SDK上传视频到点播的更多相关文章

  1. Android-调用优酷SDK上传视频

    最近在研究用优酷的SDK来进行视频上传的功能,由于优酷的SDK只是提供了一个上传的sample code,没有涉及到授权的过程,对于新手来说,可能非常棘手,现在分享一下我的思路:   程序实现前我们先 ...

  2. yii 上传视频(ajax)

    实现一个功能:提交表单的时候,需要上传视频,把视频上传到oss上,然后把url作为表单值传到后端保存到数据库.需要ajax异步实现. 遇到了一个这样报错:Bad Request: 您提交的数据无法被验 ...

  3. OSS文件上传及OSS与ODPS之间数据连通

    场景描述        有这样一种场景,用户在自建服务器上存有一定数量级的CSV格式业务数据,某一天用户了解到阿里云的OSS服务存储性价比高(嘿嘿,颜值高),于是想将CSV数据迁移到云上OSS中,并且 ...

  4. js实现oss文件上传及一些问题

    关于兼容性问题,ie8以下的可以使用4.x的版本 一.引入sdk和jq <script src="http://libs.baidu.com/jquery/2.0.0/jquery.m ...

  5. 构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...

  6. PHP实现阿里云OSS文件上传(支持批量)

    上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下:   1.下载阿里云OSS对象上传SDK(P ...

  7. 记一次阿里云oss文件上传服务假死

    引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...

  8. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  9. Thinkphp整合阿里云OSS图片上传实例

    Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...

随机推荐

  1. ORACLE官方全托管驱动 Oracle.ManagedDataAccess 12.1.0.1.0

    以前用Oracle的时候,必须得装他臃肿的客户端,网上虽然也有提供直连Oracle的驱动,但也是要收费的,最近Oracle终于开窍了,提供了官方的全托管驱动. 这次是随Oracle ODAC 12c  ...

  2. Nova 启动虚拟机流程解析

    目录 文章目录 目录 前言 从请求说起 nova-api service 阶段 前言 Nova 启动虚拟机的东西太多,持续更新- 从请求说起 无论是通过 Dashboard 还是 CLI 启动一个虚拟 ...

  3. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

  4. 在Linux命令行模式安装VMware Tools

    在Linux命令行模式安装VMware Tools 方法/步骤1: 首先启动CentOS 7,在VMware中点击上方“VM”,点击“Install VMware Tools...”(如已安装则显示“ ...

  5. XSS的简单过滤和绕过

    XSS的简单过滤和绕过 程序猿用一些函数将构成xss代码的一些关键字符给过滤了.但是,道高一尺魔高一丈,虽然过滤了,还是可以尝试进行过滤绕过,以达到XSS攻击的目的. 最简单的是输入<scrip ...

  6. 五、Kubernetes_V1.10集群部署-master-部署组件

    一.配置apiserver 1.生成启动文件 cat > /usr/lib/systemd/system/kube-apiserver.service <<EOF [Unit] De ...

  7. mysql整理-常用sql语句

    一.常用sql show variables like 'character_set_client';#查询字符集 show databases;#列出所有的服务器上的数据库alter create ...

  8. PythonDay11

    第十一章函数使用_迭代器 今日内容 函数名的第一类对象及使用 f-strings 迭代器 函数名的第一类对象及使用 函数名可以当做值,赋值给变量 函数名可以当做容器内的元素 函数名可以当做函数的参数 ...

  9. Python常用库整理

    Python常用库整理 Python中到底有哪些库会让程序员爱不释手?以至于一次上瘾,造成永久性伤害(这句话好像在哪里见过),今天我们就来整理一番这样的库,欢迎各位在评论区或者私信我添加或者修改相关库 ...

  10. filebeat开启自带模块收集日志如何辨别日志来源等

    filebeat启动自带模块后,日志先输出到Redis中 比如开启了system模块日志和redis模块日志 在Redis中查看收集过来的日志时,可以看到如下的这些信息 system日志信息 { &q ...