视频CDN缓存

落爺英雄遲暮 提交于 2020-02-11 01:43:06


video quality delivered by individual CDNs can vary substantially across clients (e.g., across different ISPs or content providers) and also across time (e.g., flash crowds) [39, 37]. Similarly,because the video player has only a few seconds worth of buffering and the bandwidth could fluctuate significantly, we need to make quick decisions (e.g., future bitrates) based on the current client buffer level and bandwidth so that the buffer does not drain out [27].

视频特点

-变化不大,生命周期很久
.切片文件较大,数量较少
没有办法在一个节点里放所有的内容,必须把内容切到不同的节点。同时热数据要不断的做交换,放到二级节点的后端,而且更有意思的是,大多数视频cdn会在前端的每台机器上都放置最热的视频内容。在两个视频网站中都得到过一个有意思的数据:几十G的内容能承担起全网百分之几十的流量。
视频云更关注直播流媒体
视频云就需要为直播播放终端提供秒开加速

视频网站具有用户群分散、视频文件存储量大、冷热内容不均衡、网络带宽压力大等特点。这些特点导致高清视频文件分发时存在缓冲时间长、启动时间慢、中断频繁等问题,严重影响用户体验。同时,一些受欢迎的视频往往会导致流量的突然增长,并经常给网站的基础设施带来巨大的压力。为了为更广泛的用户提供更好的观看体验,视频网站等内容提供商将更多地依靠视频cdn的加速,加快视频内容的分发,提高用户的观看体验。

1、文件存储容量。通常在线服务的视频,大小从几百KB到几个GB都有。总量方面轻松超出一台服务器的存储能力。所以,必须要有策略来决定哪些服务器存储哪些视频,这是个负载均衡策略
2、回源站时延。同样因为文件大,回源站一次要动则分钟级别的,用户肯定不能忍。所以,都是在视频准备好之后,推送到CDN服务器的,推送好一台,就允许这个服务器上这个文件对外服务。实际执行中用的是类似推送的方法,告知CDN服务器执行一个回源站拿视频的任务,而不是用户触发的。
3、回源站带宽问题。源站一般带宽也很小,一旦大量CDN服务器回源站同步也会干掉源站。所以,那时的策略是,生成同步任务时第一个copy首先生成,允许CDN服务器回源站拿视频。后续该文件的同步就都是走结点间同步了,没啥特殊情况不允许回源站。
4、视频分发。正因为不是所有CDN服务器都包含所有视频。所以用户请求视频时,往往返回一个
可用URL列表
供播放。客户端应该按照顺序尝试。列表的顺序会考虑到优先给距离用户近的服务器,当前各个服务器负载,以及数十种其他策略。
链接:https://zhuanlan.zhihu.com/p/101369871

视频参数

网络吞吐量
在流媒体播放的时候,客户端会有一个Buffer,播放器会以一定速率取走视频内容,网络会以一定速率填充Buffer,此处后者的速率就是所指的网络吞吐量。

码率,也叫做比特率:视频比特率是指要播放该视频,所需要每秒读取的该视频文件的比特(bit)数。单位为bps(Bit Per Second),比特率越高,每秒读取数据就越多,同等条件下画质就越好。
视频码率:是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高,这样表现出来的的效果就是:视频画面更清晰画质更高。

视频分辨率:分辨率就是我们常说的600x400分辨率、1920x1080分辨率,分辨率影响视频图像的大小,与视频图像大小成正比:视频分辨率越高,图像越大,对应的视频文件本身大小也会越大。

视频帧率:通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧;视频帧率影响的是画面流畅感,也就是说视频帧率超高,表现出来的效果就是:画面越显得流畅。你也可以这样理解,假设1秒只显1帧,那么一段视频看起来,就是有很明显的卡顿感,不流畅不连惯。当然视频帧率越高,意味着画面越多,也就相应的,这个视频文件的大小也会随之增加,占用存储空间也就增大了。

码率调整

什么是码率调整

感知网络环境的变化并作出合理的码率调整
在网络环境好时用户可以自主切到高码率档位,网络环境差时切到低码率档位。
有些主流的视频播放客户端也提供了自适应(自动)这个选项,比如YouTube,当用户选择这个选项后,运行在背后的码率自适应算法会根据当前的网络情况播放缓冲区等信息去自适应调整视频档位,旨在给用户提供更好的视频观看体验。

码率自适应技术

码率自适应技术 (Adaptive Bitrate Streaming,ABR)是一种视频码率可以根据网络状况或客户端播放buffer情况自动调整的视频传输技术
码率自适应算法(ABR)一般通过当前的网络状态或客户端播放缓冲区情况来动态地调整未来视频片段的码率档位以期最大化用户的QoE,近年来的ABR算法主要分为三类:

  • Rate-based: 基于预测的吞吐量去决策下一片段的码率档位,例如FESTIVE,这类方法的主要思想是通过历史视频分片下载期间的网络状况来预测未来的网络带宽,进而驱动视频码率决策,例如预测带宽高时选择高码率视频,预测带宽低时选择低码率视频。
  • Buffer-based: 基于客户端的播放缓冲区buffer情况决策下一片段的码率档位,例如BBA、BOLA。
  • Hybrid: 混合模式,同时考虑预测吞吐量和buffer信息决策下一片段的码率档位,例如MPC。

视频传输

实时传输视频,可以分为4个阶段:

  1. 将源视频发送到编码服务器;
  2. 服务器将视频转换为DASH,HLS或CMAF之类的格式;
  3. 使用CDN传输编码视频;(CDN技术,有的时候反而会增加视频直播的延迟,但是视频网站不得不使用CDN,因此直播平台的视频延迟中必然有一项是CDN带来的额外延迟。)
  4. 客户端播放器接收视频并解码。
    这四个阶段都会产生延迟,其中从视频拍摄到可以在终端用户设备上观看之间的总延迟被称为“端到端延迟”。
    其中的1,2,4产生延迟都是有一定的技术条件改善的,因为编码解码,现在都是使用分块传输编码技术,让客户端播放器在下载数据块甚至在数据块还在被创建时就开始播放它们。这个“块”有两层含义:
    CMAF或HLS块,是在关键帧上对齐的一小段(通常是1s);
    HTTP块,它只是在web上传递任何文件的一种方式。
    链接:https://www.zhihu.com/question/34815079/answer/976244451

基于HTTP的流媒体传输

HTTP块很重要,因为web客户端处理数据流的能力有限。大多数客户端只有在收到完整的HTTP响应,或者至少是完整的HTTP块之后,才能处理数据。通过使用HTTP分块传输编码,我们可以使视频播放器更快地开始解析和解码视频。分块编码通常可以将实时延迟降低到5或10秒。而这项技术之所以伟大,部分原因在于CDN广泛支持HTTP分块编码——20年来,它一直是HTTP规范的一部分。但是CDN带来的额外延迟则比较难解决。CDN使得低延迟的实时视频可以扩展并传输到数千或数百万并发的观众,但是当许多人同时请求一个直播片段时:如果视频分段还没有进入缓存,CDN通常会先为一小部分观众将整个文件拉入缓存,然后再为其他观众提供服务。简而言之,就是少部分人可以享受到低延迟的观看体验,而更多的人需要等待缓存,因而延迟就增加了。这是不可避免的,因为:为了避免源服务器超载,CDN服务器之间存在一种“缓存锁”,仅允许一台服务器在给定时间从源头请求特定文件。这就是CDN为直播视频带来额外延迟的根本原因,当一个文件被拉入缓存时,除了第一个请求它的用户之外,该文件无法被提供给任何其他用户。在此之前,可以使用分块编码是为了减少传输中的延迟,而到了这里,CDN却起了反作用。当然,现在的部分CDN服务商是有一定的技术条件帮助解决这一问题的:也即删除缓存锁。这个实际做起来比听起来要难很多,因为需要深入缓存的基础结构才能安全的实现这一改变。Cloudflare在19年初(或者18年底?)就解决了这一问题,他们把这种加速直播视频的技术叫做并行流加速,也即可以同时给全部设备拉取缓存。据Cloudflare的客户案例,他们帮助一个直播平台将P99延迟(过去的10秒内最慢的1%请求的平均延时)从1.5秒降低到了10毫秒以内,整体端到端延迟低了1.5秒,而这仅是CDN延迟的改善,如果加上他们本身的任播通信技术以及智能路由,他们其实可以将延迟进一步降低许多。

CDN cache服务器

什么是CDN

CDN全称为内容分发网络(Content Delivery Network),它是有美国麻省理工学院的学生发明的,最大的作用的就是缓存用户相对集中的资源,我们我们都用来缓存静态资源,也就是一段时间内不会改变的,例如图片、音乐、或者是视频。当然,CDN也可以用来做一些边缘计算,处理一些动态资源

CDN形象比喻

就像猫超会把货物提前存储在菜鸟建设在全国各地的本地仓库来减少物流时间一样,网站也可以预先把内容分发至全国各地的加速节点。这样用户就可以就近获取所需内容,避免网络拥堵、地域、运营商等因素带来的访问延迟问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
所以,"内容分发网络"就像前面提到的"全国仓配网络"一样,解决了因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。
首先通过预先做好了货物分发,使得最终货品从出仓到消费者手中的过程是比较短的,那么同城范围内可选择的配送公司就有很多选择,除了比较大的四通一达、顺丰以外,还可以选用一些小的物流公司、甚至菜鸟直接调用饿了么的蜂鸟配送也不是不可能。CDN技术消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量2、对于仓配系统来说,最大的灾难可能就是仓库发生火灾、水灾等自然灾害。如果把原来的一个集中式的大仓库打散成多个分布式的小仓库,分别部署在不同地区,就可以有效的减小自然灾害带来的影响。广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种DDoS攻击对网站的影响,同时保证较好的服务质量
链接:https://zhuanlan.zhihu.com/p/76789751

CDN 文件系统&&缓存机制

CDN的cache服务器一般都自己实现了一个文件系统,以一定大小分片为基本存储单位,而而当下游(也就是请求资源的用户)发起请求时,cache服务在向上游(就是提供资源的源站)拉取资源时,以一定的固定大小分片保存在自己文件系统的各个单位中,并有自己的索引方式可以找到各内容的各个分片和总体信息。关于效率,一般会采用LRU或LFU的算法把经常命中的内容存在内存内,以增加访问速度。此外linux系统自身vfs的缓存机制也有利于常用内容在内存中命中。同时因为分片存储必定伴随着分片淘汰,删除的高效方式是在删除的时候只删除对分片的索引,不删内容,且索引一般保存于内存,内容则在下次写入时直接覆盖。此外在随机淘汰之后,普通的文件系统会变得零散,而对于硬盘中零散的块,读写效率降低,怎样做到高效。目前比较先进的方案是采用随机读,顺序写的方式,也就是所谓COSS环形对象存储系统,这里不展开了

视频+cache

搭建视频网站CDN一般是由缓存服务器内容分发服务器两种服务器构成。缓存服务器(CDN节点)分布于世界各地,通过策略存储相关的视频内容;内容分发服务器则是将视频服务器上的视频内容根据一定策略分发到各个缓存服务器上。
举个简单的例子:当视频网站需要发布新视频时,视频服务器首先会将视频内容发送到CDN的内容分发服务器上,然后由该内容分发服务器会根据设定好的策略将视频内容发送到CDN各地缓存服务器上。当用户点击视频网站的视频时,视频网站会与CDN网络配合,根据用户地理位置(在哪里)、网络情况(电信、联通)为用户找到最好的缓存服务器。当然,视频网站使用CDN不仅能够减少视频服务器对带宽的需求,也能有效解决电信与联通不互通问题,以及隐藏真实的IP地址,保护视频服务器不受到攻击。

链接:https://www.zhihu.com/question/61846463/answer/194221178
链接:https://www.zhihu.com/question/34815079/answer/65360289

CDN实施技术

CDN技术可实施性条件除了客户端还包括:
1.给用户直接提供访问的站点资源,也就是所谓的缓存服务器;
2.缓存服务器所要抓取的内容均来自于原始站点,统称为源站;
3.用户的访问请求会通过DNS重定向技术指向距离用户较近的缓存服务器,从而抓取所需的内容返回给用户。
网站使用了CDN缓存加速后,用户发送请求访问,首先通过DNS重定向技术确认距离用户最近的CDN节点,并且将用户的请求指向此节点。
如果该节点没有客户需要的内容结果,缓存服务器就会在源站点服务器中搜寻客户的需要的内容结果,找到后将结果保存到缓存服务器的本地,最后将用户请求所需的内容结果返回至用户端。

保存是为了该用户或者不同用户第二次访问请求同样问题的结果,可以再很短的时间返回给客户结果,这样就加快了对用户端的响应速度。而且通过智能DNS解析后,用户访问同服务商的服务器,不管是用南方网络还是北方网络访问,都是相同的响应速度。

链接:https://www.zhihu.com/question/31805140/answer/96691217

用户访问网站步骤

引入CDN之后,用户访问网站一般经历以下步骤
当用户点击网站页面上的内容URL,先经过本地DNS系统解析,如果本地DNS服务器没有相应域名的缓存,则本地DNS系统会将域名的解析权交给CNAME指向的CDN专用DNS服务器。
CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回给用户。
用户向CDN的全局负载均衡设备发起URL访问请求。
CDN全局负载均衡设备根据用户IP地址,以及用户请求的URL,选择一台用户所属区域的区域负载均衡设备,并将请求转发到此设备上。
基于以下这些条件的综合分析之后,区域负载均衡设备会选择一个最优的缓存服务器节点,并从缓存服务器节点处得到缓存服务器的IP地址,最终将得到的IP地址返回给全局负载均衡设备:

  • 根据用户IP地址,判断哪一个边缘节点距用户最近;
  • 根据用户所请求的URL中携带的内容名称,判断哪一个边缘节点上有用户所需内容;
  • 查询各个边缘节点当前的负载情况,判断哪一个边缘节点尚有服务能力。
    全局负载均衡设备把服务器的IP地址返回给用户。
    用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

CDN全局负载均衡设备与CDN区域负载均衡设备根据用户IP地址,将域名解析成相应节点中缓存服务器的IP地址,实现用户就近访问,从而提高服务端响应内容的速度。
//摘自 https://zhuanlan.zhihu.com/p/76789751
视频直播CDN技术

据了解,2018年1月,**阿里云为虎牙提供了边缘节点服务(ENS)。基于阿里云ENS,可以轻松地将业务模块放到边缘运行,在主播的推流时,实现就近节点进行转码和分发,同时支持了高并发实时弹幕的边缘分发。**在获得网络低时延的同时,减少了对中心的压力,节省了30%以上的中心带宽成本,并且实现了边缘节点网络连接小于5毫秒延时,提升了主播上行质量,以及用户成功连接占比等数指标,有效提升了用户观看体验。ENS中最主要的技术就是CDN

链接:https://zhuanlan.zhihu.com/p/76789751

CDN全称为内容分发网络(Content Delivery Network),它是有美国麻省理工学院的学生发明的,最大的作用的就是缓存用户相对集中的资源,我们我们都用来缓存静态资源,也就是一段时间内不会改变的,例如图片、音乐、或者是视频。当然,CDN也可以用来做一些边缘计算,处理一些动态资源。网络不是四通八达的么?为什么需要CDN呢?

主要有两方面的原因,第一个是带宽,第二个是延迟。

带宽

有人会说,我们家是500兆的光纤,还怕带宽不够么?事实上,这个500兆,是你家跟运营商的带宽,而不是你跟服务器的。举个例子,假如中国跟美国之间有一条万兆光纤,苹果公司发布了新款的iPhone手机,并在他们的服务器上传了新iPhone手机的照片,因为没有CDN,所以所有的人都要通过这条光纤去获取这张最近的图片,假如有10万个人同时去拉取这张图片,那么每个人能够分享到的就这有0.1兆了。

在计算机网络中就像木桶最短的木板,带宽最小的那一块决定了你去服务器拉取数据的最大速度。

的联网终端设备在下载播放视频时,为了防止或减少卡顿,要预先多下载一段内容,这就是缓存。要下载,首先是你的设备自动提出下载请求,这时,还要对方同意下传即释放出一定量的视频信息量。而一定时间或者称单位时间内释放出多少信息,视频网站是可以通过程序自动控制的。

在这里插入图片描述

直播、短视频平台如何选择合适的CDN?
测试时的技术指标数据:

包括但不局限于延时、卡顿率、下载速度、打开速度、回源率、宽带冗余提升率等

延迟细分下来又可分为4个模块:域名解析时间、建立连接时间、首包时间、内容下载时间。

域名解析时间这个时间维度和CDN具有一定程度的关系,刚购买的域名通常解析时间会很长 有时超过300ms 甚至达到几秒,当网站的访问带宽超过100M时时间会平稳控制在100~150ms。此外时间的长短和各个省分的本地DNS缓存策略也有一定的关系。

建立连接时间则是指DNS解析完成到找到对应IP后建立TCP连接的时间。由于TCP建立的流程是固定的三次握手,排查机器负载过高的原因外,这个时间可以反映出CDN服务的节点资源以及调度能力,离得越近的节点建立连接时间越短,一般在几十ms内。

而首包时间就反映的CDN服务节点程序的代码能力了,连接之后服务端程序多长时间会调度处理,如果时间过高很可能导致机器负载过高。

内容下载时间对于小文件场景一般参考意义不是特别大,通常时间很短。

音视频点播包括类型为mp4、flv、mkv 、wmv等音视频文件。点播场景会比较注看重卡顿比率,更准确的说点播可以算是大文件中一个分支,但点播场景的CDN服务质量要求比大文件下载要严苛一些。

这方面主要是看2个核心指标:首播时间和再缓存时间。首播时间即从打开到看到视频画面的时间,会受域名解析、连接、第一包时间的影响,首播时间控制在1秒内算是不错的效果。其次是再缓冲时间,代表的意义是用户观看视频时的卡顿时间。由于实际服务中视频长度不一,一般会做播放统计的体验统计,主要监测的是卡顿率(卡顿率:把所有用户播放视频的卡顿时间上报,100个用户里面有 90个是播放过程中完全无卡顿的即卡顿率10% )

音视频直播全协议支持 ,此类场景对于CDN服务来说,核心指标和点播有些类似。鉴于直播的时长通常较长,因此首播时间和卡顿率两个指标则变得更加通用。行业内而言直播首播时间300ms,卡顿率在15%以下算是优质的CDN服务。

直播基础知识分享–CDN篇

源站:发布内容的原始站点。添加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全部来自源站。对于直播来说,源站位主播客户端。

缓存服务器:是直接提供给用户访问的站点资源,由一台或数台服务器组成;当用户发起访问时,他的访问请求被智能DNS定位到离他较近的缓存服务器。如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户;如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户。

智能DNS:整个CDN技术的核心,主要是根据用户的来源,以及当前缓存服务器的负载情况等,将其访问请求指向离用户比较近且负载较小的缓存服务器。通过智能DNS解析,让用户访问同服务商下、负载较小的服务器,可以消除网络访问慢的问题,达到加速作用。

客户端:发起访问的普通用户。对于直播来说,就是观众客户端。
直播CDN主要流程:

1、主播开始进行直播,向智能DNS发送解析请求

2、智能DNS返回最优CDN节点IP地址

3、主播端采集音视频数据,发送给CDN节点,CND节点进行缓存等处理

4、观众端要观看此主播的视频,向智能DNS发送解析请求

5、智能DNSf返回最优CDN节点IP地址

6、观众端向CDN节点请求音视频数据

7、CDN节点同步其他节点的音视频数据

8、CDN节点将音视频数据发送给观众端

网络延时:从主播端采集,到观众端播放之间的时间差(仅考虑网络传输的延时)。

光在真空中的速度约为300,000km/s,普通光纤工程上一般认为传输速度是200,000km/s

北京到上海 1,200km 往返时延:12ms

北京到纽约 11,000km 往返时延:110ms

赤道周长 40,000km 往返时延:400ms

在节点较少,网络情况较好的情况下,网络延时也是最小,加上一定的缓存,可以控制延时在1s~2s左右。节点多,网络差的情况下,网络延时会对应的增大,延时可以达到15s以上。

网络抖动:数据包的到达顺序、间隔和发出时不一致。

比如发送100个数据包,每个包间隔1s发出,结果第27个包在传输过程中遇到网络拥塞,造成27不是紧跟26到达的,而是延时到87后面才达。直播中,这种抖动的效果实际上跟丢包是一样的,因为不能依照接收顺序把内容播放出来,否则会造成失真。

网络抖动会造成播放延时对应增大,如果网络中抖动较大,会造成播放卡顿等现象。

网络丢包:数据包的传输不可能百分之百的能够完成,从而造成在数据的传输中出现空洞,造成丢包。

CDN直播中用到的RTMP\HLS\HTTP-FLV等协议都是在TCP的基础之上。TCP一个很重要的特性是可靠性,即不会发生数据丢失的问题。为了保证可靠性,TCP在传输过程中有3次握手。首先客户端会向服务端发送连接请求,服务端同意后,客户端就开始发送数据,每次发送一批数据,得到服务器的“收到”确认后,继续发送下一批数据。TCP为了保证传到,会有自动重传机制。如果传输中发生了丢包,没有收到对端发出的“收到”信号,那么就会自动重传丢失的包,一直到超时。

在这里插入图片描述

  1. 采集,是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,也就是主播直播的过程。iOS端适配性较好,采集起来比较简单。Android端因为一直以来市面机型多版本复杂种种情况,加大了一个库适配所有硬件的难度,采集起来相对比较困难。PC端则和摄像头驱动联系紧密,目前市面上最好的PC端源免费软件是OBS。

  2. 前处理,业内有一种说法,80%的主播没有美颜根本没法看。所以美颜已经是对视频源进行前处理的标配功能,除此之外还有水印、模糊特效等,针对不同的手机系统提供不同的处理库。

  3. 编码,编码时候我们需要处理的硬件兼容性问题和寻求码率和画质之前的平衡是最大的两个问题。iOS系统硬件兼容性比较好,可以采用硬编,Android系统则还是因为硬件机型问题,大多采用软编。

  4. 推流与转码,在数据传输的整个过程中从主播端到服务器端,再到边缘节点,以及从边缘节点到播放端。为了让采集端的流适配各个平台端不同协议,一般都会在服务端进行转码处理,将视频文件转成不同格式,支持 RTMP、HLS和FLV等不同的协议。

  5. 分发,随着移动直播兴起和游戏直播的持续火热,网络直播平台支持亿高并发是理论上应该做到的,为了优化终端观看直播的体验,一般都会采用CDN进行内容分发加速,实现高并发等能力。

  6. 客户端播放,也就是解码和渲染,目前 iOS 端的播放兼容性较好,Android 的硬件解码和编码一样也存在兼容性问题。通常秒开、低延时等问题是需要在播放端来克服的。
    在这里插入图片描述

对于推流端推流,目前主要使用的是RTMP协议,播放可以使用RTMP、HTTP FLV和HLS协议,常用的推流端是OBS、手机APP、FFmpeg;播放端包括Flash、VLC、HTML5、手机APP等形式;
深度详解视频直播CDN技术

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!