springboot阿⾥云视频点播服务实现上传视频和删除功能
视频播放参照地址:
⼀、开通视频点播云平台
1、选择视频点播服务(收费)
产品->视频服务->视频点播
2、开通视频点播(选择按使⽤流量计费)
我的已经开通了,没开通的开通⼀下
3、选择按使⽤流量计费(选择使⽤流量计费,⽬前少于50G不收费,具体以实际为准)
4、资费说明
5、整体流程
1. ⽤户获取上传授权。
2. VoD下发上传地址和凭证及 VideoId。
3. ⽤户上传视频保存视频ID(VideoId)。
4. ⽤户服务端获取播放凭证。
5. VoD下发带时效的播放凭证。
6. ⽤户服务端将播放凭证下发给客户端完成视频播放。
⼆、视频点播服务的基本使⽤
1、设置转码格式
选择全局设置 > 转码设置,单击添加转码模板组。
在视频转码模板组页⾯,根据业务需求选择封装格式和清晰度。
或直接将已有的模板设置为默认即可
2、分类管理
选择全局设置 > 分类管理
3、上传视频⽂件
选择媒资库 > ⾳视频,单击上传⾳视频
4、配置域名,之前视频播放必须配置域名,现在可以不配置,但是播放加密的视频,必须要域名。
⾳视频上传完成后,必须配⼀个已备案的域名,并完成CNAME绑定
5、视频上传只有⽤到基础信息中的ID值
三、视频上传⽂档资料
参考上边地址⾥的服务端API和服务端SDK,阿⾥云推荐使⽤服务端SDK调⽤API.SDK的底层是API,本⽂主要参考服务端ADK->JAVA SDK.
API:阿⾥云提供固定的地址,只需要调⽤这个固定的地址,向地址传递参数,实现功能
SDK:调⽤阿⾥云提供类或者接⼝的⽅法实现功能
服务端:指的是java接⼝
客户端:指的是浏览器,安卓,ios
1、环境准备
适⽤于JDK 6及以上版本。
2、安装SDK
本例中⽤到的版本以及jar包。(注意本⽂⽤到的jar包是VODUploadDemo-java-1.4.11jar,有些jar包未开源,在maven中央仓库没有未开源的jar包,所以pom⽂件⾥不能⾃动联⽹下载,可以通过maven命令⼿动安装本地maven仓库中。)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<parent>
<artifactId>service</artifactId>
<groupId>com.stu</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service-vod</artifactId>
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-vod-upload</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
<dependency>
<groupId&le.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
</project>
版本号
<properties>
<java.version>1.8</java.version>
<guli.version>0.0.1-SNAPSHOT</guli.version>
<mybatis-plus.version>3.0.5</mybatis-plus.version>
<velocity.version>2.0</velocity.version>
<swagger.version>2.7.0</swagger.version>
<aliyun.oss.version>2.8.3</aliyun.oss.version>
<jodatime.version>2.10.1</jodatime.version>
<poi.version>3.17</poi.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<commons-io.version>2.6</commons-io.version>
<httpclient.version>4.5.1</httpclient.version>
<jwt.version>0.7.0</jwt.version>
<aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version>
<aliyun-sdk-oss.version>3.1.0</aliyun-sdk-oss.version>
<aliyun-java-sdk-vod.version>2.15.5</aliyun-java-sdk-vod.version>
<aliyun-java-vod-upload.version>1.4.11</aliyun-java-vod-upload.version>
<aliyun-sdk-vod-upload.version>1.4.11</aliyun-sdk-vod-upload.version>
<fastjson.version>1.2.28</fastjson.version>
<gson.version>2.8.2</gson.version>
<json.version>20170516</json.version>
<commons-dbutils.version>1.7</commons-dbutils.version>
<canal.client.version>1.1.0</canal.client.version>
<docker.image.prefix>zx</docker.image.prefix>
<cloud-alibaba.version>0.2.2.RELEASE</cloud-alibaba.version>
</properties>
3、前提条件
确认已阿⾥云账号,完成,并。
准备好访问点播服务使⽤的Access Key。可以在阿⾥云创建主账号Access Key,也可以在创建RAM⽤户,并授予VOD权限后进⾏相应操作,请参见。
4、初始化(本⽂以填⼊信息,进⾏初始化)
点播服务的接⼊区域请参见,例如:接⼊区域在上海,请使⽤cn-shanghai。(注意cn-shanghai是固定的。)
获取视频播放地址
获取视频播放凭证
视频功能主要根据视频的ID来实现功能,不根据视频地址实现,原因上传的视频可以加密,不加密的视频根据视频地址可以播放,但是加密地址的视频播放不了,所以根据ID实现功能,往数据库存储的是视频ID。
获取视频播放地址和获取视频播放凭证都可以播放视频,但是⽤凭证既能播放加密视频也能播放不加密的视频。
本⽂说的视频ID就是下图中的ID。
5、根据视频ID获取视频地址,获取视频凭证,上传视频代码⽰例
InitAcsClint初始化类(参照阿⾥云JAVA SDK ->初始化->填⼊信息,进⾏初始化)
package com.st;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.DefaultAcsClient;
import ptions.ClientException;
public class InitAcsClint {
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
String regionId = "cn-shanghai";  // 点播服务接⼊区域,固定的
DefaultProfile profile = Profile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
}
TestVod测试类,根据视频ID获取视频地址,获取视频凭证,上传视频⽅法(参照阿⾥云JAVA SDK->获取视频播放地址和获取视频播放凭证,上传SDK->服务端上传->JAAV上传SDK)
package com.st;
import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.q.UploadVideoRequest;
import com.aliyun.sp.UploadVideoResponse;
import com.aliyuncs.DefaultAcsClient;
import com.del.v20170321.GetPlayInfoRequest;
import com.del.v20170321.GetPlayInfoResponse;
import com.del.v20170321.GetVideoPlayAuthRequest;
import com.del.v20170321.GetVideoPlayAuthResponse;
import java.util.List;
public class TestVod {
public static void main(String[] args) throws Exception {
testUploadVideo();
}
/**
* 本地⽂件上传接⼝
*
*/
private static void testUploadVideo() {
String accessKeyId ="LTAI5t9VceHAhYQWzbRYStXv";
String accessKeySecret = "VQGvWWcpYKmJRiW9GRqdWDns17gc6i";
//视频标题(必选)
String title = "3 - How Does Project Submission Work - upload by sdk";
/
/本地⽂件上传和⽂件流上传时,⽂件名称为上传⽂件绝对路径,如:/User/sample/⽂件名称.mp4 (必选)
//⽂件名必须包含扩展名
String fileName = "F:/aa.mp4";
//本地⽂件上传
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=" + RequestId() + "\n");  //请求视频点播服务的请求ID
if (response.isSuccess()) {
System.out.print("VideoId=" + VideoId() + "\n");
} else {
/* 如果设置回调URL⽆效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */
System.out.print("VideoId=" + VideoId() + "\n");
System.out.print("ErrorCode=" + Code() + "\n");
System.out.print("ErrorMessage=" + Message() + "\n");
}
}
public static void getPlayAuth() throws Exception {
//1根据视频id获取视频播放地址
//1.1创建初始化对象
DefaultAcsClient client = InitAcsClint.initVodClient("LTAI5t9VceHAhYQWzbRYStXv","VQGvWWcpYKmJRiW9GRqdWDns17gc6i");
//1.2创建获取视频地址response和request对象
GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();
//1.3向request对象⾥⾯设置视频id
request.setVideoId("0aff5247d80d4ff1bbddcfc6a5c8e6a1");
//1.4调⽤初始化对象⾥的⽅法,取得凭证
response = AcsResponse(request);
System.out.PlayAuth());
}
public static void getPlayUrl() throws Exception {
//1根据视频id获取视频播放地址
//1.1创建初始化对象
DefaultAcsClient client = InitAcsClint.initVodClient("LTAI5t9VceHAhYQWzbRYStXv","VQGvWWcpYKmJRiW9GRqdWDns17gc6i");
//1.2创建获取视频地址response和request对象
GetPlayInfoRequest request = new GetPlayInfoRequest();
GetPlayInfoResponse response = new GetPlayInfoResponse();
//1.3向request对象⾥⾯设置视频id
request.setVideoId("0aff5247d80d4ff1bbddcfc6a5c8e6a1");
//1.4调⽤初始化对象⾥的⽅法,传递request,获取数据
response = AcsResponse(request);
List<GetPlayInfoResponse.PlayInfo> playInfoList = PlayInfoList();
//1.5播放地址
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {
System.out.print("PlayInfo.PlayURL = " + PlayURL() + "\n");
}
//Base信息
System.out.print("VideoBase.Title = " + VideoBase().getTitle() + "\n");
}
}
6、JAVA上传SDK⽰例代码(⽐5⾥的更详细,可以理解为5的扩充)
然后解压,到上传demo类,例⼦中有多种上传⽅式,上边通过【本地⽂件上传接⼝】⽅式实现上传。
四、视频上传,删除视频功能实现(通过【流式上传接⼝】实现视频上传)
1、application.properties属性⽂件以及配置nginx反向代理(jar包以及依赖同上,如果没⽤到nginx可以不⽤配置)
#服务端⼝
server.port=8003
#服务名
spring.application.name=service-vod
# 环境设置:dev、test、prod
spring.profiles.active=dev
#阿⾥云 vod
#不同的服务器,地址不同
aliyun.vod.file.keyid=LTAI5t9VceHAhYQWzbRYStXv
spring教学视频
aliyun.vod.file.keysecret=VQGvWWcpYKmJRiW9GRqdWDns17gc6i
# 最⼤上传单个⽂件⼤⼩:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最⼤置总上传的数据⼤⼩:默认10M
spring.servlet.multipart.max-request-size=1024MB
ConstantVodUtils属性⽂件值获取
package com.stu.vod.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//项⽬启动,spring接⼝,spring加载之后,执⾏接⼝⼀个⽅法
@Component
public class ConstantVodUtils implements InitializingBean {
//通过@value注解读取属性⽂件⾥的值,赋值给keyId
@Value("${aliyun.vod.file.keyid}")
private String keyId;
@Value("${aliyun.vod.file.keysecret}")
private String keysecret;
/
/定义⼀些静态常量
public static String KEY_ID;
public static String KEY_SECRET;
//上边赋值完成后,会执⾏afterPropertiesSet⽅法,这是spring机制
@Override
public void afterPropertiesSet() throws Exception {
KEY_ID = keyId;
KEY_SECRET = keysecret;
}
}
nginx反向代理(f⽂件配置)
将接⼝地址加⼊nginx配置
location ~ /
eduvod
/ { proxy_pass localhost:8003; }
配置nginx上传⽂件⼤⼩,否则上传时会有 413 (Request Entity Too Large) 异常
打开nginx主配置⽂件f,到http{},添加
client_max_body_size 1024m;
重启nginx
nginx -s reload
<路径下cmd命令输⼊【】启动nginx,输⼊按回车,光标闪烁表⽰启动成功
输⼊【nginx -s reload】重启nginx(有时候在Windows环境可能不好⽤)或者通过 -s stop关闭然后通过启动
完整配置
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
worker_connections  1024;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。