springboot整合阿里云视频点播服务Vod——实现视频上传、删除、播放
视频点播(ApsaraVideo VoD,简称VoD)是集视频采集、编辑、上传、媒体资源管理、自动化转码处理(窄带高清™)、视频审核分析、分发加速于一体的一站式音视频点播解决方案。
阿里云视频点播服务技术文档教程
1、引入依赖
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.0</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vod</artifactId><version>2.16.5</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-kms</artifactId><version>2.10.1</version>
</dependency>
2、初始化配置
#你自己的阿里云keyId
aliyun.vod.file.keyid=xxxxxxxxx
#你自己的阿里云密钥
aliyun.vod.file.keysecret=xxxxxxxxxx#max-file-size 是单个文件大小
#max-request-size 是设置总上传的数据大小
spring.servlet.multipart.max-file-size=1024MB
spring.servlet.multipart.max-request-size=1024MB
3、工具包
3.1、常量类
package com.zhmsky.vod.utils;import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** @author zhmsky* @date 2022/4/29 17:22*/
@Component
public class VodConstant implements InitializingBean {@Value("${aliyun.vod.file.keyid}")private String accessKeyId;@Value("${aliyun.vod.file.keysecret}")private String accessKeySecret;public static String ACCESS_KEYID;public static String ACCESS_KEYSECRET;//在属性初始化后自动执行@Overridepublic void afterPropertiesSet() throws Exception {ACCESS_KEYID = accessKeyId;ACCESS_KEYSECRET = accessKeySecret;}
}
3.2、AccessKey初始化
package com.zhmsky.vod.utils;import com.aliyun.oss.ClientException;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;/*** @author zhmsky* @date 2022/4/28 16:25*/
public class InitVodClient {//填入AccessKey信息public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {String regionId = "cn-shanghai"; // 点播服务接入地域DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);DefaultAcsClient client = new DefaultAcsClient(profile);return client;}
}
4、阿里云视频点播服务(Vod)实现视频上传、删除
4.1、service(
package com.zhmsky.vod.service;import org.springframework.web.multipart.MultipartFile;import java.util.List;/*** @author zhmsky* @date 2022/4/29 16:58*/
public interface VodService {/*** 上传本地文件至阿里云* @return*/String uploadLocalVideoToAliYun(MultipartFile file);/*** 根据视频id删除阿里云视频* @param videoId*/boolean removeVideo(String videoId);/*** 批量删除阿里云视频* @param videoIdList*/boolean removeBatchVideo(List<String> videoIdList);
}
4.2 impl
package com.zhmsky.vod.service.impl;import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest;
import com.zhmsky.exception.MyException;
import com.zhmsky.vod.service.VodService;
import com.zhmsky.vod.utils.InitVodClient;
import com.zhmsky.vod.utils.VodConstant;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** @author zhmsky* @date 2022/4/29 16:59*/
@Service
public class VodServiceImpl implements VodService {/*** 上传本地视频文件至阿里云* @return videoId 视频id*/@Overridepublic String uploadLocalVideoToAliYun(MultipartFile file) {String accessKeyId= VodConstant.ACCESS_KEYID;String accessKeySecret=VodConstant.ACCESS_KEYSECRET;//获取文件原始名称String fileName=file.getOriginalFilename();String title=fileName.substring(0,fileName.lastIndexOf("."));InputStream inputStream = null;try {inputStream = file.getInputStream();} catch (IOException e) {e.printStackTrace();}UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);UploadVideoImpl uploader = new UploadVideoImpl();UploadStreamResponse response = uploader.uploadStream(request);String videoId="";if (response.isSuccess()) {videoId=response.getVideoId();} else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因videoId=response.getVideoId();}return videoId;}/*** @description 根据视频id删除阿里云视频* @param videoId*/@Overridepublic boolean removeVideo(String videoId) {//初始化对象DefaultAcsClient client = InitVodClient.initVodClient(VodConstant.ACCESS_KEYID, VodConstant.ACCESS_KEYSECRET);//创建删除视频的request对象DeleteVideoRequest request = new DeleteVideoRequest();//向request对象中设置视频idrequest.setVideoIds(videoId);//调用初始化对象的方法实现删除try {client.getAcsResponse(request);return true;} catch (ClientException e) {e.printStackTrace();return false;}}/*** 批量删除阿里云视频* @param videoIdList*/@Overridepublic boolean removeBatchVideo(List<String> videoIdList) {String videoList = StringUtils.join(videoIdList.toArray(), ",");//初始化对象DefaultAcsClient client = InitVodClient.initVodClient(VodConstant.ACCESS_KEYID, VodConstant.ACCESS_KEYSECRET);//创建删除视频的request对象DeleteVideoRequest request = new DeleteVideoRequest();//向request对象中设置视频idrequest.setVideoIds(videoList);//调用初始化对象的方法实现删除try {client.getAcsResponse(request);return true;} catch (ClientException e) {e.printStackTrace();return false;}}
}
4.3、controller
package com.zhmsky.vod.controller;import com.zhmsky.result.Result;
import com.zhmsky.result.ResultUtil;
import com.zhmsky.vod.service.VodService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.util.List;/*** @author zhmsky* @date 2022/4/29 16:56*/
@RestController
@RequestMapping("/eduVod/video")
@CrossOrigin
@Api("阿里云视频点播服务")
public class VodController {@Autowiredprivate VodService vodService;@PostMapping("/upload")@ApiOperation("上传本地文件到阿里云")public Result<String> uploadLocalVideo(MultipartFile file){String videoId = vodService.uploadLocalVideoToAliYun(file);return new ResultUtil<String>().setData(videoId);}@DeleteMapping("/deleteVideo/{videoId}")@ApiOperation("删除阿里云视频——单个")public Result<String> deleteVideoForAliYun(@PathVariable String videoId){boolean b = vodService.removeVideo(videoId);if(b){return new ResultUtil<String>().setSuccessMsg("视频删除成功!");}else{return new ResultUtil<String>().setErrorMsg("视频删除失败!");}}@ApiOperation("批量删除阿里云视频")@DeleteMapping("/deleteBatchVideo")public Result<String> deleteBatchVideo(@RequestParam("videoIdList") List<String> videoIdList){boolean b = vodService.removeBatchVideo(videoIdList);if(b){return new ResultUtil<String>().setSuccessMsg("批量删除成功!");}else {return new ResultUtil<String>().setErrorMsg("批量删除失败!");}}
}
4.4、前端html
<el-form-item label="上传视频"><el-upload<!-- 上传成功过后执行 -->:on-success="handleVodUploadSuccess"<!-- 删除成功过后执行 -->:on-remove="handleVodRemove":before-remove="beforeVodRemove"<!-- 文件超过大小后执行 -->:on-exceed="handleUploadExceed":file-list="fileList":action="BASE_API + '/eduVod/video/upload'":limit="1"class="upload-demo"><el-button size="small" type="primary">上传视频</el-button><el-tooltip placement="right-end"><div slot="content">最大支持1G,<br />支持3GP、ASF、AVI、DAT、DV、FLV、F4V、<br />GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、<br />MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、<br />SWF、TS、VOB、WMV、WEBM 等视频格式上传</div><i class="el-icon-question" /></el-tooltip></el-upload></el-form-item>
5、阿里云视频点播服务实现在线视频播放
5.1、service
/*** 根据视频id获取视频的播放凭证* @param videoId* @return*/String getPlayRule(String videoId);
5.2、impl
/*** 根据视频id获取视频的播放凭证* @param videoId* @return 视频播放凭证*/@Overridepublic String getPlayRule(String videoId) {//创建对象DefaultAcsClient client = InitVodClient.initVodClient(VodConstant.ACCESS_KEYID, VodConstant.ACCESS_KEYSECRET);//获取视频凭证的request和response对象GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();//向request设置videoIdrequest.setVideoId(videoId);//调用初始化对象方法得到凭证try {response=client.getAcsResponse(request);} catch (ClientException e) {e.printStackTrace();}return response.getPlayAuth();}
5.3 controller
@GetMapping("/getAliPlayRule/{videoId}")@ApiOperation("根据视频id获取视频的播放凭证")public Result<String> getAliPlayRule(@PathVariable String videoId){String playRule = vodService.getPlayRule(videoId);return new ResultUtil<String>().setData(playRule);}
5.4、前端
<template><div><!-- 阿里云视频播放器样式 --><link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css" ><!-- 阿里云视频播放器脚本 --><script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.8.1/aliplayer-min.js" /><!-- 定义播放器dom --><div id="J_prismPlayer" class="prism-player" /></div>
</template>
<script>
// 视频播放后端接口引入
import vedioApi from '@/api/vedio'
export default {//应用video布局layout: 'video',//异步方式调用asyncData({ params, error }) {// params.vedioId等价于this.$route.params.vedioId(获取路径变量)return vedioApi.getPlayRule(params.vedioId).then(response => {return {playAuth: response.data.result,vid:params.vedioId}})},mounted(){//页面渲染之后new Aliplayer({id: 'J_prismPlayer',vid: this.vid, // 视频idplayauth: this.playAuth, // 播放凭证encryptType: '1', // 如果播放加密视频,则需设置encryptType=1,非加密视频无需设置此项width: '100%',height: '500px',// 以下可选设置cover: 'http://guli.shop/photo/banner/1525939573202.jpg', // 设置视频封面qualitySort: 'asc', // 清晰度排序mediaType: 'video', // 返回音频还是视频autoplay: false, // 自动播放isLive: false, // 直播rePlay: false, // 循环播放preload: true,controlBarVisibility: 'hover', // 控制条的显示方式:鼠标悬停useH5Prism: true, // 播放器类型:html5}, function(player) {console.log('播放器创建成功')})}
}
</script>
集成文档
在线配置
功能展示(包括广告、弹幕等)
springboot整合阿里云视频点播服务Vod——实现视频上传、删除、播放相关推荐
- Springboot整合阿里云视频点播服务
目录 一.阿里云视频点播服务 二.开通视频点播云平台 1.搜索视频点播服务 2.开通视频点播 3.选择按使用流量计费 三.使用SDK 1.添加Jar包依赖 2.application.properti ...
- SpringBoot整合阿里云视频点播
文章目录 SpringBoot整合阿里云视频点播 1.准备工作 2.服务端SDK的使用 2.1 导入依赖 2.2 初始化类 2.3 创建读取公共常量的工具类 2.4 获取视频播放地址 2.5 获取视频 ...
- 阿里云视频点播服务Vod工具类——实现视频上传、删除、播放
阿里云视频点播服务Vod工具类--实现视频上传.删除.播放 阿里云视频点播服务Vod工具类 maven依赖 工具类实现 工具类的测试 获取视频 1. 获取单个视频的播放地址和ID: 2. 获取所有视频 ...
- 阿里云视频点播-URL批量拉取上传(调整为多个视频上传)
阿里云视频点播之URL批量拉取上传(调整为多个视频上传) 项目引入阿里云视频点播PHP-SDK URL批量拉取上传(调整为多个视频上传) 项目引入阿里云视频点播PHP-SDK 背景:2021年乐视云的 ...
- 阿里云视频点播(VOD)aliplayer获取视频播放状态(播放或暂停)
.getStatus()的方法可以获取视频播放状态 获取播放器状态,包含的值: 'init' 'ready' 'loading' 'play' 'pause' 'playing' 'waiting' ...
- easyswoole上传视频到阿里云(继承上面easyswoole视频上传大小限制取消代码)
参考网址 https://help.aliyun.com/document_detail/61388.html 在easuswoole根目录下面的ini文件夹下,新建aliyun.ini access ...
- 阿里云oss服务操作文件,上传下载生成链接删除通知等
目录 oss关键字解读 pom.xml引入jar包 第1,后台提供上传文件的接口,把文件上传到oss服务器
- Spring Boot集成阿里云视频点播服务的过程记录
阿里云视频点播 效果预览 视频点播 视频点播概述 功能 优势 流程 环境准备 开通视频点播 创建RAM用户并授权 上传SDK 上传流程 下载上传SDK 安装上传SDK 集成Java上传SDK 异常说明 ...
- SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)
前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...
最新文章
- AFNetworking post请求遇到问题解决过程
- LeetCode Linked List Cycle II
- boost::fusion::for_each用法的测试程序
- C++ Function语意学
- 评审恩仇录——我为什么愿意执行代码评审
- [Swift]多维数组的表示和存储:N维数组映射到一维数组(一一对应)!
- 区块链技术指南笔记(二):区块链技术
- Javascript--节点类型
- linux nvidia驱动安装rpm,Fedora 下安装NVIDIA显卡驱动
- 【ES】es 冻结的索引如何查询
- Netty-2-服务端创建多个handler
- 使用记事本编写xml文件保存出现异常原因
- 国内随时接收发送谷歌邮箱
- mysql 汉字笔画排序规则_SQL Server与MySQL中排序规则与字符集相关知识的一点总结...
- 实现调用阿里云API第二章——API调用实战(全球IP地址归属地查询)
- 使用PEAP实现802.1X
- [web效果实现-3] 拼音排序通讯录实现
- ML - Regression
- 数字金字塔php,数字金字塔
- win10配置python虚拟环境的路径