当前位置: 首页 > 编程日记 > 正文

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

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

播放方式

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

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所示。
                                    image
                                                                        图 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 地址上才可以正常访问的。
                                    image
                                                                        图 2. 点播域名管理示意图


注意

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

image
                                                                        图 3. DNS解析示意图

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

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

image
                                                                        图 4. 点播防盗链示意图


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

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

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

相关文章:

Java程序员技术培训需要培训哪些?

随着java技术行业的不断发展&#xff0c;越来越多的人想要学习java技术&#xff0c;那么想要成为一名优秀的java工程师&#xff0c;需要学习的技术知识是非常多的&#xff0c;下面小编就为大家详细的介绍一下Java程序员技术培训需要培训哪些? Java程序员技术培训需要培训哪些?…

VS2008 VS2010发布网站时如何产生固定命名的 Dll 文件

VS2008 发布网站时如何产生固定命名的 Dll 文件dev.firnow.com 时间 &#xff1a; 2010-12-08 作者&#xff1a;网络 编辑&#xff1a;fnw 点击&#xff1a; 82 [ 评论 ]--VS2008 在发布网站时&#xff0c;bin 目录里为所有 cs 生成的 dll 文件每次都是随机命名的&#…

LeetCode实战:两数相加

题目英文 You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two nu…

计算机中的概念: 视图 VS 镜像

这两个概念还是不太一样的。下面来说说个人的理解&#xff0c;记录一下。 1. 镜像 镜像可以理解为一份完全一样的拷贝。也就是"深度拷贝"&#xff0c;一个复制品。 比如 iso映像文件&#xff0c;ubuntu-12.04.5-desktop-amd64.iso 比如 数据的多副本&#xff0c;用于…

Python入门学习方法有哪些?

Python编程语言是相对比较简单的一门编程语言&#xff0c;在IT行业&#xff0c;很多零基础学员都会优先选择Python语言进行学习&#xff0c;希望可以进入到IT这个大家庭&#xff0c;那么想要学好Python编程&#xff0c;针对Python入门学习方法有哪些呢?来看看下面的详细介绍。…

LeetCode实战:寻找两个有序数组的中位数

题目英文 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). You may assume nums1 and nums2 cannot be both empty. Example 1: nums1 …

从Preact了解一个类React的框架是怎么实现的(一): 元素创建

首先欢迎大家关注我的掘金账号和Github博客&#xff0c;也算是对我的一点鼓励&#xff0c;毕竟写东西没法获得变现&#xff0c;能坚持下去也是靠的是自己的热情和大家的鼓励。  之前分享过几篇关于React的文章: React技术内幕: key带来了什么React技术内幕: setState的秘密其…

呵呵,哈哈,嘿嘿,从今天起就开始写博客文了

第一篇嘛&#xff0c;完完全全的水篇&#xff0c;因为确实不知道该写些什么好啦&#xff0c;恩&#xff0c;哈&#xff0c;以后就多写一些的了&#xff0c;嘘&#xff0c;玩别的去了&#xff01;拜拜&#xff01;转载于:https://www.cnblogs.com/thinkgao/archive/2011/04/26/2…

UI设计培训怎么选择就业方向

相信大部分人学习UI设计就是为了找到一份不错的工作&#xff0c;那么UI设计培训怎么选择就业方向呢?UI设计师有哪些就业方向选择呢?来看看下面的详细介绍吧。 UI设计培训怎么选择就业方向? 图形设计&#xff1a;图形设计不仅仅是美术的设计。在UI设计的工作中&#xff0c;图…

用JavaScript获取URL中的参数值

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>测试JS获取…

LeetCode实战:最长回文子串

题目英文 Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example 1: Input: "babad" Output: "bab" Note: "aba" is also a valid answer.Example 2: Input: &quo…

2017年9月11日 梁勇 java教材 编程练习题 第二章 2.15 键盘 读取两个点的坐标值(小数),控制台输出两点间距离。...

package com.swift;import java.util.Scanner;public class PToP {public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println("请输入第一个点的坐标值x1");Double x1Double.parseDouble(scan.nextLine());System.out.printl…

学习java技术有前途吗

java技术在我国的普及已经是非常广泛的了&#xff0c;很多人都知道&#xff0c;java行业的发展前景是非常好的&#xff0c;但竞争压力也是非常大的&#xff0c;到底学习java技术有前途吗?来看看下面的详细介绍。 学习java技术有前途吗?目前按照各类招聘来看&#xff0c;Java的…

充分理解表达式——《狂人C》习题解答2(第二章习题5)

/* 编程求1357911。 */ #include <stdio.h> #include <stdlib.h>int main( void ) {printf ("1357911") ; printf ("%d\n" , 1 3 5 7 9 11 ) ;system("PAUSE"); return 0;}这个题目的主要目的有两个&#xff1a; 1.掌握写整…

LeetCode实战:整数反转

题目英文 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321Example 2: Input: -123 Output: -321Example 3: Input: 120 Output: 21Note: Assume we are dealing with an environment which could only store integers …

深度洞悉2017企业IT三大关注焦点

本文讲的是深度洞悉2017企业IT三大关注焦点【IT168 云计算】随着经济走向整体放缓&#xff0c;2017有哪些议题会受到企业IT的关注? 一&#xff1a;如何提升员工工作体验 随着80后、90后成为职场主力军&#xff0c;数字化工作场所的推行与建立日渐成为主流&#xff0c;企业将更…

APP测试和传统软件测试有什么区别

APP测试和传统软件测试有什么区别?APP测试和传统测试是有一些区别的&#xff0c;移动APP的特点使得它与传统软件在开发、测试方面都有所不同。比较移动APP测试与传统软件测试的不同&#xff0c;要从以下几个方面进行考虑&#xff1a; (1) 页面布局不同 对于传统软件&#xff0…

LeetCode实战:字符串转换整数 (atoi)

题目英文 Implement atoi which converts a string to an integer. The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or…

[C#] enum 枚举

默认情况下&#xff0c;枚举第一个值是0&#xff0c; 可显式为枚举赋值。 可以定义枚举的基础类型&#xff0c;如enum E : short {}, sizeof(E) 2&#xff1b;默认情况下是int。 枚举的继承链&#xff1a;ValueType->Enum->enum 枚举类型和基础类型之间的转换都是显式的…

制作Windows Mobile程序安装包

使用Visual Studio 2005制作wm上的cab安装包 打开项目&#xff0c;解决方案中添加新项&#xff0c;添加"智能设置CAB项目"&#xff1b;或者在空VS中新建一个"智能设置CAB项目" 添加新项 左侧的Program Files文件夹&#xff0c;没用可以删除 添加项目主输出…

学Java需要下载什么软件?都有什么作用?

学习java并非大家想象中的那么简单&#xff0c;除了书本和老师面授&#xff0c;软件的使用也有很大的作用&#xff0c;接下来小编为大家分享的就是关于“学Java需要下载什么软件?都有什么作用?”的内容&#xff0c;希望能够给正在学习java知识的同学带来帮助。 学Java需要下载…

一种新的攻击方式:使用Outlook 表单进行横向渗透和常驻

本文讲的是一种新的攻击方式&#xff1a;使用Outlook 表单进行横向渗透和常驻&#xff0c;背景最近我们针对CrowdStrike服务进行例行调查&#xff0c;发现了一种攻击方法&#xff0c;其主要用于横向渗透和系统常驻&#xff0c;而且是以前我们没有看到过的。这种攻击利用Microso…

ACM 1740 A New Stone Game http://acm.pku.cn/JudgeOnline/problem?id=1740

题目大意:有N堆石头,每堆石头数目在1到100之间,最多有10堆.两人分别取走石头.取石头的规则是:每次只能从1堆中取,每次取走至少1个.取过后还可以把这堆的石头任意分配到其它堆上(这些堆必须有石头,废话呵呵),当然也可以不分配.问给定这些石头堆的情况,两人轮流取,谁先取完谁胜利…

LeetCode实战:回文数

题目英文 Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward. Example 1: Input: 121 Output: trueExample 2: Input: -121 Output: false Explanation: From left to right, it reads -121. From ri…

安全测试的基本原则有哪些?

软件测试顾名思义就是要进行软件安全方面的测试&#xff0c;对于软件测试人员来说&#xff0c;软件安全是一个广泛而复杂的主题&#xff0c;完全避免软件安全缺陷问题是不切实际的&#xff0c;但通过安全测试可以发现并修复软件大部分安全缺陷。下面介绍一些安全测试的基本原则…

LeetCode实战:盛最多水的容器

题目英文 Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a conta…

微软极品Sysinternals Suite工具包使用指南

微软极品Sysinternals Suite工具包使用指南 按照名称首字母排序&#xff0c;点击每个蓝色标题链接都可以转到微软的对应官方页面&#xff0c;有对这些工具包的直接下载地址和更详尽的用法。因为每个软件几乎都可以长篇大论的介绍&#xff0c;所以&#xff0c;在此就只做简介和罗…

【布局】圣杯布局双飞翼布局

背景 随着前端技术的发展推进&#xff0c;web端的布局方式已基本成熟&#xff0c;那么在网站布局方式中&#xff0c;三列布局最为常用&#xff0c;布局方式也有很多&#xff0c;渐渐的开发者们开始从效率的角度优化自己的代码“如果三排布局能将中间的模块放在dom树前面&#x…

UI设计师面试如何操作才能获得高薪

UI设计师在近几年是非常吃香的&#xff0c;求职招聘网站上对于UI设计师的要求也越来越高&#xff0c;那么在面试的过程中UI设计师面试如何操作才能获得高薪呢?来看看下面的详细解析。 UI设计师面试如何操作才能获得高薪? 1、行为举止得体大方 我们先从仪态体态方面说&#xf…

HDU2673-shǎ崽(水题)

如果不能够直接秒杀的题&#xff0c;就不算水题。又应证了那句话&#xff0c;有时候&#xff0c;如果在水题上卡住&#xff0c;那么此题对于你来说&#xff0c;也就不算是水题了额~~ 刚睡醒&#xff0c;迷迷糊糊。 题目的意思很简单&#xff0c;求一个最大的&#xff0c;再求一…