SpringBoot - 阿里云视频点播的简单使用
视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。
一、阿里云开通视频点播及控制台常用操作
开通地址:阿里云视频点播服务
根据业务需求选择流量计费或是宽带峰值计费。
流程
1、用户要先获取上传授权
2、VoD下发 上传地址和凭证 及 VideoId
3、用户上传视频保存视频ID(VideoId)
4、用户服务端获取播放凭证
5、VoD下发带时效的播放凭证
6、用户服务端将播放凭证下发给客户端完成视频播放
媒资库 - 上传视频
管理视频
配置管理 - 媒资管理配置 - 分类管理
媒体处理配置
封装格式选择hls,则有一个高级参数,可以视频进行加密处理。
上传视频时,通过选择转码模板,可对视频进行加密
配置域名
音视频上传完成后,必须配一个已备案的域名,并完成CNAME绑定。如果要播放加密的视频,需要配置域名。
更多详细操作见官方文档视频点播
二、使用服务端SDK - 可以直接下载demo代码看
1、简介
SDK的方式将API进行了进一步的封装,不用自己创建工具类。我们可以基于服务端SDK编写代码来调用点播API,实现对点播产品和服务的快速操作。
SDK封装了对API的调用请求和响应,避免自行计算较为繁琐的 API签名。支持所有点播服务的API,并提供了相应的示例代码。支持7种开发语言,包括:Java、Python、PHP、.NET、Node.js、Go、C/C++。
2、安装SDK
参考官网:安装SDK
引入Jar包依赖 - 建议参考官网最新
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.3.3</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vod</artifactId><version>2.15.5</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.2</version></dependency>
3、初始化及AccessKey工具类
参考官方文档:初始化
根据文档书写一个初始化帮助类,通过账号AccessKey
来初始化。
这个AccessKey账号,需要添加如下几个权限。
/*** @ClassName InitVodClient* @Description 阿里云视频点播服务 - 初始化* @Author 柳成荫*/
public class InitVodClient {/** 点播服务接入区域 */public static final String REGION_ID = "cn-shanghai";/*** 获取视频播放凭证的Client* @param accessKeyId accessKeyId* @param accessKeySecret accessKeySecret* @return* @throws ClientException*/public static DefaultAcsClient initVodCredentialsClient(String accessKeyId, String accessKeySecret) throws ClientException {DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);return new DefaultAcsClient(profile);}/*** 获取视频播放地址的Client* @param accessKeyId accessKeyId* @param accessKeySecret accessKeySecret* @return* @throws ClientException*/public static IAcsClient initVodUrlClient(String accessKeyId, String accessKeySecret) throws ClientException {DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);return new DefaultAcsClient(profile);}
}
工具类:
@Component
public class ConstantVodUtils implements InitializingBean {// 从配置文件中读取KeyId@Value("${aliyun.vod.file.keyid}")private String keyId;// 从配置文件中读取KeySecret@Value("${aliyun.vod.file.keysecret}")private String keySecret;public static String ACCESS_KEY_SECRET;public static String ACCESS_KEY_ID;@Overridepublic void afterPropertiesSet() throws Exception {ACCESS_KEY_ID = keyId;ACCESS_KEY_SECRET = keySecret;}
}
附-配置文件:
server.port=8081
#阿里云 vod
#不同的服务器,地址不同
aliyun.vod.file.keyid=xxxxx
aliyun.vod.file.keysecret=xxxxxx# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB
4、使用服务端上传视频
参考官网文档:服务端Java上传
安装SDK
使用服务端上传视频,需要先安装SDK,引入相关依赖,但是需要注意aliyun-java-vod-upload-1.4.12.jar
尚未开源,因此需要自己使用Maven命令打入依赖,或者直接在项目中引入该Jar包。
Jar包下载地址:所有依赖的Jar包(SDK)下载地址
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.3.3</version>
</dependency>
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.1.0</version>
</dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vod</artifactId><version>2.15.2</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version>
</dependency>
<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20170516</version>
</dependency>
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.2</version>
</dependency>
上传代码 - 以流的方式
上传视频,返回videoId,方便后面删除、播放。
public String uploadAlyVideo(MultipartFile file) {try{// 视频 - 源文件名String fileName = file.getOriginalFilename();// 标题 - 上传到阿里云的文件标题String title = fileName.substring(0, fileName.lastIndexOf("."));// 上传文件的输入流InputStream inputStream = file.getInputStream();// 实际这个request还可以设置更多参数,更多请见官方文档// https://help.aliyun.com/document_detail/53406.html?spm=a2c4g.11186623.6.1065.5e5d3bd9a6AtYlUploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET,title,fileName,inputStream);UploadVideo uploader = new UploadVideoImpl();UploadStreamResponse response = uploader.uploadStream(request);// VideoIdString videoId = null;if (response.isSuccess()){// 上传成功videoId = response.getVideoId();}else{// 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因// ....videoId = response.getVideoId();}// 将Video的ID返回return videoId;}catch (Exception e){e.printStackTrace();return null;}
}
5、删除阿里云端视频 - 根据videoId
删除一个视频
public String removeAlyVideo(@PathVariable String id) throws Exception {try {DefaultAcsClient client = InitVodClient.initVodCredentialsClient(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET);DeleteVideoRequest request = new DeleteVideoRequest();// 设置视频idrequest.setVideoIds(id);// 删除client.getAcsResponse(request);return "删除成功!";}catch (Exception e){e.printStackTrace();throw new Exception("删除视频失败!可以尝试重新删除文件!");}}
删除多个视频
// 参数是videoId集合
public void removeMoreAlyVideo(List<String> videoList) throws Exception {try{DefaultAcsClient client = InitVodClient.initVodCredentialsClient(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET);DeleteVideoRequest request = new DeleteVideoRequest();// videoList转换成以逗号隔开的字符串String videoIds = StringUtils.join(videoList.toArray(),",");request.setVideoIds(videoIds);client.getAcsResponse(request);}catch (Exception e){e.printStackTrace();throw new Exception("删除视频失败!");}}
视频播放 - 阿里独有凭证方式
阿里云播放器支持通过播放凭证自动换取播放地址进行播放,接入方式更为简单,且安全性更高。播放凭证默认时效为100秒(最大为3000秒),只能用于获取指定视频的播放地址,不能混用或重复使用。如果凭证过期则无法获取播放地址,需要重新获取凭证。
播放视频需要获取凭证,凭证代码如下:
/*** 获取视频播放凭证* @param id 视频id* @return* @throws Exception*/
@GetMapping("/getPlayAuth/{id}")
public GetVideoPlayAuthResponse getPlayAuth(@PathVariable String id) throws Exception {try {// 创建初始化对象DefaultAcsClient client =InitVodClient.initVodCredentialsClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);// 创建获取凭证request和response对象GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();// 向request设置视频idrequest.setVideoId(id);// 调用方法得到凭证// 凭证return client.getAcsResponse(request);}catch (Exception e){throw new Exception("获取凭证失败!");}
}
注意:播放凭证有过期时间,默认值:100秒 。取值范围:100~3000。
设置播放凭证的有效期,在获取播放凭证的测试用例中添加如下代码:
request.setAuthInfoTimeout(200L);
使用凭证
,必须使用阿里独有的播放器。
返回的JSON数据,如图:
前端示例
播放器重要属性:
encryptType:'1',//如果播放加密视频,则需设置encryptType=1,非加密视频无需设置此项
vid: '视频id',
playauth: '视频授权码',
配置播放器参考:阿里云Aliplayer播放器
下面只是一个不完整的小示例 - 建议直接看上面那个链接
HTML页面的示例
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport"content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/><title>Aliplayer Online Settings</title><link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.9.3/skins/default/aliplayer-min.css"/><script type="text/javascript" charset="utf-8"src="https://g.alicdn.com/de/prismplayer/2.9.3/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="player-con"></div>
<script>var player = new Aliplayer({id: 'player-con',vid: '533b83546ad440a9933ce08284651a17', // 视频idplayauth: 'eyJTZWN1cml0eVRva2VuIjoiQ0FJU2h3TjFxNkZ0NUIyeWZTaklyNWIyTzRuanVvcFAvUE9oT21URnNHVTdXOEo4cEt2TXB6ejJJSDVFZW5OcUF1d2F2Lzh5bEd0VDZQZ1psck1xRmM0ZUdoR1lQWm9ydGMwTXJsUDhKcExGc3QySjZyOEpqc1VwLzVrdjVsbXBzdlhKYXNEVkVmbDJFNVhFTWlJUi8wMGU2TC8rY2lyWXBUWEhWYlNDbFo5Z2FQa09Rd0M4ZGtBb0xkeEtKd3hrMnQxNFVtWFdPYVNDUHdMU2htUEJMVXhtdldnR2wyUnp1NHV5M3ZPZDVoZlpwMXI4eE80YXhlTDBQb1AyVjgxbExacGxlc3FwM0k0U2M3YmFnaFpVNGdscjhxbHg3c3BCNVN5Vmt0eVdHVWhKL3phTElvaXQ3TnBqZmlCMGVvUUFQb3BGcC9YNmp2QWF3UExVbTliWXhncGhCOFIrWGo3RFpZYXV4N0d6ZW9XVE84MCthS3p3TmxuVXo5bUxMZU9WaVE0L1ptOEJQdzQ0RUxoSWFGMElVRUJ5RUd5RWNQSDZwd3FTUFZqK0U1TG9pdjltamNCSHFIeno1c2VQS2xTMVJMR1U3RDBWSUpkVWJUbHphVTVJaHphNkx2TlhLRkVjS0FnNVdlMlBNYXgzYlFGRHI1M3ZzVGJiWHpaYjBtcHR1UG56ZDEwMVJuWGh4eUdWR29BQkRDdWV3V0Y5TWJKRGtXNEtQWExtNjZxSXJ0WWZ5d2VzZ3cwc0c0amlFam5nekdVUHBPR3VqbnFoWG5FRjcxUW12alRnNkhYbnpudkNQeGorSVVhRkJNMFFEMkdsa3pKRmx5QklLamNoUWVhYnptMEpMaHdyRTFITmZZTUJPSTJNRm52MWlMdFd5emZ5TDhHaFl2SmQzZXpScGRJelFuckU1SmNBaFdvamppWT0iLCJBdXRoSW5mbyI6IntcIkNJXCI6XCJpSlNKUWxnbmFlR2tKMlpTRTdycGJYWGtsMmFCSHpnOXRqeFJpaE1LSGk3WGRYUXBEY294WkN5b0pTajZ4czRFVDVhM2IveVlNSHN6MUdraGpacXZtSTNvNVc1U1hFYktueGYrdkpKV2VDRT1cIixcIkNhbGxlclwiOlwiV0l2K0x6WXZ4TlFPdy94RjJKS1BSRVNKaUpob28rTzdUOEV1b1lHcE9LWT1cIixcIkV4cGlyZVRpbWVcIjpcIjIwMjEtMDMtMjJUMTQ6MjQ6MzNaXCIsXCJNZWRpYUlkXCI6XCI1MzNiODM1NDZhZDQ0MGE5OTMzY2UwODI4NDY1MWExN1wiLFwiU2lnbmF0dXJlXCI6XCJ0Yk9TcThrTTMwSjVyczdXNk1SSjI5MTVTQVU9XCJ9IiwiVmlkZW9NZXRhIjp7IlN0YXR1cyI6Ik5vcm1hbCIsIlZpZGVvSWQiOiI1MzNiODM1NDZhZDQ0MGE5OTMzY2UwODI4NDY1MWExNyIsIlRpdGxlIjoiV2hhdCBJZiBJIFdhbnQgdG8gTW92ZSBGYXN0ZXIiLCJDb3ZlclVSTCI6Imh0dHA6Ly9vdXRpbi1hZGVhYzZkZjgxNzYxMWVhYTk3NTAwMTYzZTA2MTIzYy5vc3MtY24tc2hhbmdoYWkuYWxpeXVuY3MuY29tLzUzM2I4MzU0NmFkNDQwYTk5MzNjZTA4Mjg0NjUxYTE3L3NuYXBzaG90cy9kNDZhNmY2M2U2YTc0NjUxOWQ4YWU2OTU3NjhjZDIyNC0wMDAwMS5qcGc/RXhwaXJlcz0xNjE2NDI2NTczJk9TU0FjY2Vzc0tleUlkPUxUQUk0RmZENjN6b3FubTZja2lCRmZYWiZTaWduYXR1cmU9aFQlMkZaN2JSQVpPTU5zdmZXOUpyalFSSDdqS0ElM0QiLCJEdXJhdGlvbiI6MTYuMjc2N30sIkFjY2Vzc0tleUlkIjoiU1RTLk5VQ3AzV1dVbksxSjhCdFRlbldNUEtuZ0UiLCJBY2Nlc3NLZXlTZWNyZXQiOiI5Q1VaUFg3cGlkSzk0U0w4UHlaRTJVMkRRM2l5UVU3ZUJvV3U1Uld1Q29IUiIsIlJlZ2lvbiI6ImNuLXNoYW5naGFpIiwiQ3VzdG9tZXJJZCI6MTY5Mzc1NDg5MzMxMzc4NX0===', // 播放凭证encryptType: '1', // 如果播放加密视频,则需设置encryptType=1,非加密视频无需设置此项width: '500px',height: '750px',// 以下可选设置cover: 'http://outin-adeac6df817611eaa97500163e06123c.oss-cn-shanghai.aliyuncs.com/533b83546ad440a9933ce08284651a17/snapshots/d46a6f63e6a746519d8ae695768cd224-00001.jpg?Expires=1616430578&OSSAccessKeyId=LTAI4FfD63zoqnm6ckiBFfXZ&Signature=SRVRohYttwHssD8ZLhukVcxZ8bg%3D', // 封面qualitySort: 'asc', // 清晰度排序mediaType: 'video', // 返回音频还是视频autoplay: true, // 自动播放isLive: false, // 直播rePlay: false, // 循环播放preload: true,controlBarVisibility: 'hover', // 控制条的显示方式:鼠标悬停useH5Prism: true, // 播放器类型:html5}, function (player) {console.log('播放器创建成功')});
</script>
</body>
使用阿里独有的播放器的时候需要引入对应的js和css,但是在vue-cli
项目里。template标签里是无法通过script标签引入的,因此可以在index.html里引入,如图:
这个方法时偶然试探出来的,在网上也看到过其他解决办法,但都太麻烦了。
视频播放 - 获取播放地址
可以参考官方文档,我这里使用的是旧的SDK。
/*** 获取视频播放地址* @param id 视频id* @return* @throws Exception*/
@GetMapping("/getPlayAuthIA/{id}")
public String getUrl(@PathVariable String id) throws Exception {try{IAcsClient client = InitVodClient.initVodUrlClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain("vod.cn-shanghai.aliyuncs.com");request.setSysVersion("2017-03-21");request.setSysAction("GetPlayInfo");request.putQueryParameter("VideoId", id);CommonResponse response = client.getCommonResponse(request);// 返回的是一个JSON字符串,可以将其转换为对应的对象,然后获取URLreturn response.getData();} catch (ClientException e) {e.printStackTrace();throw new Exception("获取视频信息失败!");}
}
返回的JSON数据,如图:
代码Github地址:阿里云视频点播服务JavaDemo
代码Gitee地址:阿里云视频点播服务JavaDemo
SpringBoot - 阿里云视频点播的简单使用相关推荐
- springboot阿里云视频点播服务实现上传视频和删除功能
视频播放参照地址:https://www.cnblogs.com/konglxblog/p/15116534.html 一.开通视频点播云平台 1.选择视频点播服务(收费) 阿里云地址:https:/ ...
- SpringBoot整合阿里云视频点播
文章目录 SpringBoot整合阿里云视频点播 1.准备工作 2.服务端SDK的使用 2.1 导入依赖 2.2 初始化类 2.3 创建读取公共常量的工具类 2.4 获取视频播放地址 2.5 获取视频 ...
- 【springboot】实现阿里云视频点播上传视频
阿里云视频点播 1.开通视频点播服务,选择按流量计费,对于个人项目来说,相当于免费. 2.开启存储管理 3.设置转码模板组.设置加密,如果不加密,别人只要获取到你视频的url就可以免费观看,但进行了加 ...
- springboot整合阿里云视频点播服务Vod——实现视频上传、删除、播放
视频点播(ApsaraVideo VoD,简称VoD)是集视频采集.编辑.上传.媒体资源管理.自动化转码处理(窄带高清™).视频审核分析.分发加速于一体的一站式音视频点播解决方案. 阿里云视频点播服务 ...
- Springboot整合阿里云视频点播服务
目录 一.阿里云视频点播服务 二.开通视频点播云平台 1.搜索视频点播服务 2.开通视频点播 3.选择按使用流量计费 三.使用SDK 1.添加Jar包依赖 2.application.properti ...
- 玩转短视频?守护视频安全?AI智能提速?一分钱体验? 阿里云视频点播大招盘点...
摘要: 前言 随着近几年在线视频市场规模不断扩大,内容不断创新,用户粘性增加,在线视频市场的商业价值不断增长,各垂直行业纷纷引入视频能力,一时之间,视频已经成为了众多移动APP和在线平台沉淀用户的有效 ...
- 阿里云-视频点播服务API调用
视频点播服务 最近公司项目需要用到视频播放及管理,多放选型后准备采用阿里云视频点播服务(公司一直用阿里系) 购买了视频点播存储包和视频点播流量包 首先存储配置 配置管理 -> 媒资管理配置 -& ...
- 阿里云视频点播服务SDK的使用,视频文件上传测试
文章目录 阿里云视频点播技术简介 一.阿里云视频点播技术能力盘点 1.应用场景 2.功能介绍 二.开通视频点播云平台 1.选择视频点播服务 2.开通视频点播 3.选择按使用流量计费 4.资费说明 5. ...
- 使用阿里云视频点播上传视频
目录 前言 一.目的 二.实现步骤 1.准备操作 2.主要使用模块 2.1. 上传音频 2.2. 添加转码设置 3.搭建视频点播环境 3.1.配置Maven仓库 3.2.添加jar依赖 3.3.上传视 ...
最新文章
- 沈向洋谈做研究的那些事儿
- JavaScript 表单编程
- (Unfinished)RNN-循环神经网络之LSTM和GRU-04介绍及推导
- JZOJ 5922. 【NOIP2018模拟10.23】sequence
- vue 获取元素在浏览器的位置_JavaScript获取窗口位置和元素坐标(兼容版)
- java 偏移符号_java中的移位运算符总结
- 玩转GIT系列之【如何配置GIT的用户名/密码/密钥】
- 最近发现系统rabbitmq丢消息比较严重,于是想了些方案来查找原因,给将消息发送方式添加确认机制。 我们在本地模拟了wms发送打标消息的场景. 1. 有事务 2. 先发点对点队列, 再发订
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<散点图>python)
- Xctf练习sql注入--supersqli
- JS 获取链接(url)参数以及锚链接(anchor)结合富ajax的应用(ajax前进/后退的问题)...
- 利用Office Chart 制作柱图(一个柱子)
- .NET处理异常--zt
- 【报告分享】基础设施的新兴趋势-毕马威.pdf(附pdf下载链接)
- zookeeper 分布式锁_详细讲解!从秒杀聊到ZooKeeper分布式锁
- 十岁陌陌更名“挚文集团”的战略新时代|财报解读
- SPSS Statistical 软件的使用
- 编译器的自举及实现过程
- [Vue][transition]Vue中实现类似JQuery中slideUp slideDown的滑动显示隐藏过渡动画效果
- html 自动排序表格,表格排序.html