阿里云视频点播开发教程

功能介绍

阿里云视频点播(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
<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的使用流程如下:

上传视频的代码示例

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处理的代码示例

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小时更新。

关闭服务

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