【视频点播最佳实践】视频点播播放异常排查

阿里云视频点播是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速、视频播放于一体的一站式音视频点播解决方案。但是对于使用者来说经常遇到的问题即是视频点播中的视频如何对外提供服务,并且当播放出现异常时如何进行排查呢?本文主要从该方面为大家介绍视频点播的播放方式和异常排查。

播放方式

视频点播提供了三种方式进行播放分别适用于不同的场景。用户可以根据自己的使用场景选择合适的方法进行播流,下面依次介绍该三种播放方式:

1. 使用播放URL进行播放

视频点播的使用是存储在产品统一的 Bucket 中,因此与 OSS 中的视频都可以直接简单获取 URL 进行访问方式不同。产品统一的并不属于用户自己,因此用户是无法通过自己账号的 AccessKeyId 和 AccessKeySecret 获取播放的权限。
用户获取视频播放 URL 是需要通过视频点播提供的 GetPlayInfo 接口获取播放信息,具体接口信息请参考获取视频播放地址,该接口会根据用户在视频点播配置的转码规则分别提供所有的转码后的资源的 URL 以及对应的视频的基本信息。
注意
1. 对于所有状态不是“正常”状态的视频资源将无法调用该接口(例如:转码中、审核中等执行状态),否则将直接抛出错误:Forbidden.IllegalStatus : Status of the video is illegal。
2. 对于内容加密的视频通过该接口获取得到的播放 URL 是不需要解密播放并且可以直接下载得到该视频,因此对于内容加密的视频并不适合与使用 URL 的方式进行播放。
3. 由于后续的两种方案都仅能够支持视频点播官方提供的播放器,如果需要使用第三方的播放器插件的话只能够使用本方法播放。
4. 播放 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>

注意
1. 上述的 AccessKeyId 和 AccessKeySecret 推荐使用 RAM 子账号进行设置,因为该页面是展示在前端的应用或者页面中,需要进行更细粒度的安全控制,仅需要给该子账号赋权 AliyunMTSPlayerAuth 即可。
2. 上述方式由于多个参数均是固定参数并且没有时间限制导致可能出现安全风险,因此建议尽量避免使用本方法。
3. 上述的方法可以同时配置 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>

注意
1. playAuth 我们提供的 SDK 均是服务器端的 SDK,包括有Java、.net、php和 python 的版本,其主要原因是因为 playAuth 生成由于涉及到 AccessKeyId 和 AccessKeySecret 因此不建议在客户端直接生成,而建议客户端向服务器端发请求获取 playAuth 后直接播放,如果用户一定需要在客户端获取的话是需要使用我们提供的 api 接口实现的,其文档请参考:获取视频播放凭证;
2. playAuth 可以通过有效时间保护视频资源,但是其并不能完全避免盗链的情况发生,建议如果是 flash 播放器 hls 资源可以考虑使用视频点播提供的内容加密功能,详细请参考:内容加密

播放异常排查

使用上述播放方式播放点播中的资源时经常会出现无法正常播放的情况,建议我们可以考虑如下的步骤逐个排查其无法播放的详细原因并修改。
1. 域名解析导致播放异常
视频点播在开通服务时即需要用户绑定自己的域名到视频点播服务中。而视频点播中所有的视频都是需要通过该域名提供链接进行播放的,因此该域名的解析配置正确将是能够正确播放的第一步。
视频点播的域名管理截图如图 2 所示。视频点播是可以添加多个域名在视频点播服务中的,但是同一时间启用的仅能够有一个域名。在配置完域名后需要用户到 DNS 提供商出配置该域名解析到视频点播提供的 CNAME 地址上才可以正常访问的。
                                    
                                                                        图 2. 点播域名管理示意图

注意
1. CNAME 记录和其他的 A 记录是相冲突的,因此某个域名解析到视频点播的话是无法再解析到其他的服务器的,因此这里建议使用还没有使用的子域名后添加并设置解析,而不要使用绑定在站点上的主域名。
2、DNS 解析配置截图请参考图 3,其中记录类型是需要选择“CNAME”,主机记录填写子域名的记录值,例如图 2 中的子域名为 vod ,那么这里我们应该填写的即是 vod 。记录值填写视频点播提供的完整的 CNAME 域名,如图 2 中的 vod.xxxx.com.danuoyi.tbcache.com。
                                    
                                                                        图 3. DNS解析示意图

2. 防盗链设置导致播放异常
在设置完成上述解析后会可以通过视频点播控制台的播放功能测试是否正常的。当出现控制台播放正常,但是通过上述方法播放测试仍然有问题时刻查看安全防护设置是否禁止了访问。
防盗链是通过 HTTP 请求头中的 Referer 字段来控制访问来源是否允许,具体的设置请参考图 4,可以分别选择 Referer 白名单或者 Referer 黑名单,两者仅能够同一时间生效一种。当设置了之后就会仅允许或者限制某些 Referer 头访问。

                                    
                                                                        图 4. 点播防盗链示意图

图5的示例即是被Referer防盗链限制的结果。
                                    
                                                                        图 5. 防盗链拦截示意图

3. 播放凭证选择错误导致播放异常
当使用上述第二种播放方式时需要根据对应的播放器终端设备选择对应的播放凭证,如果设置错误的话将会导致无法播放,用户需要根据客户端选择正确的播放凭证。另外针对于 web 播放器的兼容模式可以同时设置 apiKey 和flashApiKey 参数保证同时在 flash 和 html5 播放正常。
4)playAuth 超时导致播放异常
当采用上述第三种播放方式播放时需主要获取 playAuth 的业务逻辑,由于playAuth 仅有 100 秒的有效时间,超过该有效时间后将导致新发起的播放请求无法播放(但是不影响正在播放的视频),因此业务端需要在少于 100 秒更新一次 playAuth 。

时间: 2024-08-31 13:27:50

【视频点播最佳实践】视频点播播放异常排查的相关文章

打造立体化监控体系的最佳实践——分布式调用跟踪和监控实践

摘要: 本文将从分布式系统调用的复杂现状说起,具体分析调用链的三大使用场景,以及调用链的最佳实践,简述如何将调用链作为排查问题的核心,通过其可以将各类数据关联在一起,提高问题排查能力. [最新快讯]EDAS上线方法追踪新特性,打通应用诊断的"最后一公里". 1. 分布式调用系统的现状 当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务.消息收发.分布式数据库.分布式缓存.分布式对象存储.跨域调用,这些组件共同构成了繁杂的分布式网络. 如上图右侧

打造立体化监控体系的最佳实践

1. 分布式调用系统的现状 当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务.消息收发.分布式数据库.分布式缓存.分布式对象存储.跨域调用,这些组件共同构成了繁杂的分布式网络. 如上图右侧所示,当应用A发出某个请求时,其背后可能有数十个甚至更多的服务被调用,可谓是"牵一发而动全身". 如果将分布式系统比作高速公路网,每个前端的请求就相当于高速上行驶的车辆,而处理请求的应用就是高速上的收费站,在收费站上将车辆通行信息记录成日志,包括时间.车牌.

DB2 存储过程开发最佳实践

转自http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0604changhp/   DB2 存储过程开发最佳实践 常 伟 (changwei@cn.ibm.com), 软件工程师,IBM CSDL 常红 平 (changhp@cn.ibm.com), 软件工程师,IBM CSDL 简介: 本 文以 DB2 开发人员的角度介绍了在 DB2 存储过程开发中需要注意的事项和技巧.新手如果能够按照本文介绍的最佳实践来开发存

Android异常处理最佳实践_Android

一个好的app 异常处理机制 我认为应该至少包含以下几个功能: 1.能把错误信息上传到服务器  让开发者可以持续改进app 2.错误信息至少应该包含 是否在主进程 是否在主线程 等可以帮助程序员定位的信息 3.最好包含手机硬件及软件信息. 4.主进程引发的异常 最好交由系统自己处理 也就是让用户可以感知到 那种(当然你也可以自己定义一套更有意思的感知系统对话框等,具体可参考各种有意思的404界面) 5.子进程引发的异常最好别让用户感知到.比如push之类的 这种 和用户感知弱关联的这种.最好发生

专有网络(VPC)使用最佳实践

专有网络VPC(Virtual Private Cloud)是用户基于阿里云创建的自定义私有网络, 不同的专有网络之间二层逻辑隔离,用户可以在自己创建的专有网络内创建和管理云产品实例,比如ECS.负载均衡.RDS等. 本文,会先对 VPC 的使用限制和常见误区进行说明,然后介绍 VPC 的使用最佳实践. VPC 和 VPC 相关组件的介绍 在开始使用 VPC 之前,建议您务必阅读如下文章,了解 VPC 和 VPC 相关组件的介绍: 专有网络 VPC 的介绍 弹性公网 IP 概述 NAT 网关产品

【最佳实践】如何使用云监控+日志服务快速完成故障发现和故障定位

今天分享一篇开发小哥哥如何使用云监控和日志服务快速发现故障定位问题的经历. 事件起因 小哥哥正在Coding,突然收到云监控报警,说他的API调用RT过高,小哥哥的业务主要为线上服务提供数据查询,RT过高可能会导致大量页面数据空白,这还了得,赶紧查. 排查过程 收到报警后查看指标趋势,发现突然RT突然增高. 查看单台机器维度的指标,发现30.239这台机器RT延时非常大. 具体机器的RT走势图: 查看存储在日志服务的原始数据,查看发生问题时的原始日志,发生某一次请求的rt突然变的很大,之后的rt

【直播】React、AliSQL、BeeHive、JStorm等8大阿里开源项目最佳实践分享

  本次峰会精选了目前较为活跃的阿里开源项目,其中较为有看点的是:在GitHub上拥有超过一万Star.在阿里内部落地超过400个项目的React 组件库 antd在蚂蚁金服的实践:MariaDB基金会唯一的中国成员详解AliSQL功能特性:已在天猫.喵师傅,天猫家装等App中应用大型iOS项目解耦方法--BeeHive:Android平台页面路由框架ARouter的一手开发经验:开源的 Android 平台上的秒级编译方案.阿里巴巴 Github 下排行前十的开源项目Freeline背后的奥秘

负载均衡(SLB)使用最佳实践

负载均衡(Server Load Balancer,下文简称 SLB)的引入,可以降低单台云服务器 ECS(下文简称 ECS)出现异常时对业务的冲击,提升业务的可用性.同时,结合弹性伸缩服务,通过动态调整后端服务器,可以快速对业务进行弹性调整(扩容或缩容),以快速应对业务的发展. 本文,会先对 SLB 的使用限制和常见误区进行说明,然后介绍 SLB 的使用最佳实践. SLB 基础原理 在开始使用 SLB 之前,建议您务必阅读如下文章,了解 SLB 的相关基础原理: 负载均衡技术原理浅析 负载均衡

负载均衡健康检查的使用误区和最佳实践

本期分享专家:隽勇, 曾就职微软,擅长网络.Windows相关技术,网络问题的终结者,现就职阿里云专注于弹性计算方面的技术研究,"对技术负责,更对用户负责" 针对客户反馈的问题,不但要解决,还要总结分析,隽勇针对SLB问题进行了分析总结,发现大家遇到的很多负载均衡(简称 SLB)异常问题都与健康检查配置相关.不合理的健康检查策略可能会导致很多问题出现: 例如: · 健康检查间隔设置过长,无法准确发现后端 ECS 出现服务不可用,造成业务中断. · 使用 HTTP 模式健康检查,未合理配