一.开通阿里云VOD
1.开通VOD
视频点播(ApsaraVideo VoD,简称VOD)是集视频采集、编辑、上传、媒体资源管理、自动化转码处理、视频审核分析、分发加速于一体的一站式音视频点播解决方案。登录阿里云,在产品 找到 视频点播VOD ,点击开通 ,进入管理控制台
2.存储管理
- 在视频点播控制台左侧导航栏的配置管理区域,选择媒资管理配置 > 存储管理。
- 在视频点播控制台上方菜单栏的服务区域,选择您要开通的区域(例如选择华东2(上海))。
- 单击启用分配存储Bucket。
- 单击管理,根据您的需求配置权限、回源地址等设置。
3.编码设置
转码模板可用于视频的转码处理,模板中设置的参数将作为处理视频的参数。您可以创建多种类型的转码模板,用于视频转码。
- 在视频点播控制台左侧导航栏的配置管理区域,选择媒体处理配置 > 转码模板组。该服务区域在开通存储管理后,系统会自动为您添加不转码模板组、TranscodeTemplateGroup转码模板组。
- 单击添加转码模板组,进入添加转码模版组页面。
- 输入模板组名称,在普通转码模板区域单击添加模板,您可以根据提示配置转码模板。
- 单击保存,界面自动跳转至转码模板组页面。在转码模板组页面,已经存在新创建的转码模板组。您可以对转码模板组进行编辑、删除等操作。
4.视频管理
上传音视频是将音视频上传到您的视频点播存储Bucket中。上传完成后可以对音视频进行处理和分发等操作。
- 在视频点播控制台左侧导航栏的媒资库 区域,单击音/视频。
- 单击上传音/视频 ,进入上传音/视频页面。
- 单击添加音/视频 ,选择上传的方式和处理类型(转码模板或工作流)。
- 本地上传:需通过点击或者文件拖拽的方式将待上传的文件选中到点播服务中。
- URL拉取(仅上海地域支持):需填写待上传文件的URL、扩展名及音/视频名称。
- 单击开始上传 。在上传音/视频 页面会显示视频上传的状态,当状态从正在上传 变为上传成功 ,表示视频已上传。您可以返回音/视频页面,查看上传成功的视频。
说明 只要在上传过程中涉及到转码,就会产生转码费用。如果不想涉及费用,建议您使用不转码模板组。
5.管理AccessKey
点击头像 -> AccessKey 管理 进入密钥管理界面
AccessKey ID 和 AccessKey Secret 是您访问阿里云 API 的密钥,具有该账户完全的权限 ,建议使用子用户AccessKey
点击 开始使用子用户AccessKey
点击创建用户
创建用户,指定用户名,和API权限,点击确定
创建好账户后,先把密钥复制下来后面会用到
然后点击 用户名,进入用户详情页 找到 权限管理 - 点击新增授权 - 选择权限 - 把VOD相关的权限加入右边的面板,如下
到这里我们的之账户创建成功。
二.视频点播
1.入门代码
基于OSS原生SDK上传 ,参考文档:https://help.aliyun.com/zh/vod/user-guide/upload-media-files-by-using-oss-sdks?spm=a2c4g.11186623.0.0.1f02273fj4lxNJ
视频点播面向开发者提供了丰富的上传方式,其中上传SDK(分服务端和客户端)封装了上传相关的基础逻辑,仅需简单配置即可实现上传功能,推荐使用
基于OSS原生SDK上传需要开发者自行实现所有上传逻辑,包括在点播服务获取上传地址和凭证、Base64解码上传地址和凭证以及调用OSS能力完成上传。
以集成点播服务端SDK获取上传地址和凭证为例,完整的上传流程如下图所示:
流程详解
- 上传应用服务器使用RAM用户AK方式 (AccessKey ID和AccessKey Secret)或STS临时AK初始化点播客户端。
- 上传应用服务器使用点播服务端SDK调用上传地址和凭证相关接口获取上传地址、上传凭证及媒资信息。
- 点播服务在请求结果中返回Base64加密的上传地址(UploadAddress)、上传凭证(UploadAuth)、和媒体ID等信息。上传应用服务器可根据返回结果解析参数作为初始化OSS原生SDK的入参。
- 上传应用服务器使用解析后的上传地址(UploadAddress)和授权信息(UploadAuth),通过STS方式初始化OSS客户端。
- 上传应用服务器使用OSS SDK调用OSS上传相关接口将媒体文件上传至指定的存储地址。
- OSS服务返回上传结果。
xml
<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.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-kms</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
下面是基于OSS上传视频的入门代码
java
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSSClient;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;
import org.apache.commons.codec.binary.Base64;
import java.io.File;
/**
* descript
*/
public class UploadDemo {
//初始化VOD客户端
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
// 根据点播接入服务所在的Region填写,例如:接入服务在上海,则填cn-shanghai;其他区域请参见存储说明。
String regionId = "cn-shanghai";
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
//创建视频上传结果对象
public static CreateUploadVideoResponse createUploadVideo(DefaultAcsClient vodClient) throws ClientException {
CreateUploadVideoRequest request = new CreateUploadVideoRequest();
request.setFileName("vod_test.mp4");
request.setTitle("this is title");
//设置请求超时时间
request.setSysReadTimeout(1000);
request.setSysConnectTimeout(1000);
return vodClient.getAcsResponse(request);
}
//初始OSS客户端
public static OSSClient initOssClient(JSONObject uploadAuth, JSONObject uploadAddress) {
String endpoint = uploadAddress.getString("Endpoint");
String accessKeyId = uploadAuth.getString("AccessKeyId");
String accessKeySecret = uploadAuth.getString("AccessKeySecret");
String securityToken = uploadAuth.getString("SecurityToken");
return new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);
}
//上传文件
public static void uploadLocalFile(OSSClient ossClient, JSONObject uploadAddress, String localFile) {
String bucketName = uploadAddress.getString("Bucket");
String objectName = uploadAddress.getString("FileName");
File file = new File(localFile);
ossClient.putObject(bucketName, objectName, file);
}
public static void main(String[] argv) {
//您的AccessKeyId
String accessKeyId = "xxxxx";
//您的AccessKeySecret
String accessKeySecret = "xxxxx";
//需要上传到VOD的本地视频文件的完整路径,需要包含文件扩展名
String localFile = "D:\\临时资料\\xxx.mp4";
try {
// 初始化VOD客户端并获取上传地址和凭证
DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
//创建一个相应对象
CreateUploadVideoResponse createUploadVideoResponse = createUploadVideo(vodClient);
// 执行成功会返回VideoId、UploadAddress和UploadAuth
String videoId = createUploadVideoResponse.getVideoId();
//解析拿到结果对象
JSONObject uploadAuth = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAuth()));
JSONObject uploadAddress = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAddress()));
// 使用UploadAuth和UploadAddress初始化OSS客户端
OSSClient ossClient = initOssClient(uploadAuth, uploadAddress);
// 上传文件,注意是同步上传会阻塞等待,耗时与文件大小和网络上行带宽有关
uploadLocalFile(ossClient, uploadAddress, localFile);
System.out.println("Put local file succeed, VideoId : " + videoId);
} catch (Exception e) {
System.out.println("Put local file fail, ErrorMessage : " + e.getLocalizedMessage());
}
}
private static String decodeBase64(String data) {
return new String(Base64.decodeBase64(data));
}
}
注意有三个地方需求修改
- accessKeyId : 您的AccessKeyId
- accessKeySecret : 您的AccessKeySecret
- String regionId = "cn-shanghai"; 这个是地区,需要去VOD 控制台 - 存储管理去找上传地址比如我的是:
xxxxxxx[.oss-cn-shanghai.aliyuncs.com](https://vod.console.aliyun.com/?spm=5176.12818093_-1363046575.top-nav.22.3be916d0sNjf6B#/storage/outin-e978d136329c11ee80ad00163e1a3b4a.oss-cn-shanghai.aliyuncs.com/manage)
华东上海,那么regionId就应该是 cn-shanghai
上传成功后,从控制台可以看到视频ID,播放的时候是需要用到视频ID的
2.播放视频
去到VOD控制台 - 媒体库 - 找到上传成功的视频
点击管理 - 在基础信息中可以看到视频的基本情况,包括视频ID,存储地址,点击 web播放器代码,官方提供了视频播放的Html 和 JS 脚本
在电脑桌面创建一个 pay.html文件,然后把播放器代码拷贝进去,然后需要指定2二个东西
- vid : 视频的id
- payauth : 播放凭证
3.获取payauth
官方说明:请复制代码并补充playauth值后再使用,playauth获取方式请参考文档 获取播放凭证 , 我们根据文档去获取播放凭证 ,文档地址:https://help.aliyun.com/zh/vod/developer-reference/api-vod-2017-03-21-getvideoplayauth ,这里可以先试用调试 - 拿到播放凭证
进入调试页面,选择服务器地址 ,制定VideoId 视频ID,然后点击发起调用 ,就可以获得播放凭证啦。
把播放凭证拷贝到播放器代码中,刷新页面尝试播放,而且通过network可以看得出,采用的是视频点播,边下边播的方式。
获取播放凭证代码可以在调试 - SDK实例 里面直接下载官方代码
需要导入依赖
xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>vod20170321</artifactId>
<version>2.16.16</version>
</dependency>
获取播放凭证代码
java
//获取播放凭证
public static String getPayAuth(String videoId) throws Exception {
// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
com.aliyun.vod20170321.Client client =
createClient("你的accessKeyId", "你的accessKeySecrt");
com.aliyun.vod20170321.models.GetVideoPlayAuthRequest getVideoPlayAuthRequest =
new com.aliyun.vod20170321.models.GetVideoPlayAuthRequest().setVideoId(videoId);
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 复制代码运行请自行打印 API 的返回值
GetVideoPlayAuthResponse videoPlayAuthWithOptions = client.getVideoPlayAuthWithOptions(getVideoPlayAuthRequest, runtime);
String playAuth = videoPlayAuthWithOptions.getBody().getPlayAuth();
return playAuth;
}
相信你根据文档吧流程跑完了,接下来就可以把代码接入到你的项目中的