視頻點播(ApsaraVideo for VoD)是集音視頻采集、編輯、上傳、自動化轉碼處理、媒體資源管理、分發加速于一體的一站式音視頻點播解決方案。

1、應用場景
- 音視頻網站:無論是初創視頻服務企業,還是已擁有海量視頻資源,可定制化的點播服務幫助客戶快速搭建擁有極致觀看體驗、安全可靠的視頻點播應用。
- 短視頻:集音視頻拍攝、特效編輯、本地轉碼、高速上傳、自動化云端轉碼、媒體資源管理、分發加速、播放于一體的完整短視頻解決方案。目前已幫助1000+App快速實現手機短視頻功能。
- 直播轉點播:將直播流同步錄制為點播視頻,用于回看。并支持媒資管理、媒體處理(轉碼及內容審核/智能首圖等AI處理)、內容制作(云剪輯)、CDN分發加速等一系列操作。
- 在線教育:為在線教育客戶提供簡單易用、安全可靠的視頻點播服務。可通過控制臺/API等多種方式上傳教學視頻,強大的轉碼能力保證視頻可以快速發布,覆蓋全網的加速節點保證學生觀看的流暢度。防盜鏈、視頻加密等版權保護方案保護教學內容不被竊取。
- 視頻生產制作:提供在線可視化剪輯平臺及豐富的OpenAPI,幫助客戶高效處理、制作視頻內容。除基礎的剪切拼接、混音、遮標、特效、合成等一系列功能外,依托云剪輯及點播一體化服務還可實現標準化、智能化剪輯生產,大大降低視頻制作的檻,縮短制作時間,提升內容生產效率。
- 內容審核:應用于短視頻平臺、傳媒行業審核等場景,幫助客戶從從語音、文字、視覺等多維度精準識別視頻、封面、標題或評論的違禁內容進行AI智能審核與人工審核。2、功能介紹
2、功能介紹

二、開通視頻點播云平臺
1. 產品->視頻服務->視頻服務->視頻點播

2.開通視頻點播

3.選擇按流量計費,比較省錢

4.資費說明:
https://www.aliyun.com/price/product?spm=a2c4g.11186623.2.12.7fbd59b9vmXVN6#/vod/detail
5.整體流程

- 用戶獲取上傳授權。
- VoD下發 上傳地址和憑證 及 VideoId。
- 用戶上傳視頻保存視頻ID(VideoId)。
- 用戶服務端獲取播放憑證。
- VoD下發帶時效的播放憑證。
- 用戶服務端將播放憑證下發給客戶端完成視頻播放。
三、視頻點播服務的基本使用
1、設置轉碼格式
選擇全局設置 > 轉碼設置,單擊添加轉碼模板組。
在視頻轉碼模板組頁面,根據業務需求選擇封裝格式和清晰度。
或直接將已有的模板設置為默認即可

2、分類管理
選擇全局設置 > 分類管理
3、上傳視頻文件
選擇媒資庫 > 音視頻,單擊上傳音視頻
4、配置域名
音視頻上傳完成后,必須配一個已備案的域名,并完成CNAME綁定

5、此時視頻可以在阿里云控制臺播放
6、獲取web播放器代碼



四、服務端SDk集成
1.sdk的方式將api進行了進一步的封裝,不用自己創建工具類。
我們可以基于服務端SDK編寫代碼來調用點播API,實現對點播產品和服務的快速操作。
2.使用SDK
首先添加Maven倉庫,然后再加入依賴項。
1.1,添加maven倉庫 <repositories> <repository> <id>sonatype-nexus-staging</id> <name>Sonatype Nexus Staging</name> <url>
https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
1.2,添加Jar包依賴 <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>
3.初始化
根據文檔示例創建 AliyunVODSDKUtils.java
public class OSSTest {
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "oss-cn-beijing.aliyuncs.com";
// 阿里云主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM賬號進行API訪問或日常運維,請登錄 https://ram.console.aliyun.com 創建RAM賬號。
String accessKeyId = "LTAI5tSjEbLtaqn8HMe4zF4G";
String accessKeySecret = "mGgEO1ueh5WdVK4oK4kJOSPQgHPR5m";
String bucketName = "fire-file";
@Test
public void testCreateBucket() {
// 創建OSSClient實例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 創建存儲空間。
ossClient.createBucket(bucketName);// 關閉OSSClient。
System.out.println(ossClient.listBuckets());
// ossClient.shutdown();
}
@Test
public void testExist() {
// 創建OSSClient實例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
boolean exists = ossClient.doesBucketExist(bucketName);
System.out.println(exists);
// 關閉OSSClient。
ossClient.shutdown();
}
}
4.springboot集成
FileUploadController
package com.atguigu.controller;
import com.atguigu.commonutils.R;
import com.atguigu.service.FileService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/eduoss")
@CrossOrigin
public class FileUploadController {
@Autowired
private FileService fileService;
/**
* 13
* 文件上傳
* 14
* <p>
* 15
*
* @param file 16
*/
@ApiOperation(value = "文件上傳")
@PostMapping("upload")
public R upload(
@ApiParam(name = "file", value = "文件", required = true) @RequestParam("file") MultipartFile file) {
String uploadUrl = fileService.upload(file);
//返回r對象
return R.ok().message("文件上傳成功").data("url", uploadUrl);
}
}
service
package com.atguigu.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atguigu.service.FileService;
import com.atguigu.utils.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
@Service
public class FileServiceImpl implements FileService {
@Override
public String upload(MultipartFile file) {
// 工具類獲取值
String endpoint = ConstantPropertiesUtil.END_POINT;
String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
try {
// 創建OSS實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//獲取上傳文件輸入流
InputStream inputStream = file.getInputStream();
//獲取文件名稱
String fileName = file.getOriginalFilename();
//1 在文件名稱里面添加隨機唯一的值
String uuid = UUID.randomUUID().toString().replaceAll("-","");
// yuy76t5rew01.jpg
fileName = uuid+fileName;
//2 把文件按照日期進行分類
//獲取當前日期
// 2019/11/12
String datePath = new DateTime().toString("yyyy/MM/dd");
//拼接
// 2019/11/12/ewtqr313401.jpg
fileName = datePath+"/"+fileName;
//調用oss方法實現上傳
//第一個參數 Bucket名稱
//第二個參數 上傳到oss文件路徑和文件名稱 aa/bb/1.jpg
//第三個參數 上傳文件輸入流
ossClient.putObject(bucketName,fileName , inputStream);
// 關閉OSSClient。
ossClient.shutdown();
//把上傳之后文件路徑返回
//需要把上傳到阿里云oss路徑手動拼接出來
// https://edu-guli-1010.oss-cn-beijing.aliyuncs.com/01.jpg
String url = "http://"+bucketName+"."+endpoint+"/"+fileName;
return url;
}catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
utils
package com.atguigu.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class ConstantPropertiesUtil implements InitializingBean {
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = keyId;
System.out.println(ACCESS_KEY_ID+"==========================");
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
注意END_POINT、ACCESS_KEY_ID、ACCESS_KEY_SECRET、BUCKET_NAME用自己的,具體申請方式在控制臺》點擊頭像》AccessKey 管理

