一、阿里雲開通視頻點播及一般操作
根據業務需求選擇流量計費或是寬帶峯值計費。
流程
1、用戶要先獲取上傳授權
2、VoD下發 上傳地址和憑證 及 VideoId
3、用戶上傳視頻保存視頻ID(VideoId)
4、用戶服務端獲取播放憑證
5、VoD下發帶時效的播放憑證
6、用戶服務端將播放憑證下發給客戶端完成視頻播放
設置轉碼格式
在視頻轉碼模板組頁面,根據業務需求選擇封裝格式和清晰度。
分類管理
上傳音視頻
可以直接使用客戶端上傳視頻
配置域名
音視頻上傳完成後,必須配一個已備案的域名,並完成CNAME綁定。
更多詳細操作見官方文檔視頻點播
二、使用服務端SDK
1、簡介
SDK的方式將API進行了進一步的封裝,不用自己創建工具類。我們可以基於服務端SDK編寫代碼來調用點播API,實現對點播產品和服務的快速操作。
SDK封裝了對API的調用請求和響應,避免自行計算較爲繁瑣的 API簽名。支持所有點播服務的API,並提供了相應的示例代碼。支持7種開發語言,包括:Java、Python、PHP、.NET、Node.js、Go、C/C++。
2、安裝SDK
參考官網:安裝SDK
引入Jar包依賴 - 建議參考官網最新
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.3.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.15.5</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
3、初始化
參考官方文檔:初始化
根據文檔書寫一個初始化幫助類,通過賬號AccessKey
來初始化
public class InitVodClient {
/**
* @param AccessKeyId
* @param 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;
}
}
4、使用服務端上傳視頻
參考官網文檔:服務端Java上傳
安裝SDK
使用服務端上傳視頻,需要先安裝SDK,引入相關依賴,但是需要注意aliyun-java-vod-upload-1.4.12.jar
尚未開源,因此需要自己使用Maven命令打入依賴,或者直接在項目中引入該Jar包。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.3.3</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.15.2</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>
上傳代碼 - 以流的方式
上傳視頻,返回videoId,方便後面刪除、播放。
public String uploadVideoAly(MultipartFile file) {
try {
// 源文件名
String fileName = file.getOriginalFilename();
// 上傳到阿里的文件標題
String title = fileName.substring(0,fileName.lastIndexOf("."));
// 上傳文件的輸入流
InputStream inputStream = file.getInputStream();
UploadStreamRequest request = new UploadStreamRequest(
ConstantVodUtils.ACCESS_KEY_ID,
ConstantVodUtils.ACCESS_KEY_SECRET,
title,
fileName,
inputStream
);
UploadVideo uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
// VideoId
String videoId = null;
if (response.isSuccess()){ // 上傳成功
videoId = response.getVideoId();
}else{
// 如果設置回調URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId爲空,此時需要根據返回錯誤碼分析具體錯誤原因
videoId = response.getVideoId();
}
return videoId;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
5、刪除阿里雲端視頻 - 根據videoId
刪除一個視頻
public void removeVideo(String videoId) {
try{
DefaultAcsClient client = AliyunVodSDKUtils.initVodClient(
ConstantPropertiesUtil.ACCESS_KEY_ID,
ConstantPropertiesUtil.ACCESS_KEY_SECRET);
DeleteVideoRequest request = new DeleteVideoRequest();
request.setVideoIds(videoId);
DeleteVideoResponse response = client.getAcsResponse(request);
}catch (ClientException e){
throw new GuliException(20001, "視頻刪除失敗");
}
}
刪除多個視頻
// 參數是videoId集合
public void removeMoreAlyVideo(List<String> videoList) {
try{
DefaultAcsClient client = InitVodClient.initVodClient(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET);
DeleteVideoRequest request = new DeleteVideoRequest();
// videoList轉換成以逗號隔開的字符串
String videoIds = StringUtils.join(videoList.toArray(),",");
request.setVideoIds(videoIds);
client.getAcsResponse(request);
}catch (Exception e){
e.printStackTrace();
throw new GuliException(20001,"刪除視頻失敗!");
}
}
視頻播放 - 阿里獨有憑證方式
阿里雲播放器支持通過播放憑證自動換取播放地址進行播放,接入方式更爲簡單,且安全性更高。播放憑證默認時效爲100秒(最大爲3000秒),只能用於獲取指定視頻的播放地址,不能混用或重複使用。如果憑證過期則無法獲取播放地址,需要重新獲取憑證。
播放視頻需要獲取憑證,憑證代碼如下:
// 獲取憑證
public String getPlayAuth(String id){
try {
// 創建初始化對象
DefaultAcsClient client =
InitVodClient.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
// 創建獲取憑證request和response對象
GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
// 向request設置視頻id
request.setVideoId(id);
// 調用方法得到憑證
GetVideoPlayAuthResponse response = client.getAcsResponse(request);
String playAuth = response.getPlayAuth();
return playAuth;
}catch (Exception e){
throw new GuliException(20001,"獲取憑證失敗!");
}
}
注意:播放憑證有過期時間,默認值:100秒 。取值範圍:100~3000。
設置播放憑證的有效期,在獲取播放憑證的測試用例中添加如下代碼:
request.setAuthInfoTimeout(200L);
使用憑證
,必須使用阿里獨有的播放器。
前端示例
播放器重要屬性:
encryptType:'1',//如果播放加密視頻,則需設置encryptType=1,非加密視頻無需設置此項
vid : '視頻id',
playauth : '視頻授權碼',
配置播放器參考:阿里雲Aliplayer播放器
下面只是一個不完整的小示例 - 建議直接看上面那個鏈接
1、引入播放器js庫和css樣式
<template>
<div>
<!-- 阿里雲視頻播放器樣式 -->
<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css" >
<!-- 阿里雲視頻播放器腳本 -->
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.8.1/aliplayer-min.js" />
<!-- 定義播放器dom -->
<div id="J_prismPlayer" class="prism-player" />
</div>
</template>
2、獲取播放憑證、創建播放器
asyncData({ params, error }) {
return vod.getPlayAuth(params.id)
.then(response => {
return {
playAuth: response.data.data.playAuth,
vid: params.id
}
})
},
mounted() { //頁面渲染之後 created
new Aliplayer({
id: 'J_prismPlayer',
vid: this.vid, // 視頻id
playauth: this.playAuth, // 播放憑證
encryptType: '1', // 如果播放加密視頻,則需設置encryptType=1,非加密視頻無需設置此項
width: '100%',
height: '750px',
// 以下可選設置
cover: 'http://guli.shop/photo/banner/1525939573202.jpg', // 封面
qualitySort: 'asc', // 清晰度排序
mediaType: 'video', // 返回音頻還是視頻
autoplay: false, // 自動播放
isLive: false, // 直播
rePlay: false, // 循環播放
preload: true,
controlBarVisibility: 'hover', // 控制條的顯示方式:鼠標懸停
useH5Prism: true, // 播放器類型:html5
}, function(player) {
console.log('播放器創建成功')
})
}