# CDN分发加速
微短剧解决方案提供通过API进行CDN分发加速播放的能力。通过阅读本文,您可以了解微短剧CDN分发加速播放作业的基本API调用方法。
## 分发播放
### 概述
视频点播支持播放音频和视频文件,您可以通过控制台预览、集成阿里云播放器SDK和集成第三方播放器进行播放。
视频点播(VOD)支持音频和视频文件的播放,文件来源包括:
* 选择 **转码** 方式上传的文件经转码处理后产生的输出流文件;
* 选择 **不转码** 方式上传的文件作为原画用于播放,目前仅以下格式支持不转码直接播放:MP4、FLV、M3U8、MP3、WEBM。
### **播放方式**
* **通过播放地址播放**
存储在视频点播中的音视频,获取其播放地址后,可使用阿里云播放器或其他第三方播放器(系统原生播放器、开源播放器、自研播放器等)进行播放。本文为您介绍点播音视频播放的流程、获取播放地址的方式和播放说明。
* **通过播放凭证播放**
如果您对存储在视频点播中的音视频播放有更高的安全性要求,则可以使用阿里云播放器SDK通过音视频的播放凭证(PlayAuth)自动获取播放地址进行播放。因播放凭证具有时效性、与视频一一对应、不能混用和重复使用等特点,当凭证过期或凭证错误时都将无法获取到对应的播放地址。本文为您介绍如何通过API获取音视频的播放凭证并使用阿里云播放器SDK进行播放。
### 获取播放地址
视频点播支持通过事件通知和API/SDK两种方式获取播放地址。
* 事件通知
通过接收单个清晰度转码完成或全部清晰度转码完成的事件通知获取到播放地址,保存到用户自己的服务端,播放时访问自己的服务端获取到存储的播放地址。
消息回调获取到的播放地址为固定地址,若开启了URL鉴权则需要自己生成带鉴权的播放地址,否则无法播放。
如果您禁用或删除了旧的域名,保存的播放地址取出时请替换成新的域名,否则无法播放。
如果您配置了视频加密,返回的播放地址需要经过播放器解密后才可进行播放。
* API/SDK
通过调用GetPlayInfo - 获取音视频播放地址接口SDK/API实时获取播放地址,需要在上传音视频文件时保存好视频ID。示例Demo如下:
> **重要**
> 建议使用更安全的 STS 访问方式,更多鉴权访问方式请参见管理访问凭据。
>
> ```java
> package com.aliyun.sample;
>
> import com.aliyun.tea.*;
>
> public class Sample {
>
> /**
> * description :
> *
使用AK&SK初始化账号Client
> * @return Client
> *
> * @throws Exception
> */
> public static com.aliyun.vod20170321.Client createClient() throws Exception {
> // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
> com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
> // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
> .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
> // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
> .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
> // Endpoint 请参考 https://api.aliyun.com/product/vod
> config.endpoint = "vod.cn-shanghai.aliyuncs.com";
> return new com.aliyun.vod20170321.Client(config);
> }
>
> public static void main(String[] args_) throws Exception {
> java.util.List args = java.util.Arrays.asList(args_);
> com.aliyun.vod20170321.Client client = Sample.createClient();
> com.aliyun.vod20170321.models.GetPlayInfoRequest getPlayInfoRequest = new com.aliyun.vod20170321.models.GetPlayInfoRequest();
> com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
> try {
> // 复制代码运行请自行打印 API 的返回值
> client.getPlayInfoWithOptions(getPlayInfoRequest, runtime);
> } catch (TeaException error) {
> // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
> // 错误 message
> System.out.println(error.getMessage());
> // 诊断地址
> System.out.println(error.getData().get("Recommend"));
> com.aliyun.teautil.Common.assertAsString(error.message);
> } catch (Exception _error) {
> TeaException error = new TeaException(_error.getMessage(), _error);
> // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
> // 错误 message
> System.out.println(error.getMessage());
> // 诊断地址
> System.out.println(error.getData().get("Recommend"));
> com.aliyun.teautil.Common.assertAsString(error.message);
> }
> }
> }
> ```
### 获取播放凭证
调用GetVideoPlayAuth获取音视频的播放凭证(PlayAuth),阿里云播放器SDK通过音视频的播放凭证自动换取播放地址进行播放。示例Demo如下:
```java
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* description :
* 使用AK&SK初始化账号Client
* @return Client
*
* @throws Exception
*/
public static com.aliyun.vod20170321.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Endpoint 请参考 https://api.aliyun.com/product/vod
config.endpoint = "vod.cn-shanghai.aliyuncs.com";
return new com.aliyun.vod20170321.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List args = java.util.Arrays.asList(args_);
com.aliyun.vod20170321.Client client = Sample.createClient();
com.aliyun.vod20170321.models.GetVideoPlayAuthRequest getVideoPlayAuthRequest = new com.aliyun.vod20170321.models.GetVideoPlayAuthRequest();
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
client.getVideoPlayAuthWithOptions(getVideoPlayAuthRequest, runtime);
} catch (TeaException error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}
```
## 常见问题
视频点播播放问题排查思路:
1.
### 前提条件
您已通过点播控制台或API/SDK方式获取到播放地址。
2.
### 操作步骤
1. 登录[视频点播控制台](https://vod.console.aliyun.com/)。
2. 在左侧导航栏选择 **工具 \> 视频播放问题排查** 。
3. 在 **视频播放问题排查** 页面,输入需检测的视频播放链接并选择域名类型,单击 **开始检测** 。
检测完成后,会生成检测结果,针对检测出的异常项您可参考解决建议处理异常。
4. 说明
针对异常结果进行修改后,若检测的视频播放URL未改变,则可在 **检测结果** 页面单击 **重新检测** 进行检测。一旦检测的URL发生了改变,则需返回到 **视频播放问题排查** 页面,重新输入视频播放URL进行检测。
域名类型为 **加速域名** 的视频播放链接涉及的检测项如下:
| **检测项** | **检测参数** | **描述** |
|---|---|---|
| 域名检测 | 域名状态 | 检测域名的配置状态。 |
|---|---|---|
| CNAME检测 | CNAME状态 | 检测域名的CNAME配置状态。 |
|---|---|---|
| HTTPS证书检测 | 证书状态 | 检测HTTPS证书的配置状态。 |
|---|---|---|
| 播放鉴权检测 | 鉴权配置 | 检测点播URL鉴权的配置状态(开启/关闭)。 |
|---|---|---|
| 播放鉴权检测 | 鉴权状态 | 检测点播URL鉴权成功或鉴权失败原因。 |
|---|---|---|
| UA黑/白名单 | 名单类型 | 检测UA黑/白名单的配置状态及配置类型。 |
|---|---|---|
| 防盗链检测 | 配置状态 | 检测防盗链的配置状态(已配置/未配置)。 |
|---|---|---|
| 跨域检测 | 跨域状态配置 | 检测跨域的配置状态(已配置/未配置)。 |
|---|---|---|
| 欠费检测 | 点播服务是否可用 | 检测点播服务的可用状态(正常/不可用)。 |
|---|---|---|
| 欠费检测 | 是否欠费 | 检测账号是否欠费。 |
|---|---|---|
| 欠费检测 | 欠费是否超期 | 检测账号欠费的超期状态。 |
域名类型为 **OSS域名** 的视频播放链接涉及的检测项如下:
| **检测项** | **检测参数** | **描述** |
|---|---|---|
| OSS Bucket检测 | 存储访问权限 | 检测OSS Bucket的存储访问权限类型。 |
|---|---|---|
| OSS Bucket检测 | 存储状态 | 检测OSS Bucket的存储配置状态。 |
|---|---|---|
| OSS Bucket检测 | 签名状态 **说明** 仅当OSS Bucket的存储访问权限为私有Bucket时,才展示该检测参数。 | 检测OSS Bucket的签名状态。 |