Android直播技术之(四):CDN

1.CDN技术原理
CDN的全程为 Content Delivery Network,即内容分发网络,是一个策略性部署的整体系统,主要用来解决由于网络带宽小/用户访问量大/网点分布不均匀等造成的用户访问网站速度慢的问题.这中间会有很多CDN节点,简单理解就相当于让计算机选择最优网络.具体实现是通过在现有的网络中增加一层新的网络架构,将网站内容发布到离用户最近的网络节点上.这样用户就可以就近获取所需内容,解决之前的网络拥塞/访问延时高的问题,提高用户体验.如图:
Android直播技术之(四):CDN_第1张图片
同时对于不同流媒体所使用的节点和协议做了区分,使网络拥塞和访问延时减少,带宽得到良好控制等,在CDN直播中常用的流媒体协议包括 RTMP/HLS/HTTP-FLV等.
RTMP:全称 Real Time Messaging Protocol 它是基于TCP协议,是由Adobe公司为Flash播放器和服务器之间进行音视频传输开发的开放协议.
HLS:全称 HTTP Live Streaming 基于HTTP协议,是Adobe公司开放的音视频传输协议.
HTTP-FLV则将RTMP封装在HTTP协议之上,可以更好地穿透防火墙等

2.CDN的常用架构
CDN架构设计比较复杂,而且不同的CDN厂商也对其架构进行不断的优化,所以不能同一而论,这里只做一些基本的结构简单分析
CDN主要包含:源站/缓存服务器/智能DNS/客户端等几个主要组成部分
**源站:**是指发布内容的原始站点,添加/删除和更改网站的文件都是在源站上进行,另外缓存服务器所抓取的对象也全部来自源站,对于直播来说,源站为主播客户端.
**缓存服务器:**是直接提供给用户访问的站点资源,由一台或书台服务器组成.当用户发起访问时,其访问请求被智能DNS定位到离他较近的缓存服务器,如果用户所请求的内容刚好在缓存里,则直接把内容返回给用户;如没有,则缓存服务器想临近的缓存服务器或直接向源站抓取内容,然后返回给用户.
**智能DNS:**它是整个CDN技术的核心,主要根据用户的来源,及当前缓存服务器的负载情况等,将其访问请求指向离用户比较近且负载较小的缓存服务器.通过智能DNS解析,让用户访问同服务商/敷在较小的服务器,可以缓解网络访问慢的情况,达到加速的作用.
**客户端:**即发起访问的普通用户,对于直播来说,就是观众.如:手机客户端/PC客户端等

CDN整个流程简单来说就是:主播开始进行直播,向智能DNS发送解析请求;智能DNS返回最优CDN节点的IP地址;主播采集音视频数据,发送给CDN节点,CDN节点进行缓存处理;观众要观看的这个主播的视频,向智能DNS发送请求解析;智能DNS返回最优的CDN节点IP地址;观众向CDN节点请求音视频数据;CDN节点同步其它节点的音视频数据;CDN节点将音视频数据发送给观众.

3.CDN的缺点
(1)播放延时(网络延时):这里指是从主播采集到的观众播放之间的时间差.这里不考虑采集队视频编码的时间,以及客户端播放视频进行解码时间,仅考虑网络传输中的延时.
(2)网络抖动:它是指数据包达到的顺序/间隔等与发送时不一致.比如发送100个数据包,每个包间隔1S发出.结果第20个包在传输过程中遇到网络拥塞,造成20不是紧跟着19到达,而是延迟到80后面才到.在直播中,这种抖动造成的效果实际上跟丢包一样,因为不能按照接收顺序把内容播放出来,所以造成失真.网络抖动会造成播放延时响应的增大.如果网络中抖动较大,会造成播放卡顿等现象
(网络丢包):CDN直播中用到的RTMP/HLS/HTTP-FLV等协议都建立在TCP协议基础之上.TCP的一个很重要特性就是可靠性,即不会发生丢失数据的问题.为了保证可靠性,TCP在传输过程中有三次握手.(首先客户端会向服务器发送请求连接,服务器同意后,客户端会确认这次链接,这就是三次握手,这里就不具体说明了,大家可以自行查找相关资料).接着客户端开始发送数据,每次发送一批数据,得到服务器的"收到"命令后,继续发送下一批.TCP协议为了保证数据传到目的地,会有自动重传机制.如果传输中发生丢包,没有收到对方发出的"收到"信号,那么就会自动重传丢失的包,一直到超时.
由于互联网的网络状况是变化的,加之主播端网络状况是无法控制的,因此当网络中的丢包率开始升高时,重传会导致延时不断加大,甚至导致不断尝试重连等情况,这样不能有效缓存,在严重情况下甚至会导致观众端无法观看视频.

你可能感兴趣的:(安卓,Android,直播技术)