SpringBoot整合阿里云视频点播的过程详解


Posted in Java/Android onDecember 06, 2021

1.准备工作

首先需要在阿里云开通视频点播服务:

1.首先,进入到阿里云视频点播平台,点击开通服务,选择按使用流量计费即可

2.开通之后点击进入管理控制台即可

SpringBoot整合阿里云视频点播的过程详解

视频点播有什么用?

视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。

2.服务端SDK的使用

官方文档链接:Java SDK

SDK的方式将api进行了进一步的封装,不用自己创建工具类。 我们可以基于服务端SDK编写代码来调用点播API,实现对点播产品和服务的快速操作。

2.1 导入依赖

注意:环境必须是JDK6 及以上版本

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-vod</artifactId>
    <version>2.15.11</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.2 初始化类

根据官方文档示例创建初始化类InitObject

/**
 * @author xppll
 * @date 2021/12/5 13:57
 */
public class InitObject {
    //初始化:需要传入accessKeyId+accessKeySecret
    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;
    }
}

accessKeyIdaccessKeySecret的获取:

这里的初始化方法需要传入账号Access Key信息,可以在阿里云Access Key管理创建主账号Access Key

SpringBoot整合阿里云视频点播的过程详解

点播服务接入区域regionId的获取:

点击点播控制台的存储管理,查看自己所选的区域:

SpringBoot整合阿里云视频点播的过程详解

查看接入区域标识对应API/SDKRegionId参数:

SpringBoot整合阿里云视频点播的过程详解

2.3 创建读取公共常量的工具类

首先在配置文件application.properties添加:

aliyun.vod.file.keyid=LTAI5tGqf41adadaxxAa
aliyun.vod.file.keysecret=zE4nEzmcU7GxxxxmTgWRk0tytJKD

# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB

在创建读取公共常量的工具类ConstantVodUtils

/**
 * @author xppll
 * @date 2021/12/2 19:11
 */
@Component
public class ConstantVodUtils implements InitializingBean {

    @Value("${aliyun.vod.file.keyid}")
    private String keyId;
    @Value("${aliyun.vod.file.keysecret}")
    private String keySecret;

    //定义公共静态常量
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;

    @Override
    public void afterPropertiesSet() throws Exception {
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;
    }
}

2.4 获取视频播放地址

首先手动先在点播控制台上传一个视频用于测试:

SpringBoot整合阿里云视频点播的过程详解

步骤:

  1. 创建初始化对象
  2. 创建获取视频地址requestresponse
  3. request对象里面设置视频id
  4. 用初始化对象里面的方法getAcsResponse,传递request,获取数据
  5. 打印信息

代码如下:

//获取视频播放地址
private static void getPlayUrl() throws ClientException {
    //1.创建初始化对象
    DefaultAcsClient client = InitObject.initVodClient(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET);
    //2.创建获取视频地址request和response
    GetPlayInfoRequest request = new GetPlayInfoRequest();
    GetPlayInfoResponse response = new GetPlayInfoResponse();
    //3.向request对象里面设置视频id
    request.setVideoId("ffe90bfaxxx94d0d722caad");
    //4.调用初始化对象里面的方法,传递request,获取数据
    response = client.getAcsResponse(request);

    List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();
    //播放地址
    for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {
        System.out.print("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n");
    }
    //Base信息
    System.out.print("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n");
}

测试成功:

SpringBoot整合阿里云视频点播的过程详解

2.5 获取视频播放凭证

步骤与获取视频播放地址差不多,区别是获取requestresponse方式不同:

//获取视频播放凭证
private static void getPlayAuth() throws ClientException {
    //1.创建初始化对象
    DefaultAcsClient client = InitObject.initVodClient(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET);
    //2.创建获取视频凭证的request和response
    GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
    GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();
    //3.向request设置视频id
    request.setVideoId("ffe90bfaaadd4xxxx0d722caad");
    //4.调用初始化对象的方法得到凭证
    response = client.getAcsResponse(request);
    //播放凭证
    System.out.println("playauth" + response.getPlayAuth());
}

测试成功:

SpringBoot整合阿里云视频点播的过程详解

2.6 上传视频到阿里云视频点播服务

可以参考:Java上传SDK

需要导入依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-vod</artifactId>
    <version>2.15.11</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>

代码如下:

//上传视频到阿里云视频点播服务
private static void uploadVideo() {
    String accessKeyId = ConstantVodUtils.ACCESS_KEY_ID;
    String accessKeySecret = ConstantVodUtils.ACCESS_KEY_SECRET;
    //上传后视频的标题
    String title = "xpp1";
    //本地文件上传路径
    String fileName = "D:/6 - What If I Want to Move Faster.mp4";
    UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
    //可指定分片上传时每个分片的大小,默认为2M字节 
    request.setPartSize(2 * 1024 * 1024L);
    //可指定分片上传时的并发线程数,默认为1
    request.setTaskNum(1);
    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadVideoResponse response = uploader.uploadVideo(request);


    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
}

测试成功:

SpringBoot整合阿里云视频点播的过程详解

3.springboot项目中实践

创建初始化类:

/**
 * @author xppll
 * @date 2021/12/5 13:57
 */
public class InitVodCilent {
    //初始化:需要传入accessKeyId+accessKeySecret
    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;
    }
}

3.1 上传视频到阿里云

controller层:

@Autowired
private VodService vodService;
//上传视频到阿里云
@PostMapping("uploadAlyiVideo")
public R uploadAlyVideo(MultipartFile file){
    //返回上传视频id
    String videoId=vodService.uploadVideoAly(file);
    //将视频`id`返回给前端
    return R.ok().data("videoId",videoId);
}

service层:

//上传视频到阿里云
@Override
public String uploadVideoAly(MultipartFile file) {
    try {
        //fileName:上传文件原始名称
        String fileName = file.getOriginalFilename();
        //title:上传之后显示名称(例子:01.mp4=>01)
        String title = fileName.substring(0, fileName.lastIndexOf("."));

        //inputStream:上传文件输入流
        InputStream inputStream = file.getInputStream();
        //获得request
        UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET, title, fileName, inputStream);

        UploadVideoImpl uploader = new UploadVideoImpl();
        //上传获得response
        UploadStreamResponse response = uploader.uploadStream(request);

        String videoId = null;
        if (response.isSuccess()) {
            //得到视频id
            videoId = response.getVideoId();
        } else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
            videoId = response.getVideoId();

        }
        return videoId;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

3.2 根据视频id删除视频

controller层:

//根据视频id删除视频
@DeleteMapping("removeAlyVideo/{id}")
public R removeAlyVideo(@PathVariable String id){
    vodService.deleteAlyVideo(id);
    return R.ok();
}

service层:

//根据视频id删除视频
@Override
public void deleteAlyVideo(String id) {
    try {
        //1.初始化对象
        DefaultAcsClient client = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
        //2.创建删除视频的request对象
        DeleteVideoRequest request=new DeleteVideoRequest();
        //3.向request设置视频id
        request.setVideoIds(id);
        //4.调用初始化对象的方法实现删除
        client.getAcsResponse(request);
    } catch (Exception e) {
        e.printStackTrace();
        throw new GuliException(20001,"删除视频失败");
    }
}

到此这篇关于SpringBoot整合阿里云视频点播的文章就介绍到这了,更多相关SpringBoot阿里云视频点播内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
详解Java线程池是如何重复利用空闲线程的
Jun 26 Java/Android
Java反应式框架Reactor中的Mono和Flux
Jul 25 Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 Java/Android
SpringCloud Feign请求头删除修改的操作代码
Mar 20 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
java如何实现获取客户端ip地址的示例代码
Apr 07 Java/Android
Java 关于String字符串原理上的问题
Apr 07 Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
May 20 Java/Android
利用正则表达式匹配浮点型数据
May 30 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 Java/Android
Java实现贪吃蛇游戏的示例代码
Sep 23 Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 #Java/Android
Java中try catch处理异常示例
Dec 06 #Java/Android
SpringDataJPA实体类关系映射配置方式
Dec 06 #Java/Android
Java异常处理try catch的基本用法
Dec 06 #Java/Android
Mybatis是这样防止sql注入的
Dec 06 #Java/Android
Java tomcat手动配置servlet详解
Nov 27 #Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 #Java/Android
You might like
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
js中eval详解
2012/03/30 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
js格式化时间的方法
2015/12/18 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python列表list数组array用法实例解析
2014/10/28 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python操作oracle的完整教程分享
2018/01/30 Python
使用python生成目录树
2018/03/29 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python增加图像对比度的方法
2019/07/12 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
Python如何定义有默认参数的函数
2020/08/10 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
大三毕业自我鉴定
2014/01/15 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript