不少直播都是基于 CDN 来实现的。而经过声网的服务,或基于声网SDK与 CDN 结合,还能够实如今直播中的连麦互动、白板同步等强调实时性的场景。本文源自社区投稿,介绍了该场景下的一些基础知识。如你们存有疑问,能够与做者交流。html
对于直播业务场景,你们遇到问题时候得到的第一现场大多数都是从CDN观众端感觉到,好比拉流发现主播卡了,有杂音,模糊,不出图等一类现象。在排查这类问题时候,其实从范围上讲,咱们须要从两部分去排查。咱们实时音视频云结合CDN直播构建的场景以下图所示:web
左边是声网实时音视频云部分,右边是转推到CDN部分。问题上报点观察到的现象是在右边观众端。那很明显问题可能发生在声网A区也可能发生在B区。浏览器
因此为了确认范围,能够先了解排查下B区。缓存
那对于实时音视频开发的同窗可能对CDN不是很了解。这篇短文主要目的是介绍下CDN,CDN直播有关的一些基础知识和概念,已经简单的问题排查方式。服务器
你们使用CDN云厂商的一个基础就是云存储,云存储是对象存储。首先,一个文件包含了了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(如下简称数据)。对象存储区别于块存储(DAS,SAN)和文件存储(NAS系统,NFS,CIFS),核心是将数据通路(数据读或写)和控制通路(元数据)分离,构成键值对,访问时候经过key访问。因此云存储访问时候能够经过HTTP协议post,get请求经过key值去下载数据访问。网络
云录制服务就是经过和CDN 结合,录制下的内容存放在云端,云存储。负载均衡
存储只是存放在一台或多台服务器上可是地点是单一的,若是对于用户分布分散业务来讲,访问确定是低效缓慢一个是I/O压力,一个是地区偏远的来讲访问速度慢。ide
这种状况结合使用CDN服务能够有效解决。post
CDN的基本原理是普遍采用各类缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工做正常的缓存服务器上,由缓存服务器直接响应用户请求。测试
1. 用户向浏览器输入 www.web.com 这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求; 2.网站的DNS域名解析器设置了CNAME,指向了www.web.51cdn.com,请求指向了CDN网络中的智能DNS负载均衡系统; 3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户; 4.用户向该IP节点(CDN服务器)发出请求; 5.因为是第一次访问,CDN服务器会向原web站点请求,并缓存内容; 6.请求结果发给用户。 CDN加速能够作网页加速,下载文件加速,动态加速,那和咱们音视频相关的主要是点播加速以及CDN直播,以下图:
CDN相关基本概念以下:
加速域名: 由用户提供的须要被CDN加速的域名 源站地址: IP或域名,CDN节点从这里获取原始资源 边缘节点:CDN分发的载体,能够理解成离用户最近的缓存节点 回源: CDN边缘节点未命中时会从源站拉取资源 平台类型: 被加速资源的类型,如WEB页面、大文件下载、视频点播等等 缓存策略: CDN服务器保存的一套针对用户文件的缓存策略,根据缓存策略判断文件是否超时须要回源 防盗链: 终端用户访问加速域名下的资源时,CDN服务器根据此配置判断是否应该提供资源 刷新: 清除CDN缓存节点指定的文件或目录资源 预取: 将文件资源预加载到CDN缓存节点 运营商:电信,联通,移动,长城宽带等区域:上海,广东,江苏,浙江......等 区域覆盖:本运营商本地覆盖,跨运营商本地覆盖,本运营商跨区覆盖,跨运 营商跨区覆盖。
CDN直播是和咱们直播业务场景最紧密的部分了。借用一下阿里官网的直播图以下,各厂商CDN直播服务都是如此。
好比我申请了域名是 abc.com,那么在CDN那边厂商生成的一对推拉流地址格式以下:
推流地址: rtmp://xxpull.abc.com/(直播空间名或者有些叫APPNAME)/(流名/streamname) 拉流地址有三种: rtmp://xxpull.abc.com/(直播空间名或者有些叫APPNAME)/(流名/streamname)
上面流名能够随时建立,一个流名就表明一组流。 咱们能够看到拉流有三种格式:rtmp,m3u8(HLS),flv(Http-flv) 你们可能比较关心这三种拉流的区别:
协议 | HTTP-FLV | RTMP | HLS |
---|---|---|---|
全称 | RTMP over Http | Real Time Message Protocol | HTTP Living Streaming |
传输层 | HTTP长连接 | TCP 长连接 | HTTP短连接 |
视频格式 | flv | flv | TS文件(m3u8) |
原理 | 同RTMP,协议端口80 | 每一个时刻数据收到当即转发 | 集合一段时间数据,生成ts 切片更新m3u8索引 |
延时 | 3~5s | 10~30s | 3~5s |
Web支持 | H5须要插件 | H5须要插件 | 支持 |
其余 | 播放时须要屡次请求网络要求高 | 须要flash,不便于seek | 跨平台支持差须要flash插件 |
注意: 网页端若是播放rtmp 或者flv 形式 的直播流,须要flash插件支持,因为手机web端基本没法调用flash插件,因此手机web端通常使用hls(即m3u8)的形式进行直播
如何选择拉流方式: PC/Phone+直播+实时性要求高:使用flash播放RTMP。 . PC/Phone+直播+没有实时性要求:使用RTMP或者HLS都可。 . PC/Phone+点播:使用HTTP-FLV或者HLS。 . PC/Phone+WEB+直播:想啥呢,老老实实用HLS吧。 再来看下我们的推拉流的域名地址:
rtmp://xxpull.abc.com/(直播空间名或者有些叫APPNAME)/(流名/streamname)
客户本身提供的一级域名是abc.com,而后再CDN厂商配置后生成二级域名xxpull.abc.com(推流)和xxpull.abc.com(拉流)。
而后客户须要本身在域名管理处本身将域名作个C记录(CNAME)到CDN提供的域名上面去。何为C记录?能够理解为就是我域名在CDN厂商的映射别名,这样子DNS解析后先解析到CDN厂商的CNAME而后,CNAME解析到CDN节点IP服务器推拉流。
关于上面的地址,还有一点是咱们看到有时候地址后面问号?后还有一串内容,这是鉴权。直播推拉流鉴权基本都是时间戳鉴权,时间戳+token的格式。
理解了地址接下来咱们遇到CDN集成直播推不了问题能够先作下简单排查,排查是不是在CDN直播部分配置相关问题。
接下来,拿出地址里面的域名,dig/nslookup一下看下解析如何,
上图结果是正常的,域名有C记录对应到CDN厂商的域名,CDN厂商的域名能够解析附近可用的CDN节点服务器IP,这个结果告诉咱们域名配置是OK的,可是配置OK不表明必定可用。接下来检查本地访问到的CDN节点是哪里,以下图
ping返回的IP 218.92.209.38, 检查这个IP的地址以及运营商,www.ipip.net/ip.html
能够访问这个 [ping.huatuo.qq.com 查看本地出口IP] (ping.huatuo.qq.com查看本地出口ip/)