欧洲杯作为全球关注的足球赛事之一,实时、清晰的观赛体验对球迷至关重要,当画质清晰度接近的情况下延时的权重就会被放大。随着新技术如5G、云计算等的发展,低延时直播技术得到提升,也引发了市场竞争。然而,其高昂的带宽成本成为大规模使用的主要阻碍,尤其是在全球性赛事如欧洲杯中,观众众多,对带宽需求大,从而进一步提高了成本。因此,在确保低延时直播质量的前提下,寻找经济高效的解决方案成为必要。
01
低延时直播系统方案设计
因此我们专门研发了一种可复用点播带宽的低延时直播系统。在爱奇艺体育欧洲杯期间,低延时直播方案顺利支持全部51场赛事直播。点播带宽复用率达到82%。播放延时相较传统的切片直播减少了20秒;画面清晰度高,支持1080p50帧率HDR;播放稳定流畅,受到了用户的好评。
采用低延时分发网络。目前大规模直播方案主要有HLS直播以及RTMP/HTTP-FLV直播。基于切片分发的HLS直播,切片的大小和数量都会影响 HLS 直播的延迟大小,一般在十秒以上。RTMP 服务端不再进行切片,而是按帧进行分发,能显著降低分发延迟。在这次欧洲杯直播中,爱奇艺体育采用的就是RTMP低延时直播方案。
基于QUIC协议的重构。我们对RTMP的传输协议基于QUIC进行了重构,从而取得了进一步降低了时延。
• 连接更快:使用QUIC建立安全连接的时间比TCP+TLS更短,因为QUIC在发送打开连接的同时,响应数据包中包含了后续加密数据包的信息,大大减少了连接时间。
• 解决队头阻塞:在网络拥塞或数据包丢失时,TCP会出现未确认的数据包阻塞后续数据发送的问题。而QUIC通过独立的数据流和滑动窗口管理,有效地解决了这个问题。
• 弱网传输优化:QUIC支持多种拥塞控制算法,如BBR、Cubic等,可以灵活调整以提高网络效率,特别在弱网环境下,QUIC的优势明显。相比之下,TCP的拥塞控制算法相对固定。
复用点播带宽。考虑到点播的带宽成本约为低延时直播带宽成本的一半,而爱奇艺有着充足的点播带宽储备,如果能复用点播的带宽来支持欧洲杯低延时直播,不但可以降低我们的带宽成本,还可以增加直播的并发容量。且欧洲杯的几乎所有场次比赛都在凌晨,与点播的带宽使用不会产生冲突。
基于以上思路,我们专门开发了Rcache服务程序,部署在点播服务器上,用于提供低延时直播服务。
02
实时流播放控制
基于成本和体验的平衡考虑,需要对实时流的播放进行相应的控制。需要能做到,根据节目开启,根据码率和端,APP等开启实时流。同时需要对实时流的并发量进行实时控制防止实时流的并发量超量。做到编辑生成节目时,这路就会自动根据配置进入到实时流的控制播放。所以需要从节目控制中心,到节目生产,到播放和实时并发控制形成一个自动化的控制流程。
按节目控制,实现按节目开启,按节目中语言开启(比如:中文开启,英文和粤语不开启)。
按编码分辨率控制,实现按照编码的类型(H264/H265)开启,按照480P/720P/1080P/1080P50-SDR/1080P50-HDR/4K控制开启。
按端,APP控制,实现按照Android/IOS/PC/TV...控制开启,按照,爱奇艺APP,新英体育APP,极速版APP....开启。
实时流的并发量控制,根据实时的实时流播放人数,控制后续进入用户是否能使用实时流播放。
03
节目制作与转码生产
欧洲杯直播从接收海外卫星信号到观众端看到的画面经过了多个环节,要给用户呈现低延时效果需要压缩整个链路各个环节的延时。如图所示,从卫星接收欧洲杯的海外信号进入总控室,由网关给到多个城市的不同演播室、邀请不同的嘉宾解说音效与球赛画面混流编码出信源,不同嘉宾解说的信源都需要转码生产出不同分辨率的运营流,不同分辨率的多种清晰度运营流再给到实时流cdn做分发,观众播放端实时拉流。
为了降低节目制作环节的延时,接收卫星信号在进入总控室是有线光纤链路,总控室的海外原声信号给到全国多个城市不同的演播室都组建了内网专线,从演播室制作出不同嘉宾解说的信号再给到直播转码生产不同分辨率的运营流也组建了内网专线。
在总控室->演播室嘉宾解说环节做了一次编码,我们在本次欧洲杯也降低了3秒左右的延时,主要是减少了演播室编码器网关的转发层次、优化编码参数(如视频编码B帧个数、编码器码率控制lookahead帧数,保障演播室编码器低负载)。
直播转码集群与SFU节点之间以定制参数将运营流生产环节的延时降低了2秒,SFU线上回源链路实现了主备路自动切换,编码集群单个节点故障编码任务在不同机器自动迁移、对观众无感切换。从转码集群生产的多种清晰度的运营流给到实时流cdn的回源接点,rtmp回源延时控制在100毫秒。
为了降低实时流的带宽成本,我们对接了多家商业cdn,从下图可以看到只有2个环节的直播流走公网分发:实时流cdn回源、观众从实时流cdn节点拉流。
04
带宽成本的优化
Rcache上传性能
为优化低时延直播的带宽成本,通过启用Rcache复用点播的带宽服务,降低低延时直播对CDN造成的带宽压力,从而实现“降本增效”。如果把实时流分发框架比作大树的供养系统,那么CDN就是对应大树根部,而预推集群Rcache就是大树的枝干,将营养(实时流数据)快速分流并分发给叶子(各个播放端设备)。这就要求Rcache具有高稳定性、高上传比的特点。
• 高稳定性的策略设计
Rcache运行中既要保证Rcache不会受到网络脏包影响,也要实现对备路设备的保活处理。因此在TCP/Quic建连流程中需要对播放端的建连、鉴权、申请上传进行多次校验,并对已建立连接进行保活验证,及时剔除不可靠连接及异常节点;定时检查Socket引擎的发送缓冲区状态,设定高低双阈值对缓冲区刷新及阻塞检测,优化上传性能。基于以上策略得以解决因脏包导致的Socket泄漏问题、网络阻塞导致Socket引擎性能不足等问题。
• 高上传比的策略设计
高上传比顾名思义指的是在资源有限的情况下,实现低下载高上传,最大化Rcache上行带宽使用率的设计思路。考虑到欧洲杯存在多场比赛同时进行的场景(最高有2场体育赛事并发),且每场比赛有多种清晰度码流需要同步直播,因此在欧洲杯前Rcache完成了从原本的单流分发优化支持了多码流并发,和Prepush/ 调度中心的信令交互策略也设计重构为按流进行注册申请汇报,同时设计多码流的权值表优化单设备多码流的负载权值统计,从而在调度中心层实现Rcache设备级的分配负载均衡。
负载均衡
Prepush
在低延时直播架构中,预推送(Prepush)服务器在拉起和管理缓存RCache节点时,需要确保节点的及时启动和节点的分布及负载均衡,以提供优质服务。这涉及以下几个方面:
• 及时启动:
确保RCache节点能够快速启动提供下载服务,使得普通客户端节点的请求可以得到快速响应。
• 负载均衡:
RCache节点的拉起应当遵循预先设计的模型均衡的分布,确保每个区域和运营商都有节点可以提供下载。
针对启动的及时性,设计了主动获取实时流直播节目信息的功能,获取到直播开始切片信息后提前预拉起RCache节点,保证了直播开始的时候就有足够多的RCache节点提供上传,从而可有效节省开播CDN带宽的使用,达到降低费用的目的。
为了确保 RCache 节点的均衡拉起,需要综合考虑节点分布和在线数据模型,并按照运营商和区域来分配节点。在直播节目播放过程中,根据每个 RCache 节点的上传数据动态调整节点状态,确保单个节点的服务质量和负载上限不超过阈值。为保证服务质量,可淘汰区域内性能不佳的 RCache 节点,同时在连接过多的区域内增加启动新的节点。通过这种动态调整的方式,既保障了直播质量,又优化了资源使用,降低了带宽成本。
根据欧洲杯直播各场次的数据分析,基本实现了上述目标,确保节点拉起和分布的均衡。通过合理的动态调整 RCache 节点,成功保障了直播过程中各区域和运营商的服务质量和稳定性。
调度服务
• 支持高并发的性能优化
欧洲杯期间,用户并发数量巨大,请求量主要集中在少数几路,甚至一路码流上。由于观看同一个热门码流的客户端在进行查询的时候主要集中在一个线程上,这就导致了我们的调度服务面临性能瓶颈的问题。
为了解热门码流导致性能问题,依据客户端的请求量级对码流进行运营商、区域和省份等多维度划分哈希层级。并且,我们的调度服务能够动态地根据客户端的请求量,升级或降级哈希层级,提升了服务的性能和调度成功率。
• 优化调度策略
我们通过优化Rcache优先级的判断逻辑,实现了根据Rcache设备的实时状态和就近原则选择最优设备。调度返回的Rcache提供一主两备,确保了服务的高可用性。如果主设备出现故障,客户端可以无缝地切换到备用设备,从而保证了业务对外服务的稳定性和连续性。我们还支持客户端灵活控制的分层策略,有助于降低回源流量,同时还能实现负载均衡的动态调整。
• 服务可观测
在欧洲杯直播期间,我们需要快速管理与定位数千台Rcache设备的状态和故障,以便及时寻找和改正潜在的问题,提升服务质量。我们注重分析调度情况,特别关注是否有按省份、运营商和错误指标的失败集中趋势。服务可观测帮我们全面理解系统的实时运行情况,包括客户端和Rcache的分布特性,从而优化服务,提升服务质量与用户体验。
自动化运营
为了解决欧洲杯大部分直播在凌晨进行的问题,并确保高质量的直播服务,我们设计了一个自动化的运营流程,以减少深夜值班监控的负担。
• 自动获取和分配拉流
为了确保服务质量,Prepush会在获取到直播切片消息后自动提前拉取和启动 RCache 节点,分配直播流信息,减少人工干预。
• 自动停流与强制停流
为了支持同时多个场次直播的顺利进行,特别是在场次之间间隔时间较短的情况下,设计了自动停流和强制停流功能,以确保每一场次直播都有足够的RCache节点使用。为了应对多个场次同时开始和场次之间间隔时间短的问题,Prepush会在某场直播结束后自动释放资源,包括自动停流和收回RCache节点的使用。由于场次之间的间隔时间较短,加时或补时可能导致下一场次开始时上一场还未结束。这种情况下,系统会强制停止在线人数少的码流,释放部分节点给下一场次使用,确保资源的最大化利用。
• 支持自动多码流
如果某一场次的在线并发量过高,导致节点资源不足,系统会触发自动多码率分配流程。每个节点将承载多个码率的流并提供上传,从而弥补节点资源的不足,最大限度地减少服务质量的下降。
通过上述自动化运营流程,大大减少了人工干预,显著降低了深夜直播的运维负担,并且在欧洲杯直期间没有发生大的运维事故,确保了整个赛事的顺利播出。
05
播放体验优化
实时直播的播放体验,主要围绕开播耗时,播放延时,播放卡顿三个方面进行。除了爱奇艺自建的CDN服务器,还有包括第三方的CDN厂商。需要对这些CDN厂进行关键的指标监控,并进行横向比较。CDN的服务运营能根据数据及时调整调度服务,调整表现较差的地区的CDN厂商,以使播放的体验最佳。
针对开播,为了减少和心跳请求的耗时,减轻心跳服务的判断复杂性(减少计算耗时),只根据并发量返回是否进入实时流操作。把一些判断的逻辑由由云配下发到客户端进行判断后满足条件的再和心跳进行询问操作。
为了兼顾播放体验和使用RCache,我们对播放的延时特别是起播延时进行了灵活的控制。当然各CDN厂商也支持了根据缓存长度返回数据的功能。同时针对网络不好或其他原因导致的卡顿可能引起的延时变大问题,播放器也实现了自动追帧功能。
为了更好的使用RCache,我们实现了播放过程中无感知切换任意帧切换到RCache和RCache切换回CDN的功能。当然在使用RCache的服务器时,考虑多种情况,使用多种协议进行数据的传输,包括TCP/Quic等协议。同时为了保证服务的稳定性,我们对RCache服务器进行多备路准备,除了及时监控正常传输的服务器的质量外,也实时和备路服务器进行交互,更早的感知网络发生变化。当正在下载的服务器出现抖动或者异常退出时,及时的切换到备路服务器进行传输。
使用实时流进行播放时,当出现无法使用实时流开播(可能网络链路问题、可能CDN厂商问题),我们会使用切片流进行一次播放兜底功能,保证用户能正常观看节目。在播放的过程中如果出现实时流的错误无法播放,也会进行实时流到切片流的切换,进行一次兜底播放尝试。
06
总结
随着时代快速发展和技术不断创新,以及用户对高质量直播需求的日益增长,低延时直播技术的应用将会更加广泛。此系统的实施大幅度降低了低延时直播的成本,推动直播行业的发展,并为用户提供了卓越的观看体验。