Contents
  1. 1. 功能介绍
  2. 2. 准备工作
    1. 2.1. 开通视频点播服务
    2. 2.2. 启用存储视频的Bucket
    3. 2.3. 创建用户和授权
  3. 3. 开发环境
  4. 4. 调用接口
  5. 5. 其他
    1. 5.1. 查看费用
    2. 5.2. 关闭服务

功能介绍

阿里云视频点播(VoD)提供了很多视频相关的功能。主要流程是上传视频,处理视频和播放视频。具体介绍可以参考视频点播产品简介。下图为视频点播的架构图。

视频点播架构图

准备工作

本节目标:开通服务,以及获取可以调用视频点播 SDK 和 API 的 accessKeyId 和 accessKeySecret。

开通视频点播服务

访问视频点播控制台页面,点击开通服务即可。第一次进入会提示开通服务,之后会直接进入点播控制台。

启用存储视频的Bucket

视频点播服务的视频存储可以使用点播系统Bucket,也可以使用OSS自有Bucket。

使用点播系统Bucket需要手动启用,操作如下:

视频点播控制台-> 配置管理 -> 存储管理 -> 顶部栏,选择地区:华东2(上海)-> 待分配 点播系统bucket:启用

点播系统Bucket上的视频使用视频点播相关功能会更方便。但如果你之前使用了阿里云的OSS,想要对你OSS上的视频使用视频点播相关功能也是可以的,就是会麻烦一点,需要多调用一个注册媒资信息接口。

这两种 bucket 有很多不同之处。详情可以查看视频点播-开发指南-存储管理视频点播-配置管理-存储管理

创建用户和授权

阿里云控制台 -> 右上角账号名称 -> 访问控制 -> 用户 -> 点击创建用户 -> 输入登录名称和显示名称,勾选 OpenAPI 调用访问 -> 点击确定 -> 保存用户的 accessKeyId 和 accessKeySecret

创建用户成功后,进入用户详情页面,为用户授予权限。

权限管理 -> 新增授权 -> 添加 “AliyunVODFullAccess 管理视频点播服务(VOD)的权限”

开发环境

本节目标:引入视频点播相关的 Java SDK。

Maven依赖

  • aliyun-java-sdk-core为核心库
  • aliyun-java-sdk-vod为VOD库
  • aliyun-java-sdk-kms为密钥管理服务(KMS)的所需依赖,若不涉及则无需添加。
  • com.aliyun.vod:upload 视频点播上传SDK没有开源,需要手动下载jar包引入到项目中。详情参考 SDK简介与下载-上传SDK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.16.10</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-kms</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.aliyun.vod</groupId>
<artifactId>upload</artifactId>
<version>1.4.15</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230227</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.25</version>
</dependency>

调用接口

本节目标:了解接口调用流程和基本使用。

SDK的使用流程如下:

上传视频的代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private static String uploadVideoToVOD(String fileName, InputStream inputStream) {
UploadStreamRequest request = new UploadStreamRequest(
accessKeyId, accessKeySecret, fileName, fileName, inputStream);
request.setAccessKeyId(accessKeyId);
request.setAccessKeySecret(accessKeySecret);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); //请求视频点播服务的请求ID
String videoId = response.getVideoId();
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");
}
return videoId;
}

/**
* 获取上传结果
*
* 用于检查是否上传成功,视频上传成功后才能进行视频处理
*
* @param videoId
* @return
* @throws ClientException
*/
private static GetUploadDetailsResponse.UploadDetail getUploadDetails(String videoId) throws ClientException {
GetUploadDetailsRequest request = new GetUploadDetailsRequest();
request.setMediaIds(videoId);
GetUploadDetailsResponse acsResponse = initVodClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET).getAcsResponse(request);
return acsResponse.getUploadDetails().get(0);
}

创建 DefaultAcsClient,请求视频AI处理的代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private static String submitAiJob(String videoId) throws ClientException {
SubmitAIJobRequest request = new SubmitAIJobRequest();
request.setMediaId(videoId);
request.setTypes("AIVideoTag");
// Face,ASR,OCR,Category,Annotation
request.setConfig("{\"AIVideoTag\": {\"AnalyseTypes\": \"ASR,OCR,Annotation\"} }");
SubmitAIJobResponse acsResponse = initVodClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET).getAcsResponse(request);
String jobId = acsResponse.getAIJobList().get(0).getJobId();
System.out.println("jobId: " + jobId);
return jobId;
}

private static ListAIJobResponse.AIJob listAiJob(String jobId) throws ClientException {
ListAIJobRequest listAIJobRequest = new ListAIJobRequest();
listAIJobRequest.setJobIds(jobId);
ListAIJobResponse acsResponse = initVodClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET).getAcsResponse(listAIJobRequest);
ListAIJobResponse.AIJob aiJob = acsResponse.getAIJobList().get(0);
return aiJob;
}

public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) {
String regionId = "cn-shanghai"; // 点播服务接入地域
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}

视频点播的服务端 Java SDK 的使用

  • 创建一个对应视频处理的 Request 对象。SDK 的 request 对象和 API 上写的的基本一致,API 名称加个 Request 后缀即可。API 上有详情的参数说明,可结合使用。
  • 创建一个 VodClient 对象。
  • 获取对应的视频处理 Response 对象。

其他

查看费用

阿里云控制台 -> 顶部栏 “费用” -> 账单详情 -> 明细账单。

账单明细会有延迟,不能看到实时的消费明细。

明细账单数据相对于实际费用消耗延迟24小时更新,其中实例ID相关的信息( 实例配置,实例规格,实例昵称,资源组,公网IP,私网IP,可用区)延迟48小时更新。

关闭服务

视频点播服务没有统一的关闭入口。但可以在视频点播控制台中删除所有付费项。比如:删除掉所有域名,清空所有存储,取消转码和调用。

Contents
  1. 1. 功能介绍
  2. 2. 准备工作
    1. 2.1. 开通视频点播服务
    2. 2.2. 启用存储视频的Bucket
    3. 2.3. 创建用户和授权
  3. 3. 开发环境
  4. 4. 调用接口
  5. 5. 其他
    1. 5.1. 查看费用
    2. 5.2. 关闭服务