阿里云-视频点播(ApsaraVideo VoD,简称VoD)是集视频采集、编辑、上传、媒体资源管理、自动化转码处理(窄带高清™)、视频审核分析、分发加速于一体的一站式音视频点播解决方案。

  • 我的视频点播后台链接:https://vod.console.aliyun.com/#/overview
  • 个人消费明细:https://usercenter2.aliyun.com/finance/fund-flow?spm=5176.12818093.ProductAndResource–ali–widget-home-billing-overview.dfinance.3be916d0ACbqBL

一、开通视频点播服务,选择按流量计费

这边建议往账号里充个几毛钱,正常开发基本够用了,用量小于50G是不收费的

阿里云视频点播服务界面,未开通的点击开通,开通后可以查看价格及服务介绍,点击管理控制台,就可以来到我们的一个视频点播管理后台界面了


参考文章:https://blog.csdn.net/qq_33857573/article/details/79564255

二、使用Java代码整合阿里云视频点播服务[参考服务端和上传SDK]

  1. 获取视频播放地址
  2. 获取视频播放凭证
  3. 上传视频到阿里云视频点播服务
  • 注意:加密视频不能直接通过视频存储id查看,而需要绑定域名,数据库存储的是视频id,而不是视频地址(视频加密后,直接访问地址无效,需要获取视频播放签证,然后整合阿里云视频播放器播放)

服务端和客户端SDK介绍

  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.10</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-kms</artifactId><version>2.10.1</version>
</dependency>
  1. 初始化:编写视频点播 初始化对象 [AccessKey初始化] InitObject
package com.xxz.test;import com.aliyun.oss.ClientException;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;/*** 视频点播 初始化对象 [AccessKey初始化]*/
public class InitObject {//填入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;}}
  1. Vod视频点播相关测试TestVod.java
package com.xxz.test;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;import java.util.List;/***  Vod视频点播相关测试*/
public class TestVod {// 测试 阿里云 存储视频 id :b45893008b5871ed808f6723a78f0102public static void main(String[] args) throws Exception {//1.根据视频id获取视频播放地址//(1)创建初始化对象  LTAI5tHGkW8GcwhFypERMW59  KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0DefaultAcsClient client = InitObject.initVodClient("LTAI5tHGkW8GcwhFypERMW59", "KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0");//(2)创建获取视频地址request和responseGetPlayInfoRequest request = new GetPlayInfoRequest();GetPlayInfoResponse response = new GetPlayInfoResponse();//(3)向request对象里面设置视频idrequest.setVideoId("b45893008b5871ed808f6723a78f0102");//(4)调用初始化对象里面的方法,传递request,获取数据response = client.getAcsResponse(request);//获取路径集合List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();//播放地址for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {System.out.println("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n");}//Base信息System.out.println("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n");}}

报错 “Forbidden.RAM-You are not authorized to operate this resource, or this API does not support RAM“

  • 解决方案链接:https://blog.csdn.net/KiddoKid/article/details/122993446

加密视频查看方式(获取签证、整合阿里云播放器才可播放)

package com.xxz.test;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.vod.model.v20170321.*;
import org.apache.commons.collections4.Get;import java.util.List;/***  Vod视频点播相关测试*/
public class TestVod {public static void main(String[] args) throws Exception{//测试非加密视频notSecretVideoShow();//测试加密视频hasSecretVideoShow();}// 测试 阿里云 存储视频 id :b45893008b5871ed808f6723a78f0102 [非加密视频]public static void notSecretVideoShow() throws Exception {//1.根据视频id获取视频播放地址//(1)创建初始化对象  LTAI5tHGkW8GcwhFypERMW59  KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0DefaultAcsClient client = InitObject.initVodClient("LTAI5tHGkW8GcwhFypERMW59", "KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0");//(2)创建获取视频地址request和responseGetPlayInfoRequest request = new GetPlayInfoRequest();GetPlayInfoResponse response = new GetPlayInfoResponse();//(3)向request对象里面设置视频idrequest.setVideoId("b45893008b5871ed808f6723a78f0102");//(4)调用初始化对象里面的方法,传递request,获取数据response = client.getAcsResponse(request);//获取路径集合List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();//播放地址for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {System.out.println("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n");}//Base信息System.out.println("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n");}// 测试 阿里云 存储视频 id :b45893008b5871ed808f6723a78f0102 [加密视频]public static void hasSecretVideoShow() throws Exception {//1.根据视频id获取视频播放地址//(1)创建初始化对象  LTAI5tHGkW8GcwhFypERMW59  KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0DefaultAcsClient client = InitObject.initVodClient("LTAI5tHGkW8GcwhFypERMW59", "KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0");//(2)创建获取视频地址request和responseGetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();//(3)向request对象里面设置视频idrequest.setVideoId("b45893008b5871ed808f6723a78f0102");//(4)调用初始化对象里面的方法,传递request,获取数据response = client.getAcsResponse(request);//Auth签证信息System.out.println("PlayAuth: " + response.getPlayAuth());}}

进入Java SDK-媒体资源管理,定位到删除视频目录页中DeleteVideo


视频点播-文件上传SDK(客户端上传、服务端上传)

  1. 安装上传SDK(aliyun-java-vod-upload-1…4.9.jar)

  1. 下载aliyun-java-vod-upload-1…4.9.jar

  1. 解压后定位到lib目录中,地址栏输入cmd进入控制台,输入maven安装指令
  • 指令:mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.15 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.15.jar
  1. simple目录包含实现上传案例代码,直接使用即可


  1. 上传测试UploadVod.java
package com.xxz.test;import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadVideoRequest;
import com.aliyun.vod.upload.resp.UploadVideoResponse;/*** 上传案例代码*/
public class UploadVod {public static void main(String[] args) {String accessKeyId = "LTAI5tHGkW8GcwhFypERMW59";String accessKeySecret = "KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0";//上传之后文件名称String title = "6 - What If Want to Move Faster - upload by sdk";//本地文件路径String fileName = "E:\\1672744612359.mp4";//调用上传视频方法testUploadVideo(accessKeyId, accessKeySecret, title, fileName);}/*** 本地文件上传接口** @param accessKeyId* @param accessKeySecret* @param title* @param fileName*/private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) {//通过必要参数 获取视频上传请求对象UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);/* 可指定分片上传时每个分片的大小,默认为2M字节 */request.setPartSize(2 * 1024 * 1024L);/* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/request.setTaskNum(1);//获取上传 工具类UploadVideoImpl uploader = new UploadVideoImpl();UploadVideoResponse response = uploader.uploadVideo(request);System.out.print("RequestId=" + response.getRequestId() + "\n");  //请求视频点播服务的请求IDif (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");}}}
  1. application.yml配置文件
#服务端口
server.port=8003
#服务名
spring.application.name=service-vod#环境设置:dev、test、prod
spring.profiles.active=dev#阿里云 OSS
#不同的服务器,地址不同
aliyun.vod.file.keyid=LTAI5tHGkW8GcwhFypERMW59
aliyun.vod.file.keysecret=KUNfdGLjxkyvCVYS7iL7ovSIQxIJG0#报错 The field file exceeds its maximum permitted size of 1048576 bytes.
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
  1. 视频点播启动类
package com.xxz.vod;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;/*** 阿里云 视频点播 vod 启动类*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = {"com.xxz"})
public class VodApplicatioin {public static void main(String[] args) {SpringApplication.run(VodApplicatioin.class, args);}}
  1. 视频点播-上传视频:常量类ConstantVodUtils.java
package com.xxz.vod.utils;import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/***  视频点播 - 视频上传 常量工具类 InitialzingBean */
@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 END_POIND;public static String ACCESS_KEY_ID;/*** 当容器加载完之后执行* @throws Exception*/@Overridepublic void afterPropertiesSet() throws Exception {END_POIND = keyid;ACCESS_KEY_ID = keysecret;}
}
  1. 视频点播-上传视频:业务类VodServiceImpl.java - > uploadAliyunVideo(){}
package com.xxz.vod.service.impl;import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.req.UploadURLStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import com.aliyun.vod.upload.resp.UploadURLStreamResponse;
import com.xxz.vod.service.VodService;
import com.xxz.vod.utils.ConstantVodUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;/*** 视频点播-上传视频  业务类*/
@Service
public class VodServiceImpl implements VodService {/***  //上传视频* @param file* @return*/@Overridepublic String uploadAliyunVideo(MultipartFile file) {try{//accessKeyId  ,  accessKeySecret//fileName: 上传文件原始名称String fileName = file.getOriginalFilename();//title: 上传之后显示String title = fileName.substring(0, fileName.lastIndexOf("."));//inputStream: 上传文件输入流InputStream inputStream = file.getInputStream();UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.END_POIND,  title, fileName, inputStream);/* 是否显示水印(可选),指定模板组ID时,根据模板组配置确定是否显示水印*/UploadVideoImpl uploader = new UploadVideoImpl();UploadStreamResponse response = uploader.uploadStream(request);String videoId = null;if (response.isSuccess()) {videoId = response.getVideoId();} else {/* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */videoId = response.getVideoId();}return videoId;}catch (Exception e){return null;}}
}
  1. 视频点播-上传视频:控制器VodController.java
package com.xxz.vod.controller;import com.xxz.util.Result;
import com.xxz.vod.service.VodService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@RestController
@RequestMapping("/edu/video")
@CrossOrigin //跨域
public class VodController {@Autowiredprivate VodService vodService;//上传视频到 阿里云@PostMapping("uploadAliyunVideo")public Result uploadAliyunVideo(MultipartFile file){//上传视频String videoId = vodService.uploadAliyunVideo(file);return Result.ok().data("videoId", videoId);}}
  1. SpringBoot 项目在文件上传时出现了 报错Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
    的错误,显示文件的大小超出了允许的范围。原因是 SpringBoot内嵌的 tomcat 默认的所有上传的文件大小为 1MB,超出这个大小就会报错,解决这个问题需要在application.properties配置文件更改以下两个默认。
  • multipart.maxFileSize
  • multipart.maxRequestSize
  • 解决方案呢,要根据SpringBoot的版本来确定,以下列举出了几种情况,可以根据自己项目的SpringBoot版本来对应:把默认的文件的大小限制修改一下即可。以下是我项目中的用到的文件大小限制,改成50MB即可满足我的需求了。

SpringBoot 1.3.x 之前

multipart.maxFileSize=50Mb
multipart.maxRequestSize=50Mb

SpringBoot 1.4.x

spring.http.multipart.maxFileSize=50Mb
spring.http.multipart.maxRequestSize=50Mb

SpringBoot 2.0.x之后

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

Swagger测试结果

  1. http状态码413,并提示Request Entity Too Large的解决办法链接:https://www.cnblogs.com/lcword/p/16067649.html


  1. 删除阿里云-视频点播SDK(编写业务方法)
  • 创建客户端
package com.xxz.vod.utils;import com.aliyun.oss.ClientException;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;/*** 视频点播 初始化对象 [AccessKey初始化... 初始化操作视频点播 目录  客户端]*/
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;}
}
  • 阿里云视频点播-常量类
package com.xxz.vod.utils;import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/***  视频点播 - 视频上传 常量工具类*/
@Component
public class ConstantVodUtils implements InitializingBean {@Value(value = "${aliyun.vod.file.keyid}")private String keyid;@Value("${aliyun.vod.file.keysecret}")private String keysecret;public static String END_POIND;public static String ACCESS_KEY_ID;/*** 当容器加载完之后执行* @throws Exception*/@Overridepublic void afterPropertiesSet() throws Exception {END_POIND =  keysecret;ACCESS_KEY_ID = keyid;}
}
  • 阿里云视频点播-删除视频 > 控制器方法
package com.xxz.vod.controller;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest;
import com.xxz.base.exception.GuiguExcetion;
import com.xxz.util.Result;
import com.xxz.vod.service.VodService;
import com.xxz.vod.utils.ConstantVodUtils;
import com.xxz.vod.utils.InitVodClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;@RestController
@RequestMapping("/vod/video")
@CrossOrigin //跨域
public class VodController {@Autowiredprivate VodService vodService;//上传视频到 阿里云@PostMapping("uploadAliyunVideo")public Result uploadAliyunVideo(MultipartFile file){//上传视频String videoId = vodService.uploadAliyunVideo(file);return Result.ok().data("videoId", videoId);}@DeleteMapping("removeAliyunVideo/{videoId}")public Result removeAliyunVideo(@PathVariable String videoId){try{//初始化对象DefaultAcsClient client = InitVodClient.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_ID);//创建删除视频request对象DeleteVideoRequest request = new DeleteVideoRequest();//向request设置视频idrequest.setVideoIds(videoId);//调用初始化对象的方法实现删除client.getAcsResponse(request);}catch (Exception e){e.printStackTrace();//抛出异常throw new GuiguExcetion(20001, "删除视频失败");}return Result.ok();}}

阿里云视频点播——企业服务相关推荐

  1. 阿里云视频点播(VOD)服务的视频上传JAVA代码开发(上传)

    一. 设计需求 使用阿里云视频点播服务对客户端上传的视频进行转码处理, 并存储到本地. 支持海外用户的大视频文件上传. 解决海外上传的有无问题. 二. 实现思路 客户端向服务端请求凭证, 获取上传地址 ...

  2. 阿里云视频点播微服务

    文章目录 3. 视频点播微服务 3.1 创建vod服务(需更新) 3.2 vod分类管理 3.2.1 前置技术:定时器 schedule 3.2.2 后端基本结构 3.2.3 定时添加 3.2.4 查 ...

  3. 阿里云视频点播+项目实战

    目录 整合阿里云Vod实现视频上传 整合阿里云视频播放器 前端方面 场景: 功能十分多,可以对视频进行加密,防止盗链,并且节省了资源,覆盖了加速节点,安全系数高 流程: 用户获取上传授权. VoD下发 ...

  4. 谷粒学院 —— 10、课程管理:整合阿里云视频点播

    目录 1.创建模块 1.1.引入视频点播所需依赖 1.2.application.properties 1.3.启动类 2.实现视频上传 2.1.后端 2.1.1.创建常量类 2.1.2.上传视频到阿 ...

  5. 阿里云视频点播服务SDK的使用,视频文件上传测试

    文章目录 阿里云视频点播技术简介 一.阿里云视频点播技术能力盘点 1.应用场景 2.功能介绍 二.开通视频点播云平台 1.选择视频点播服务 2.开通视频点播 3.选择按使用流量计费 4.资费说明 5. ...

  6. 阿里云视频点播服务(上传,删除,获取播放地址,获取播放凭证)

    一.简介 视频点播(ApsaraVideo for VoD)是集音视频采集.编辑.上传.自动化转码处理.媒体资源管理.分发加速于一体的一站式音视频点播解决方案. 1.应用场景 音视频网站:无论是初创视 ...

  7. 第三方服务-阿里云视频点播服务java服务端SDK相关代码

    视频点播服务中的视频,也依然是存在OSS上的,但是区别是什么呢?下面关于区别的描述摘自阿里云官网 视频的点播场景涉及视频的存储.转码.分发加速几个环节,那么: 视频点播是集视频音视频采集.编辑.上传. ...

  8. 阿里云-视频点播服务API调用

    视频点播服务 最近公司项目需要用到视频播放及管理,多放选型后准备采用阿里云视频点播服务(公司一直用阿里系) 购买了视频点播存储包和视频点播流量包 首先存储配置 配置管理 -> 媒资管理配置 -& ...

  9. 阿里云视频点播服务的开通和使用

    阿里云视频点播服务的开通和使用 文章目录 阿里云视频点播服务的开通和使用 前言:什么是阿里云视频点播服务? 一.开通阿里云视频点播服务 二.控制台基本操作 三.JAVA JDK操作阿里云视频点播服务 ...

最新文章

  1. 更新view是可以update到表的
  2. android:shareduserid获取资源,关于 android:sharedUserId=android.uid.system
  3. android简单的自定义按钮,Android 自定义button简单示例
  4. flask处理cookie
  5. 20个MySQL高性能架构设计原则(收藏版)
  6. Python包和模块的区别
  7. android获取手机号ip地址,手机ip查询我的地址定位(网站如何抓取用户手机号和IP地址)...
  8. SPSS描述性统计分析
  9. 计算机启动的基本指令,电脑启动项命令大全【详解】
  10. Ubuntu解压安装包及make命令相关操作(针对make: *** [btest] Error 127以及make: *** [btest] Error 1)
  11. 淘宝超时确认收货 是 如何实现?
  12. 基于卫星测深的牙买加沿岸水深测量
  13. Aurelia历险记:创建自定义PDF查看器
  14. ESP32WiFi-AP 模式创建 wifi 热点
  15. 如何在Win10家庭版上永久、免费、快速拥有一台虚拟机?
  16. 各种进制(二、八、十、十六)相互转换带图详解
  17. 熹妃q传服务器维护时间,《熹妃Q传》5月28日版本更新延迟公告
  18. internet 采用什么协议通信
  19. 判断一个链表中是否有环
  20. Word中公式编辑器mathtype中符号显示异常

热门文章

  1. shell 浮点数运算bc
  2. 大学数学中的1和0、求根公式相关和待定系数法
  3. 电脑密码忘记了? 使用U盘启动破解电脑密码
  4. python 爬虫——爬取百度文库VIP内容
  5. 彻底解决SysFader:iexplorer.exe 应用程序错误
  6. 向量乘以其转置的意义
  7. STC15系列单片机SPI使用教程(一)
  8. 如何管理php常驻进程,一看就懂系列之 如何实现与控制php常驻进程-Go语言中文社区...
  9. mysql8.0 本地克隆数据
  10. android 开源 + 一些素材网站