当前位置: 首页 > 科技观察

高清视频下如何节省带宽?

时间:2023-03-21 18:11:55 科技观察

数据显示,国内互联网流量每月消耗200EB,其中80%的流量消耗来自视频领域。随着5G的普及和云制播的快速发展,流量消耗会增加,而这背后是非常高昂的带宽成本。如何通过技术创新让用户流畅观看高清,同时实现平均带宽成本的持续降低?本文为阿里巴巴文娱科技专家齐嘉的分享。视频和泛内容分发领域的技术同学受到启发。1.节省带宽成本的技术挑战从实际业务场景出发,节省带宽成本的命题面临诸多技术挑战。第一,优酷服务的终端种类较多,移动终端有Android、IPhone、IPad等;PC端的window和MAC,还有Web端和OTT端等。不同的终端有不同的特性,处理机制也会不同。即使是同一类型的终端,也需要针对特定??型号进行特殊适配。二是视频业务种类繁多。比如直播服务、点播服务、缓存下载服务、短视频服务,每个服务侧重的指标不同。比如点播服务,关注播放是否流畅;直播也讲究延迟;缓存下载主要关注下载速度。三是应用场景多样化。即使是同一个业务,细分的场景也很多,处理策略也不同。比如直播和点播有智能文件,缓存下载有流媒体,点播有倍速播放。不同的网络类型会有不同的处理。第四,视频多,长尾视频多。优酷的资源量很大,但是边缘节点的存储是有限的,并不是所有的资源都可以存储,需要找到最热的资源存储。视频格式繁多,分辨率不一,会造成源节点被稀释,造成供给不足。长尾特征显着,大部分视频都是单日小量播放,也需要解决方案。2、技术策略:云端内容分发网络云端内容分发网络,简称PCDN,基于P2P技术,通过挖掘海量碎片化闲置资源,构建优质低成本的内容分发网络体系。PCDN是一个三级网络加速系统:第一级是云端,也就是CDN。第二层是边缘网络,包括边缘节点、路由设备、商用WiFi等,这些节点不会直接参与消费,主要作为供给节点,为其他节点提供上游。第三层是终端设备,是流量的主要消费者,少数有能力的节点也可以为其他设备提供资源。当有设备播放视频时,PCDN网络可以提供视频加速,保证视频播放稳定流畅;通过合理切换不同节点的下载,可以最大限度地降低成本。从PCDN系统架构可以看出,云端内容分发网络分为三级网络,涵盖十余类节点,每一类节点的上行能力、带宽成本、存储能力都不同.接下来,我们分别从带宽成本、上行能力、存储规模、节点规模、资源定位五个方面比较一级、二级、三级各类节点的能力和特点,最终对每一类节点进行定位。一级节点上传能力强,服务稳定,但带宽成本高,用于下载必要、紧急的数据。二级节点上传能力比一级节点略差,但24小时在线,可以提供相对稳定的服务。在一定条件下,可以用它们代替一级节点。三级节点上传能力弱,存储空间小,无法保证稳定在线。优点是规模大、成本低。通过多点下载和就近下载,可以大大降低成本。因此,根据三种节点的特点,最大限度地发挥每一类节点的优势。例如,三级节点的存储量较小,应该最大化其上行带宽来缓存非常热的header资源。Secondary节点存储容量大,可以提供稳定的片源,可以存储中热点和长尾视频。PCDN底层三大基石:P2P云边内容分发网络基本原理,底层采用P2P网络技术,这张图是一个简单的P2P模型:节点A和节点B都看过《冰糖炖雪梨》的第12集,A节点先看,看完之后会在本地存储一些数据。当B节点在监听时,它可以通过点对点的数据传输直接从A节点下载数据。没有必要从CDN下载所有数据。整个数据共享过程可以分为资源缓存、节点分配、下载调度、数据共享四个关键环节。1资源存储第一个环节是资源存储。这个环节做了三件事:如何识别一个资源?将各种资源归一化,切割成固定大小的块。决定哪些资源应该存储,哪些资源不应该存储?识别一个资源,首先想到的是URL,但是URL太长,在交互过程中不方便,会增加传输带宽的损耗;另外,URL中的很多可变元素,比如时间戳、认证信息等干扰信息必须去掉,否则会为同一个视频生成不同的资源ID,无法相互共享。优酷有资源ID生成算法,会根据URL的关键特征信息生成一个全球唯一的资源ID,长度小于URL长度,方便交互。资源分组是第一位的。优酷有大量的视频资源,有些文件很大。一旦超过缓存限制,就无法将整个资源缓存到本地,无法进行P2P共享,所以需要切分。第二,不同的视频格式,比如HLS格式,会先请求一个ts索引文件,然后依次请求每个ts。如果将不同的视频格式分开处理,逻辑复杂度和维护成本都非常高。因此,我们会在下载入口对视频资源进行分组,归一化为固定大小的文件,统一下载核心,简化逻辑,降低维护成本。三是有利于提高共享效率。我们前面讲了P2P的原理。节点A不需要等待整个视频看完,可以共享之前的数据。如果将整个视频作为一个单元进行共享,则必须下载整个视频数据,效率会很低。第四,提高缓存利用率。一个基本的常识,如果视频按时间划分,每个时间点的播放次数是不一样的。比如片头和片尾看的人很少;另外,细心的同学会发现进度条上方有很多剧情提示,精彩剧情会反复观看。尤其是在综艺节目中,当有明星出现的时候,观看量会大幅度增加。至于精彩的剧情,很多人会拖拽视频跳转播放。因此,经过切片后,我们可以将播放量大的视频多存储一些,播放量小的视频存储少一些,从而提高整体的资源利用率和P2P共享率。资源存储消费者在下载每个分片时,会向服务器请求该分片对应的节点列表,服务器可以根据请求该分片的次数计算出大概的播放量。并且由于服务器拥有所有资源的访问记录,它可以判断哪些分片受欢迎,哪些不受欢迎。边缘节点在与服务器交互时获取此信息,以决定哪些资源应该存储,哪些不应该存储。2节点分配第二个环节是节点分配。这个环节包括节点筛选、节点调度和智能分配。节点过滤首先是基于NAT类型的过滤。所谓NAT就是地址映射,是为了解决IPv4地址短缺问题而引入的。大多数家庭网络终端设备都在路由器下面,路由器实际上分配了一个内网IP地址。访问外网时,会通过NAT映射一个公网IP和端口。有四种常见的NAT类型:全锥形、地址限制、端口限制和对称。其中,“对称与对称节点”之间以及“对称与端口受限节点”之间的连通性非常差。因此,我们会根据NAT类型过滤掉不可达节点,并提供返回有效节点的比例。二是节点质量过滤。在一个大规模的节点网络中,节点的能力参差不齐。如果优质节点和劣质节点混在一起,会增加端侧节点质量评估的成本。因此,需要过滤掉质量较差的节点,提高返回节点的整体质量。第一个节点调度是就近原则。在距离维度上,将节点分为5个范围,从小到大依次为:相邻节点、本市、本省、本地区、全国。其中,相邻节点主要是指同一社区、企业、校园等,从数据上看,距离越近,速度越快,时延越低。二是能力匹配原则。例如,节点A的上行能力是节点B的两倍,那么在分配次数上,按照2:1的比例分配节点,这样可以最大化节点A和B的上行能力。否则,如果比例为1:1,可能会出现A上行运行不够,B节点负载过高等问题。智能分配前的筛选和调度,主要针对供给侧节点信息。动态分配主要是针对消费者端的信息,即消费者节点在请求节点时,会上报一些当前请求的信息,动态计算需要返回的节点个数,以及不同节点的比例.首先是清晰度,清晰度越高,需要的节点越多。二是缓冲水位。当缓存水位低时,分配更多优质节点,提高下载速度;当缓冲水位高时,分配更多的低成本节点以降低带宽成本。三是不同节点按一定比例返回,保证每一类节点都能分配到,同时给端侧一定的决策空间。3下载调度第三个环节是下载调度。这个环节包括调度策略、节点管理和任务分配。调度策略在左边的图中,下面是播放进度条。这个点的位置就是播放点。播放点左边的数据是已经播放过的数据,是一条蓝色的线。播放点右侧的灰色部分是本地缓存数据的部分,然后向右。就是要下载的数据区间,这个点也叫下载点。在下载调度方面,我们的基本原则是:体验优先,兼顾成本。根据回放点后面的缓冲水位,可以分成几个区间。红色区间为应急区,说明当前缓冲区数据比较少。如果不及时补充数据,可能会影响播放体验。这个区间主要是从CDN节点下载,快速填满缓冲区;中间一段是过渡区,缓冲数据不是那么紧急,可以从第二层和第三层下载一些数据,如果缓冲水位下降,可以继续使用第一层,如果缓冲水位下降了的话它被提升,你可以使用第二和第三级来接管下载。最右边的部分是安全区,你可以去二级和三级下载。当然,会有很多详细的攻略。例如,这两个水位不是固定的,而是会根据历史冻结情况、当前网络质量、P2P节点数量、下载速度等实时决定并动态调整。.节点管理首先是节点获取。这里为了节省与服务器交互的损失,在上一个分片还没有下载的时候,可以提前获取下一个分片的节点,提前建立一部分连接,等待当前分片开始。下载时直接发送任务请求即可。每个节点在下载过程中,会根据节点的首包时间、下载速度、任务完成数量和质量等信息对节点进行评分。最终,任务会逐渐向质量好的节点收敛,质量差的节点会逐渐被淘汰。在任务分配上,我们遵循多劳多得的方法,优先分配任务,将任务分配给下载速度快、完成质量好的节点。同时会监控当前各节点的下载速度和RTT,提前预测后续数据是否超时。如果预测会超时,任务会被提前回收,分配给其他节点,而不用等着改变任务。暂停。4数据共享第四个环节是数据共享。数据共享的过程其实就是在两个节点之间建立连接,发送任务请求,供应商收到后,如果本地有数据,则返回实际数据。最后在消费者端统一校验数据,判断是否被篡改,保证数据的一致性,这样一个过程。节点连接这里我们主要关注节点之间的连接。这里所说的连接,主要是指节点之间建立一种连接,互相发送数据包,对方可以接收到。节点之间的连接方式主要有直连、反向连接和打孔三种方式。直连主要用于对端为公网节点,可以直接访问的情况。例如,大多数边缘节点都在公共网络上。可通过直连方式访问终端设备;反向连接主要用于本方在公网可以直接访问,对端在NAT后面的情况。这时候可以向对方的Relay发送一个反向连接请求,由对端的Relay转发给本节点,然后对端向自己发起直连。自己这边在公网,或者是全锥地址类型的时候可以用这个。最后是打孔。当两个节点都位于NAT之后时,通常使用此方法。数据传输节点连接后,主要是协议交互和数据传输。这里我们还开发了可靠的UDP传输方式,优化了里面的拥塞控制算法,加入了快速启动、丢包预测、快速重传等机制,让传输更加高效。数据校验数据校验是为了保证数据的一致性。在一个P2P网络中,如果有脏数据,那是非常致命的,因为它会扩散到十个,十个到数百个,并迅速扩散到整个网络,污染整个网络数据。针对这一点,我们也有一套非常完善的解决方案,在从磁盘存储、上传链接、网络传输、下载链接等各个环节都加入了验证机制。常见的校验方式主要有MD5、CRC等,MD5安全性高但性能开销大,Crc安全性弱但性能开销小。我们还采用了MD5+Crc相结合的技术方案,对关键数据进行MD5校验,对非关键数据进行crc校验,既保证了数据的一致性,又将性能损失降到最低。通常,剧集的热度越高,越划算。由于热播剧播出量大,供应节点多,分享效果好。但是,此规则不适用于新的电影来源。因为资源缓存需要一个时间窗口,所以很多热门剧集都会在晚上整点发布,用户一发布就收看。不过,短时间内新上映的片源并没有那么多的供应节点。.在这个时间窗口内,供需很不平衡,P2P分成率比较低。为此,我们采用了智能预推和快速回源的解决方案。所谓智能预推,就是通过考虑前几集的播放量、同类视频播放量的变化曲线,以及该段的播放信息,计算出需要发送到哪些区域的边缘节点的份数。区域、运营商和决议,在新片上线前,提前推送。所谓快速回源,主要是针对那些不易预测,短时间内访问量突然暴增的资源。通过将源回源到边缘节点,边缘节点可以快速下载整个视频,为后面观看视频的节点加速。通过这两种方式,当热播剧上线时,不用担心供应节点不足,或者供应节点不足导致分成率低的问题。大型直播主要是指大型赛事、体育赛事的直播,比如双十一猫晚会、春晚、国庆阅兵直播、世界杯直播等。点播则不同,挑战也比点播更大,主要体现在几个方面:第一是低延迟。为了减少直播延迟,直播场景中可以实时获取的数据量非常有限,而且大家的直播点距离很近,所以可供分享的数据非常少,这将导致整体供应节点短缺。二是缓冲水位低。由于数据量有限,一般只能获取2-3ts,时长只有几秒到十几秒,对调度要求非常高。上面说的点播应急区的水位是用来抵抗几十秒的网络抖动的,但是直播不会有那么多的缓冲。因此,如果调度策略不合理,很容易造成卡顿。但是如果缓冲水位过高,会降低P2P的共享。三是高动态。对于点播视频,只要设备缓存了资源,用户无需在线观看视频,也可以对外分享,与用户行为无关。然而,在直播场景中却并非如此。一旦在直播场景中退出直播间,该流的数据将被切断,无法再为其他节点提供源。直播期间,进出直播间是很常见的事情。为了提高直播的整体分享率效率,这里重点介绍边缘节点。一是以边缘节点为供给,边缘节点的服务相对稳定;其次,边缘节点在更新数据内容时会与CDN保持高度同步,多数情况下用于替代一级。四实战经验分享对于庞大复杂的网络系统,要学会从不同的角度,从大到小,一层一层地看系统,同时能够跳出系统,看到系统系统整体内外环境,上下游相互作用。总的来说,需要了解整个系统的商业模式和运行原理。在平面上,需要熟悉系统各个平面的划分和交互。例如,PCDN包括调度平面、控制平面、业务平面、基础服务等。在线上,需要拆解各个平面上的基本功能模块,分层次。比如在业务平面上,有上传、下载、发布等。点上,需要对每个技术点、算法策略等有深入的了解。首先,面对一个复杂的网络系统,第一步就是拆解它。把一个系统拆分成几个子系统,明确每个子系统的作用,什么是输入,什么是输出。当然,拆解是不够的。为每个子系统定义指标以反映系统的优劣,并通过数据和报表的形式将所有指标展现出来。通过这种方式,您可以看到整个系统的全貌以及存在瓶颈的地方。其次,技术必须与业务深度融合,才能实现价值最大化。比如上面提到的倍速播放,如果下载调度决策不能准确获取播放倍速信息,可能会误判,导致原本需要从CDN下载的时候下载失败,造成卡顿.最后,建模和快速迭代。在整个PCDN网络体系中,日常生活中的很多场景和功能都可以抽象成模型。比如下载调度就像一个水库模型,节点调度其实就是一个供需模型,等等。模型建立后,需要及时反馈。方法有很多种,比如压测,大样本训练,还有其他的方法比如桶验证。通过这些方法,可以判断模型的优劣,找到模型中各个参数的最优解。