阿里雲視頻點播的簡單使用

一、阿里雲開通視頻點播及一般操作

根據業務需求選擇流量計費或是寬帶峯值計費。

流程

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('播放器創建成功')
      })
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章