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

播放方式

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

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解析示意图

  1. 防盗链设置导致播放异常
    在设置完成上述解析后会可以通过视频点播控制台的播放功能测试是否正常的。当出现控制台播放正常,但是通过上述方法播放测试仍然有问题时刻查看安全防护设置是否禁止了访问。

防盗链是通过 HTTP 请求头中的 Referer 字段来控制访问来源是否允许,具体的设置请参考图 4,可以分别选择 Referer 白名单或者 Referer 黑名单,两者仅能够同一时间生效一种。当设置了之后就会仅允许或者限制某些 Referer 头访问。


                                                                        图 4. 点播防盗链示意图

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

  1. 播放凭证选择错误导致播放异常
    当使用上述第二种播放方式时需要根据对应的播放器终端设备选择对应的播放凭证,如果设置错误的话将会导致无法播放,用户需要根据客户端选择正确的播放凭证。另外针对于 web 播放器的兼容模式可以同时设置 apiKey 和flashApiKey 参数保证同时在 flash 和 html5 播放正常。

4)playAuth 超时导致播放异常
当采用上述第三种播放方式播放时需主要获取 playAuth 的业务逻辑,由于playAuth 仅有 100 秒的有效时间,超过该有效时间后将导致新发起的播放请求无法播放(但是不影响正在播放的视频),因此业务端需要在少于 100 秒更新一次 playAuth 。

【视频点播最佳实践】视频点播播放异常排查相关推荐

  1. 自定义异常最佳实践_播放,自定义和组织媒体的最佳文章

    自定义异常最佳实践 Computers today are used for much more than generating documents, writing and receiving em ...

  2. 【视频点播最佳实践】使用OSS SDK上传视频到点播

    摘要: 场景 点播上传SDK缺乏需要的语言版本(如C/C++.Go等)或相应的功能(如网络流上传.追加上传),可以直接使用OSS的SDK进行上传. 准备工作 确认已开通点播服务并完成了相关配置.确认已 ...

  3. php核心技术与最佳实践 --- 错误与异常

    <?php /*php error*/ /** 异常和错误的概念不一样* 在PHP里,遇到任何自身错误都会触发一个错误,而不是抛出异常(对于一些情况,会同时抛出异常和错误)* 异常处理机制就是把 ...

  4. MySQL性能优化、故障排查及最佳实践秘籍,阿里云数据库专家玄惭的“武功”全记录...

    为什么80%的码农都做不了架构师?>>>    文章简介 玄惭,真名罗龙九,阿里云DBA专家,负责阿里云RDS线上稳定以及专家服务团队.他经历过阿里历年双11实战考验,积累了7年对阿 ...

  5. java 中的finally你知多少_Java 处理异常 9 个最佳实践,你知道几个?

    1. 在Finally中清理资源或者使用Try-With-Resource语句使用Finally Java 7的Try-With-Resource语句 2. 给出准确的异常处理信息 3. 记录你所指定 ...

  6. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践

    在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unche ...

  7. java 异常 最佳实践_处理Java异常的10种最佳实践

    java 异常 最佳实践 在本文中,我们将看到处理Java异常的最佳实践. 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专业的开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常. ...

  8. 处理Java异常的10种最佳实践

    在本文中,我们将看到处理Java异常的最佳实践. 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专家级开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常. 因此,最大的开发公司对如何 ...

  9. numberformatexception是什么异常_处理Java异常的9个最佳实践

    Java中的异常处理不是一个简单的主题.初学者发现很难理解,甚至有经验的开发人员也可以花几个小时讨论如何以及应该抛出或处理哪些异常. 这就是为什么大多数开发团队都有自己的如何使用它们的规则.如果你是一 ...

最新文章

  1. pyqt创建窗口没有句柄_Filament 渲染引擎剖析 之 FrameGraph 1 虚拟资源的定义与创建...
  2. 98年建模a题论文_2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题,定价评价...
  3. 01_字符串处理-----05_相似性度量
  4. UVa572 Oil Deposits DFS求连通块
  5. 比特币ABC推出最新版本后讨论网络不兼容性
  6. socket.io,io=Manager(source, opts)
  7. Android中的Service组件详解
  8. 京东双十一助推下沉市场消费升级,“消费平级”时代提前到来
  9. linux memalign、valloc函数
  10. python人脸识别训练模型生产_深度学习-人脸识别DFACE模型pytorch训练(二)
  11. Capistrano3 与 Mina
  12. 马斯克说,特斯拉卡车有Mad Max狂野模式,危险的变道操作?
  13. Java高并发之CountDownLatch源码分析
  14. 零基础如何学习 iOS 开发?
  15. Android——ECG心电图的绘制实现
  16. shell脚本中执行ssh
  17. 如何使用命令行合成一句话图片木马
  18. 【K8S实战】-超详细教程(三)
  19. Linux系统查看gcc,g++,java 等的版本
  20. 基于RISC-V架构的开源处理器及SoC研究综述

热门文章

  1. UIScrollView
  2. linux 安装输入法
  3. Python学习笔记二:布尔表达式
  4. 三维重建【一】——————(深度学习方式)
  5. IDEA函数调用关系图插件
  6. 利用GridView显示主细表并一次编辑明细表所有数据的例子
  7. 提高IIS网站服务器的效率的八种方法 (转载)
  8. 我的个人博客搭建记录
  9. dac生成信号频率取决于_DAC和AOC,谁将是数据通信领域最终赢家?
  10. python目标检测与识别_Python 使用Opencv实现目标检测与识别的示例代码