阿里云视频点播是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速、视频播放于一体的一站式音视频点播解决方案。但是对于使用者来说经常遇到的问题即是视频点播中的视频如何对外提供服务,并且当播放出现异常时如何进行排查呢?本文主要从该方面为大家介绍视频点播的播放方式和异常排查。
播放方式
视频点播提供了三种方式进行播放分别适用于不同的场景。用户可以根据自己的使用场景选择合适的方法进行播流,下面依次介绍该三种播放方式:
1. 使用播放URL进行播放
视频点播的使用是存储在产品统一的 Bucket 中,因此与 OSS 中的视频都可以直接简单获取 URL 进行访问方式不同。产品统一的并不属于用户自己,因此用户是无法通过自己账号的 AccessKeyId 和 AccessKeySecret 获取播放的权限。
用户获取视频播放 URL 是需要通过视频点播提供的 GetPlayInfo 接口获取播放信息,具体接口信息请参考获取视频播放地址,该接口会根据用户在视频点播配置的转码规则分别提供所有的转码后的资源的 URL 以及对应的视频的基本信息。
注意:
- 对于所有状态不是“正常”状态的视频资源将无法调用该接口(例如:转码中、审核中等执行状态),否则将直接抛出错误:Forbidden.IllegalStatus : Status of the video is illegal。
- 对于内容加密的视频通过该接口获取得到的播放 URL 是不需要解密播放并且可以直接下载得到该视频,因此对于内容加密的视频并不适合与使用 URL 的方式进行播放。
- 由于后续的两种方案都仅能够支持视频点播官方提供的播放器,如果需要使用第三方的播放器插件的话只能够使用本方法播放。
- 播放 URL 在没有开启 URL 鉴权的情况下获取的 URL 是永久可以访问的,但是在开启鉴权后获取的 URL 是带有 auth_key 参数的,对应的 URL地址也是存在有效时间的,超过有效时间将出现 403 的错误。
2. 使用播放鉴权播放
播放鉴权是视频点播在阿里云 AK 安全认证基础上的二次鉴权机制。播放鉴权的机制是根据使用不同的终端设备播放器的 SDK 提供了不同的鉴权 Key,然后用户可以使用账号的 AccessKeyId 和 AccessKeySecret 结合对应客户端播放鉴权进行播放即可。我们分别提供了html5、flash、android和IOS不同平台的鉴权,查看方法如图1所示。
图 1. 点播播放鉴权示意图
对应的web端实例代码请参考如下demo:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<link rel="stylesheet" href="http://g.alicdn.com/de/prismplayer/1.6.3/skins/default/index.css" />
<script type="text/javascript" src="http://g.alicdn.com/de/prismplayer/1.6.3/prism.js"></script>
</head>
<body>
<div class="prism-player" id="J_prismPlayer"></div>
<script>
var player = new prismplayer( {
id: "J_prismPlayer",
autoplay: true,
width: "1920px",
height: "1280px",
//播放方式二
prismType:2,
//固定参数
vid : '视频ID',
accId : '用户AK id,推荐子账号',
accSecret : '用户AK secret,推荐子账号',
apiKey : 'H5播放器对应的播放密钥',
flashApiKey : 'Flash播放器对应的播放密钥',
});
</script>
</body>
</html>
注意:
- 上述的 AccessKeyId 和 AccessKeySecret 推荐使用 RAM 子账号进行设置,因为该页面是展示在前端的应用或者页面中,需要进行更细粒度的安全控制,仅需要给该子账号赋权 AliyunMTSPlayerAuth 即可。
- 上述方式由于多个参数均是固定参数并且没有时间限制导致可能出现安全风险,因此建议尽量避免使用本方法。
- 上述的方法可以同时配置 apiKey 和 flashApiKey 的话将可以使用兼容模式同时在 html5 和 flash 模式下播放。
3. 使用播放凭证播放
播放凭证方式播放是通过 vid 和临时播放凭证(playAuth)进行播放的,由于 playAuth 是服务器端根据AccessKeyId 和 AccessKeySecret 获取的,并且是有 100 秒的有效时间的,因此较为有效的保护资源的安全性的。具体的 web 端播放的 demo 如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<title>用户测试用例</title>
<link rel="stylesheet" href="//g.alicdn.com/de/prismplayer/1.9.9/skins/default/index.css" />
<script type="text/javascript" src="//g.alicdn.com/de/prismplayer/1.9.9/prism-min.js"></script>
</head>
<body>
<div class="prism-player" id="J_prismPlayer" style="position: absolute"></div>
<script>
var player = new prismplayer({
id: 'J_prismPlayer',
width: '100%',
autoplay: false,
vid : '',
playauth : '',
});
</script>
</body>
</html>
注意:
- playAuth 我们提供的 SDK 均是服务器端的 SDK,包括有Java、.net、php和 python 的版本,其主要原因是因为 playAuth 生成由于涉及到 AccessKeyId 和 AccessKeySecret 因此不建议在客户端直接生成,而建议客户端向服务器端发请求获取 playAuth 后直接播放,如果用户一定需要在客户端获取的话是需要使用我们提供的 api 接口实现的,其文档请参考:获取视频播放凭证;
- playAuth 可以通过有效时间保护视频资源,但是其并不能完全避免盗链的情况发生,建议如果是 flash 播放器 hls 资源可以考虑使用视频点播提供的内容加密功能,详细请参考:内容加密
播放异常排查
使用上述播放方式播放点播中的资源时经常会出现无法正常播放的情况,建议我们可以考虑如下的步骤逐个排查其无法播放的详细原因并修改。
- 域名解析导致播放异常
视频点播在开通服务时即需要用户绑定自己的域名到视频点播服务中。而视频点播中所有的视频都是需要通过该域名提供链接进行播放的,因此该域名的解析配置正确将是能够正确播放的第一步。
视频点播的域名管理截图如图 2 所示。视频点播是可以添加多个域名在视频点播服务中的,但是同一时间启用的仅能够有一个域名。在配置完域名后需要用户到 DNS 提供商出配置该域名解析到视频点播提供的 CNAME 地址上才可以正常访问的。
图 2. 点播域名管理示意图
注意:
- CNAME 记录和其他的 A 记录是相冲突的,因此某个域名解析到视频点播的话是无法再解析到其他的服务器的,因此这里建议使用还没有使用的子域名后添加并设置解析,而不要使用绑定在站点上的主域名。
2、DNS 解析配置截图请参考图 3,其中记录类型是需要选择“CNAME”,主机记录填写子域名的记录值,例如图 2 中的子域名为 vod ,那么这里我们应该填写的即是 vod 。记录值填写视频点播提供的完整的 CNAME 域名,如图 2 中的 vod.xxxx.com.danuoyi.tbcache.com。
图 3. DNS解析示意图
- 防盗链设置导致播放异常
在设置完成上述解析后会可以通过视频点播控制台的播放功能测试是否正常的。当出现控制台播放正常,但是通过上述方法播放测试仍然有问题时刻查看安全防护设置是否禁止了访问。
防盗链是通过 HTTP 请求头中的 Referer 字段来控制访问来源是否允许,具体的设置请参考图 4,可以分别选择 Referer 白名单或者 Referer 黑名单,两者仅能够同一时间生效一种。当设置了之后就会仅允许或者限制某些 Referer 头访问。
图 4. 点播防盗链示意图
图5的示例即是被Referer防盗链限制的结果。
图 5. 防盗链拦截示意图
- 播放凭证选择错误导致播放异常
当使用上述第二种播放方式时需要根据对应的播放器终端设备选择对应的播放凭证,如果设置错误的话将会导致无法播放,用户需要根据客户端选择正确的播放凭证。另外针对于 web 播放器的兼容模式可以同时设置 apiKey 和flashApiKey 参数保证同时在 flash 和 html5 播放正常。
4)playAuth 超时导致播放异常
当采用上述第三种播放方式播放时需主要获取 playAuth 的业务逻辑,由于playAuth 仅有 100 秒的有效时间,超过该有效时间后将导致新发起的播放请求无法播放(但是不影响正在播放的视频),因此业务端需要在少于 100 秒更新一次 playAuth 。