阿里云视频点播——企业服务
阿里云-视频点播(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]
- 获取视频播放地址
- 获取视频播放凭证
- 上传视频到阿里云视频点播服务
- 注意:加密视频不能直接通过视频存储id查看,而需要绑定域名,数据库存储的是视频id,而不是视频地址(视频加密后,直接访问地址无效,需要获取视频播放签证,然后整合阿里云视频播放器播放)
服务端和客户端SDK介绍
- 引入相关依赖
<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>
- 初始化:编写视频点播 初始化对象 [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;}}
- 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(客户端上传、服务端上传)
- 安装上传SDK(aliyun-java-vod-upload-1…4.9.jar)
- 下载aliyun-java-vod-upload-1…4.9.jar
- 解压后定位到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
- simple目录包含实现上传案例代码,直接使用即可
- 上传测试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");}}}
- 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
- 视频点播启动类
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);}}
- 视频点播-上传视频:常量类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;}
}
- 视频点播-上传视频:业务类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;}}
}
- 视频点播-上传视频:控制器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);}}
- 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测试结果
- http状态码413,并提示Request Entity Too Large的解决办法链接:https://www.cnblogs.com/lcword/p/16067649.html
- 删除阿里云-视频点播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();}}
阿里云视频点播——企业服务相关推荐
- 阿里云视频点播(VOD)服务的视频上传JAVA代码开发(上传)
一. 设计需求 使用阿里云视频点播服务对客户端上传的视频进行转码处理, 并存储到本地. 支持海外用户的大视频文件上传. 解决海外上传的有无问题. 二. 实现思路 客户端向服务端请求凭证, 获取上传地址 ...
- 阿里云视频点播微服务
文章目录 3. 视频点播微服务 3.1 创建vod服务(需更新) 3.2 vod分类管理 3.2.1 前置技术:定时器 schedule 3.2.2 后端基本结构 3.2.3 定时添加 3.2.4 查 ...
- 阿里云视频点播+项目实战
目录 整合阿里云Vod实现视频上传 整合阿里云视频播放器 前端方面 场景: 功能十分多,可以对视频进行加密,防止盗链,并且节省了资源,覆盖了加速节点,安全系数高 流程: 用户获取上传授权. VoD下发 ...
- 谷粒学院 —— 10、课程管理:整合阿里云视频点播
目录 1.创建模块 1.1.引入视频点播所需依赖 1.2.application.properties 1.3.启动类 2.实现视频上传 2.1.后端 2.1.1.创建常量类 2.1.2.上传视频到阿 ...
- 阿里云视频点播服务SDK的使用,视频文件上传测试
文章目录 阿里云视频点播技术简介 一.阿里云视频点播技术能力盘点 1.应用场景 2.功能介绍 二.开通视频点播云平台 1.选择视频点播服务 2.开通视频点播 3.选择按使用流量计费 4.资费说明 5. ...
- 阿里云视频点播服务(上传,删除,获取播放地址,获取播放凭证)
一.简介 视频点播(ApsaraVideo for VoD)是集音视频采集.编辑.上传.自动化转码处理.媒体资源管理.分发加速于一体的一站式音视频点播解决方案. 1.应用场景 音视频网站:无论是初创视 ...
- 第三方服务-阿里云视频点播服务java服务端SDK相关代码
视频点播服务中的视频,也依然是存在OSS上的,但是区别是什么呢?下面关于区别的描述摘自阿里云官网 视频的点播场景涉及视频的存储.转码.分发加速几个环节,那么: 视频点播是集视频音视频采集.编辑.上传. ...
- 阿里云-视频点播服务API调用
视频点播服务 最近公司项目需要用到视频播放及管理,多放选型后准备采用阿里云视频点播服务(公司一直用阿里系) 购买了视频点播存储包和视频点播流量包 首先存储配置 配置管理 -> 媒资管理配置 -& ...
- 阿里云视频点播服务的开通和使用
阿里云视频点播服务的开通和使用 文章目录 阿里云视频点播服务的开通和使用 前言:什么是阿里云视频点播服务? 一.开通阿里云视频点播服务 二.控制台基本操作 三.JAVA JDK操作阿里云视频点播服务 ...
最新文章
- 更新view是可以update到表的
- android:shareduserid获取资源,关于 android:sharedUserId=android.uid.system
- android简单的自定义按钮,Android 自定义button简单示例
- flask处理cookie
- 20个MySQL高性能架构设计原则(收藏版)
- Python包和模块的区别
- android获取手机号ip地址,手机ip查询我的地址定位(网站如何抓取用户手机号和IP地址)...
- SPSS描述性统计分析
- 计算机启动的基本指令,电脑启动项命令大全【详解】
- Ubuntu解压安装包及make命令相关操作(针对make: *** [btest] Error 127以及make: *** [btest] Error 1)
- 淘宝超时确认收货 是 如何实现?
- 基于卫星测深的牙买加沿岸水深测量
- Aurelia历险记:创建自定义PDF查看器
- ESP32WiFi-AP 模式创建 wifi 热点
- 如何在Win10家庭版上永久、免费、快速拥有一台虚拟机?
- 各种进制(二、八、十、十六)相互转换带图详解
- 熹妃q传服务器维护时间,《熹妃Q传》5月28日版本更新延迟公告
- internet 采用什么协议通信
- 判断一个链表中是否有环
- Word中公式编辑器mathtype中符号显示异常