功能介绍
阿里云视频点播(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"); String videoId = response.getVideoId(); if (response.isSuccess()) { System.out.print("VideoId=" + response.getVideoId() + "\n"); } else { System.out.print("VideoId=" + response.getVideoId() + "\n"); System.out.print("ErrorCode=" + response.getCode() + "\n"); System.out.print("ErrorMessage=" + response.getMessage() + "\n"); } return videoId; }
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"); 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小时更新。
关闭服务
视频点播服务没有统一的关闭入口。但可以在视频点播控制台中删除所有付费项。比如:删除掉所有域名,清空所有存储,取消转码和调用。