如何基于OSS和MTS,快速搭建音视频文件上传服务?

摘要: 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK,快速搭建一个音视频文件上传服务。 优势 使用MTS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能。 增加STS Token 超时更新功能。

背景
本文主要介绍如何基于OSS服务和MTS的上传SDK,快速搭建一个音视频文件上传服务。

优势
使用MTS的上传SDK上传音视频文件,具有以下优势:

增加文件列表管理功能。
增加STS Token 超时更新功能。
增加上传过程中网络抖动时的自动重试功能。
文件断点续传功能。
自动触发MTS服务的媒体工作流。
配置媒体标题、标签、描述、类目、封面URL、等功能。
注意:

断点续传的限制条件:不允许跨生命周期。JS端页面不能刷新、关闭,android/iOS不能关闭APP、手机。
同一本地文件只能上传一次。
上传服务架构图
图片描述

服务端搭建
考虑移动端AK安全性问题,选用STS的方式上传文件。关于STS如何增加上传的安全性,请参考RAM和STS使用指南

STS开通流程
开通OSS服务,创建Bucket,并登录OSS控制台
在OSS概览页中找到基础配置区域,单击 安全令牌,如下图所示:
图片描述
进入到 安全令牌快捷配置 页面。
图片描述
系进行自动授权,请务必保存下图中三个红框内的参数。单击保存AK信息后,对话框会关闭,STS的开通完成。
图片描述
图片描述

搭建一个应用服务器
应用服务器示例的配置

每个语言包下载下来后,都会有一个配置文件config.json如下所示:

{"AccessKeyID" : "","AccessKeySecret" : "","RoleArn" : "","TokenExpireTime" : "900","PolicyFile": "policy/all_policy.txt"
}

说明:

AccessKeyID: 填写上述图标红的参数1的内容。
AccessKeySecret: 填写上述图标红的参数2的内容。
RoleArn: 填写上述图标红的参数3的内容。
TokenExpireTime: 指Android/iOS应用取到这个Token的失效时间,注意,最少是900s,默认值可以不修改。
PolicyFile: 填写的是该Token所要拥有的权限列表的文件, 默认值可以不修改。
本文档准备了三种最常用token权限文件,放于policy目录下面。分别是:

all_policy.txt:指定了该token拥有对该账号下创建Bucket、删除Bucket、上传文件、下载文件、删除文件的权限 。
bucket_read_policy.txt:指定了该token拥有该账号下对指定Bucket的读权限。
bucket_read_write_policy.txt: 指定了该token拥有该账号下对指定Bucket的读写权限。
如果您想要指定这个Token只能对指定的bucket有读写权限, 请把(bucket_read_policy.txt、 bucket_read_write_policy.txt)这些文件里面$BUCKET_NAME直接替换成指定的bucket名字。

返回的格式解析

{"status":200,"AccessKeyId":"STS.3pYjsdgdgagdasdg","AccessKeySecret":"rpnwO9kvEgetGdrddgsR2YrTtI","Security":"CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVtbzI=","Expiration":"2015-12-12T07:49:09Z",
}

说明(下面四个变量将构成了一个Token。):

status:表示获取Token的状态,获取成功时,返回值是200。
AccessKeyId: 表示Android/iOS应用初始化OSSClient获取的 AccessKeyId。
AccessKeySecret: 表示Android/iOS应用初始化OSSClient获取AccessKeySecret。
SecurityToken:表示Android/iOS应用初始化的Token。
Expiration: 表示该Token失效的时间。主要在Android SDK会自动判断是否失效,自动获取Token。
代码示例的运行方法
对于JAVA版本 (依赖于java 1.7),将包下载解压后
运行方法:java -jar oss-token-server.jar (port)。如果不指定port(端口), 直接运行java –jar oss-token-server.jar,程序会监听7080端口。如果想让程序执行在9000端口,运行java –jar app-token-server.jar 9000 , 其他端口也类似。

对于PHP版本,将包下载解压后,修改config.json这个文件,直接运行php sts.php 即能生成Token,将程序部署到指定的地址。
使用MTS客户端SDK
客户端示例代码

SDK核心代码:
JS端
在使用JS SDK之前,先对要上传视频的OSS Bucket 已经开启了CORS访问权限。下载JS的Demo,在浏览器中打开, 在页面上进行参数配置:

配置”HTTP地址”为上面配置的应用服务器地址,如http://127.0.0.1:7080/。
配置用户Bucket。
配置Bucket的endpoint。
点击选择文件,选中要上传的文件。
点击开始上传按钮。

// 初始化客户端
var uploader = new VODUpload({// 开始上传'onUploadstarted': function (uploadInfo) {;},// 文件上传成功'onUploadSucceed': function (uploadInfo) {console.log("上传成功");},// 文件上传失败'onUploadFailed': function (uploadInfo, code, message) {console.log("上传失败");},// 文件上传进度,单位:字节'onUploadProgress': function (uploadInfo, totalSize, uploadedSize) {console.log("上传进度");},// 安全令牌超时'onUploadTokenExpired': function (uploadInfo) {console.log("token超时");}
});
// 获取sts信息
result = httpGet(httpServer);
stsToken = JSON.parse(result);
uploader.init(stsToken.AccessKeyId, stsToken.AccessKeySecret, stsToken.SecurityToken, stsToken.Expiration);
// 添加文件
uploader.addFile(event.target.files[i], endpoint, bucket, object, userData);
// 开始上传
uploader.startUpload();

Android端
确保Android端已经添加如下权限:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

下载Android端Demo,进行如下修改:

修改MainActivity里面的serverUrl为应用服务器配置地址,如http://192.168.0.2:7080/
配置用户Bucket。
配置用户Bucket对应的endpoint。
运行Demo,点击添加文件。
点击上传,在OSS对应Bucket的uploadtest/目录下查看文件是否已经上传成功。
主要代码:

VODUploadClient uploader = new VODUploadClientImpl(getApplicationContext());
VODUploadCallback callback = new VODUploadCallback() {@Overridepublic void onUploadSucceed(UploadFileInfo info) {;}@Overridepublic void onUploadFailed(UploadFileInfo info, String code, String message) {;}@Overridepublic void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize) {;}@Overridepublic void onUploadTokenExpired(UploadFileInfo info) {// 获取并更新 sts token。uploader.resumeWithToken("<accessKeyId>", "<accessKeySecret>", "<secretToken>", "<expireTime>");}@Overridepublic void onUploadRetry(UploadFileInfo info, String code, String message) {;}@Overridepublic void onUploadRetryResume(UploadFileInfo info) {;}@Overridepublic boolean onUploadStarted(UploadFileInfo uploadFileInfo) {;}
};
// 获取sts token并初始化
uploader.init("<accessKeyId>", "<accessKeySecret>", "<secretToken>", "<expireTime>", callback);
// 添加文件
uploader.addFile("<uploadFilePath>", "<endpoint>", "<bucketName>", "<objectKey>");
// 开始上传
uploader.start();

iOS端
下载iOS端Demo,进行如下修改:

修改VODUploadDemo.m里面的serverUrl为应用服务器配置地址,如http://192.168.0.2:7080/
配置用户Bucket。
配置用户Bucket对应的endpoint。
运行Demo,点击添加文件。
点击上传,在OSS对应Bucket的uploadtest/目录下查看文件是否已经上传成功。
主要代码:

// 回调初始化
OnUploadStartedListener testUploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {;};
OnUploadSucceedListener testSuccessCallbackFunc = ^(NSString* filePath){;};
OnUploadFailedListener testFailedCallbackFunc = ^(NSString* filePath, NSString* code, NSString* message){;};
OnUploadProgressListener testProgressCallbackFunc = ^(NSString* filePath, long uploadedSize, long totalSize) {;};
OnUploadTokenExpiredListener testTokenExpiredCallbackFunc = ^{// 获取并更新sts token[uploader resumeWithToken:<accessKeyId>accessKeySecret:<accessKeySecret>secretToken:<secretToken>expireTime:<expireTime>]
};
OnUploadRertyListener testUploadRertyListener = ^{;};
OnUploadRertyResumeListener testUploadRertyResumeListener = ^{;};
VODUploadListener *listener;
listener = [[VODUploadListener alloc] init];
listener.started = testUploadStartedCallbackFunc;
listener.success = testSuccessCallbackFunc;
listener.failure = testFailedCallbackFunc;
listener.progress = testProgressCallbackFunc;
listener.expire = testTokenExpiredCallbackFunc;
listener.retry = testUploadRertyListener;
listener.retryResume = testUploadRertyResumeListener;
// 获取Token
// 上传客户端初始化
VODUploadClient *uploader;
[uploader init:<accessKeyId>accessKeySecret:<accessKeySecret>secretToken:<secretToken>expireTime:<expireTime>listener:listener];
// 添加文件
[uploader addFile:<uploadFilePath>endpoint:<endpoint>bucket:<bucketName>object:<objectKey>];
// 开始上传
[uploader start];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA 2019.1 windows找不到文件‘chrome’

文章目录一、问题现象1. 用IntelliJ IDEA 2019.1 打开index.html,抛出以下错误2. 异常效果图二、解决方案&#xff1a;2.1.【打开设置】2.2. 搜索【web brow】2.3. 在桌面上找到google-【右击】-【属性】-【找到目标】-【双击】-【ctrla全选】-【ctrlc复制】2.4. 在红框中&…

新功能:阿里云负载均衡支持HTTP/2、WSS协议

摘要&#xff1a; 很高兴的告诉大家&#xff0c;阿里云负载均衡在欧洲中部&#xff08;法兰克福&#xff09;与亚太东南3&#xff08;吉隆坡&#xff09;地域支持HTTP/2、WSS&#xff08;Web Socket Secure&#xff09;协议。 1、HTTP/2协议支持 什么是HTTP/2 HTTP2是超文本传输…

wds linux,linux 无线组网方式 WDS功能

扩展你的无线网络&#xff1a;使用WDS扩展WDS设置无线分布式系统WDS(Wireless Distribution System)&#xff0c;在无线网络扩展中扮演着最重要的角色&#xff0c;它可以帮你轻松的实现无线到无线的扩展&#xff0c;而中间不必使用任何有线的连接&#xff0c;这在看中美观的家庭…

三十四载Windows崛起之路: 苹果、可视做过微软“铺路石”

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;姜洪军1982年11月的一天&#xff0c;赌城拉斯维加斯客流如织&#xff0c;有常见的闲散赌客&#xff0c;但更多的是来自计算机产业的专业人士&#xff0c;因为计算机领域的重要博览会Comdex在这里举行。27岁的比尔盖…

阿里云CDN直播架构与双11晚会直播实战

摘要&#xff1a; 分享人&#xff1a;阿里云CDN直播 高级技术专家 阙寒分享内容&#xff1a;双11直播活动是众多直播活动中非常典型的场景&#xff0c;离不开直播本身这个话题。所以今天的分享会从直播概述、直播架构、业务功能、直播监控、双11这几个方面来进行。 分享人&…

双11黑科技,阿里百万级服务器自动化运维系统StarAgent揭秘

摘要&#xff1a; 还记得那些年我们半夜爬起来重启服务器的黑暗历史吗&#xff1f;双11期间&#xff0c;阿里巴巴百万量级主机管理能安全、稳定、高效&#xff0c;如丝般顺滑是如何做到的&#xff1f;阿里巴巴运维中台技术专家宋意&#xff0c;首次直播揭秘阿里IT运维的基础设施…

查看大日志文件的专门工具logviewer

查看大日志文件的专门工具logviewer版本为官网2.3.1版本 文章目录一、百度网盘下载链接&#xff1a;二、操作手册2.1. 【file】-【Open】-【选择文件】-【打开】2.2. 文本可视化展示2.3. 编码选择2.4. 效果图2.5. 搜索功能一、百度网盘下载链接&#xff1a; 链接https://pan.b…

Android热修复升级探索——SO库修复方案

摘要&#xff1a; 通常情况下&#xff0c;大多数人希望android下热补丁方案能够做到补丁的全方位修复&#xff0c;包括类修复/资源修复/so库的修复。 这里主要介绍热补丁之so库修复思路。 一、前言 通常情况下&#xff0c;大多数人希望android下热补丁方案能够做到补丁的全方位…

中小企业搭建混合云,服务器如何选?

戳蓝字“CSDN云计算”关注我们哦&#xff01;经过一年多的发展Henry所在的NewStar公司的业务开始蒸蒸日上各种业务系统也越来越多、运营管理也开始越来越复杂公司所购买的“第一台服务器”逐渐力不从心业务中断时有发生Henry又回到了公司初期一筹莫展的状况中Henry脸上也是愁云…

基于TableStore构建简易海量Topic消息队列

摘要&#xff1a; 前言 消息队列&#xff0c;通常有两种场景&#xff0c;一种是发布者订阅模式&#xff0c;一种是生产者消费者模式。发布者订阅模式&#xff0c;即发布者生产消息放入队列&#xff0c;多个监听的消费者都会收到同一份消息&#xff0c;也就是每个消费者收到的消…

苹果ID登陆第三方有漏洞?硬核!Gartner报告腾讯云数据库增速国内第一;“小米快递”商标注册,这是要入局物流领域?...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 蔚来汽车&#xff08;图片来…

【阿里云MVP月度分享】SaaS服务商如何通过数加平台统计业务流量

摘要&#xff1a; 一、概述 因为自家公司是做B2B类Saas服务的&#xff0c;难免会产生精准计费的问题&#xff0c;所以在通过多套方案的选型及对比以后&#xff0c;我们最终确定了以下的方式进行自有业务平台的流量计算方案。因为涉及到具体的操作&#xff0c;所以阅读本文的前提…

【阿里云 MVP 月度分享】宋亚奇——应用MaxCompute实现电力设备监测数据的批量特征分析...

1 背景知识 电力设备在线监测指在不停电的情况下&#xff0c;对电力设备状况进行连续或周期性地自动监视检测&#xff0c;使用的技术包括&#xff1a;传感器技术、广域通信技术和信息处理技术。电力设备在线监测是实现电力设备状态运行检修管理、提升生产运行管理精益化水平的…

小企业的第一台服务器如何选?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Henry是一家叫做NewStar的初创小企业的兼职IT管理员一天晚间&#xff0c;下班后的Henry正在忙着“吃鸡”突然&#xff0c;一阵急促的电话铃声响了起来原来是在外地出差的同事需要一份重要的文件&#xff0c;但却无法远程访问服务器H…

Linux 中文无法显示或显示方块

文章目录问题现象&#xff1a;字体需求一、查看字体列表1. 安装字体库2. 字体库中添加中文字体3. 进入字体目录复制需求字体4. 创建中文字体目录5. 上传需求字体6. 修改chinese目录的权限7. 安装ttmkfdir8. 修改字体配置文件9. 刷新内存中的字体缓存问题现象&#xff1a; Linu…

阿里云发布混合云数据存储和灾备方案

摘要&#xff1a; 12月7日&#xff0c;2017苏州云栖大会上&#xff0c;阿里云发布全新的混合云数据存储和灾备方案&#xff0c;此次发布的内容包括最新推出的混合云容灾服务HDR和混合云备份服务HBR&#xff0c;以及全面升级的混合云存储阵列CSA2000和CSA3000。 12月7日&#xf…

打通钉钉+WebHook:日志服务告警升级

摘要&#xff1a; 用一个最最常用的案例&#xff08;Nginx日志分析&#xff09;来说明当前使用场景&#xff0c;告警要解决的3个问题&#xff1a;是否有错误&#xff1b;是否有性能问题&#xff1b;是否有流量急跌或暴涨 阿里云日志服务是针对实时数据一站式服务&#xff0c;用…

AliOS Things v1.1.1新特性

摘要&#xff1a; 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;10/20在github上开源v1.1.0版本。经过AliOS Things团队及合作伙伴1个多月的努力&#xff0c;很高兴有些更新可以和大家分享。AliOS Things v1.1.1包含了ESP32支持&#xff0c;AT框架&#xff…

Spark精华问答 | spark性能优化方法

Hadoop再火&#xff0c;火得过Spark吗&#xff1f;今天我们继续关于Spark的精华问答吧。1Q&#xff1a;影响性能的主要因素是什么&#xff1f;A&#xff1a;网络传输开销大硬件资源利用率低同一资源的复用率低2Q&#xff1a;优化的方向有哪些&#xff1f;A&#xff1a;设置数据…

阿里云Elasticsearch的X-Pack:机器学习、安全保障和可视化

摘要&#xff1a; ELK是日志分析领域较为流行的技术选择&#xff0c;不少阿里云用户选择在ECS上搭建开源Elasticsearch。与自建开源Elastisearch相比&#xff0c;阿里云Elasticsearch做了性能优化&#xff0c;支持弹性扩容&#xff0c;并搭载了商业版组件X-Pack&#xff0c;为用…