文章目錄
- SpringBoot整合阿里云視頻點播
- 1.準備作業
- 2.服務端SDK的使用
- 2.1 匯入依賴
- 2.2 初始化類
- 2.3 創建讀取公共常量的工具類
- 2.4 獲取視頻播放地址
- 2.5 獲取視頻播放憑證
- 2.6 上傳視頻到阿里云視頻點播服務
- 3.springboot專案中實踐
- 3.1 上傳視頻到阿里云
- 3.2 根據視頻id洗掉視頻
SpringBoot整合阿里云視頻點播
1.準備作業
首先需要在阿里云開通視頻點播服務:
-
首先,進入到阿里云視頻點播平臺,點擊開通服務,選擇按使用流量計費即可
-
開通之后點擊進入管理控制臺即可
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-i3rwYns5-1638710975820)(SpringBoot整合阿里云視頻點播.assets/image-20211205201252358.png)]](https://img.uj5u.com/2021/12/07/285519071022203.png)
視頻點播有什么用?
視頻點播(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;
}
}
accessKeyId和accessKeySecret的獲取:
這里的初始化方法需要傳入賬號Access Key資訊,可以在阿里云Access Key管理創建主賬號Access Key

點播服務接入區域
regionId的獲取:
點擊點播控制臺的存盤管理,查看自己所選的區域:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FahoiYE6-1638710975830)(SpringBoot整合阿里云視頻點播.assets/image-20211205202924675.png)]](https://img.uj5u.com/2021/12/07/285519071022205.png)
在查看接入區域標識對應API/SDK的RegionId引數:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Iy7BW7WO-1638710975832)(SpringBoot整合阿里云視頻點播.assets/image-20211205203030237.png)]](https://img.uj5u.com/2021/12/07/285519071022206.png)
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 獲取視頻播放地址
首先手動先在點播控制臺上傳一個視頻用于測驗:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XRxF61aO-1638710975838)(SpringBoot整合阿里云視頻點播.assets/image-20211205205842790.png)]](https://img.uj5u.com/2021/12/07/285519071022207.png)
步驟:
- 創建初始化物件
- 創建獲取視頻地址
request和response - 向
request物件里面設定視頻id - 用初始化物件里面的方法
getAcsResponse,傳遞request,獲取資料 - 列印資訊
代碼如下:
//獲取視頻播放地址
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");
}
測驗成功:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bOwb4Xvo-1638710975840)(SpringBoot整合阿里云視頻點播.assets/image-20211205210521532.png)]](https://img.uj5u.com/2021/12/07/285519071022201.png)
2.5 獲取視頻播放憑證
步驟與獲取視頻播放地址差不多,區別是獲取request和response方式不同:
//獲取視頻播放憑證
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());
}
測驗成功:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cMrj8MPp-1638710975843)(SpringBoot整合阿里云視頻點播.assets/image-20211205210840606.png)]](https://img.uj5u.com/2021/12/07/285519071022208.png)
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");
}
}
測驗成功:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HSku1EMy-1638710975847)(SpringBoot整合阿里云視頻點播.assets/image-20211205211553720.png)]](https://img.uj5u.com/2021/12/07/285519071022202.png)
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,"洗掉視頻失敗");
}
}

最后喜歡的小伙伴,記得三連哦!😏🍭😘
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/374748.html
標籤:java
上一篇:Java淺拷貝深拷貝
