文| 费曼 网易智企服务端开发工程师
8月22日,TFBOYS“日光旅行”七周年演唱会在网易云音乐平台上与广大粉丝们见面。据官方数据显示,这场演唱会最高同时在线人数达78.6万,打破线上付费演唱会世界记录,取得了口碑票房的双丰收。
网易云信的大型直播解决方案,全程支撑了网易云音乐这场活动,今天我们来聊聊一场稳定、流畅、清晰的线上演唱会背后的故事。
一、大型直播架构
上图是此次TFBOYS在线演唱会的直播媒体架构简图,可以看出一场大型活动直播涵盖的技术方案点非常庞杂,这里我们先以推拉流链路、全局智能调度、流量精准调度以及单元化部署,对网易云信的大型直播方案做一个展开介绍。
-
推拉流链路
-
视频直播中心(LMS, Live Manage Service),负责直播流的逻辑管理和操作控制,包括存储和下发实时转码、加密等媒体处理的配置信息。
-
实时互动直播服务,由连麦互动和直播两部分组成,主播和连麦者的音视频数据在互动直播高性能服务器合成为一道流后推流到直播流媒体服务器。
-
直播源站服务(LSS, Live Source Service),网易云信自建的直播流媒体服务器节点,结合全局智能调度系统,提供第一公里的最佳链路选择,同时融合支持接入多家CDN厂商。
-
媒体处理服务(MPS, Media Processing Service),提供实时水印、实时转码、媒体数据加密等强大的流媒体处理能力。
-
融合CDN与全局智能调度(GSLB, Golabal Server Load Balancing),提供敏捷智能的CDN调度策略和分配算法,结合全链路、端到端的流媒体控制,来达到最终端侧优良的用户体验。
-
客户端SDK,提供推流、拉流以及上下行的调度能力,便于用户快速接入使用网易云信平台一站式的音视频解决方案。
2. 融合CDN与智能调度
网易云信提供的是一个端到端的服务,通过平台的SDK执行一个类似HTTPDNS的调度,来做到真正根据用户IP做就近的接入。针对国内相对复杂的运营商网络环境,云信在直播上行方面通过BGP网络以及与相关运营商在网络接入方面的合作,能够更加精准地控制网络链路的选择。而对于下行,网易云信也提供了播放端的SDK接入,通过端到端的调度策略就近选择合适的下行链路。
调度的准确性以及最终效果,依赖及时准确的数据支撑。我们有一个全链路、立体的数据监控体系,一方面利用CDN上的一些实时日志,另一方面结合自建节点、客户端侧上报收集链路上探测的数据,然后整合做一个实时计算来支撑整个调度的策略
融合CDN方案,通过调度、监控、高可用等技术和手段来解决CDN网络方面的问题,但是对于云信平台上的用户,就和在使用一个传统的CDN网络一样没有大的差异,这些技术细节对用户透明无感知,用户通过简单易用的接入sdk,就具备了高可用、全链路控制的流媒体分发服务。
3. 流量精准调度
Don't put all your eggs in one basket.
4. 单元化部署
-
单元化的依赖也必须单元化(核心业务)
-
单元化粒度为应用,非api
-
单元化技术栈对应用尽量避免产生侵入性
二、稳定性与安全性的保障
-
上行链路稳定

整个推流链路采用双路热流,互为主备,且部署上是互相独立的两个单元,能做到支持Rack级别的故障灾备。双路热流实现了自动主备切换,端上无需专门添加应用层的线路切换逻辑。当任何一个链路出现问题的时候,观众的直播流不会受到影响,端上平均卡顿感知时间在1s以内。
2. 下行链路稳定
同时,客户端也会有播放体验方面的容灾策略,诸如清晰度降级、线路调整等。
3. 直播内容安全
在此基础上,此次活动采用了端到端的视频流数据加密,直播场景的加密有几点基本要求:压缩比不变、实时性和低计算复杂度。除此之外,在融合多cdn的方案背景下,视频流的加密必须考虑到CDN厂商的兼容性,比如须满足以下要求:不破坏流媒体协议格式、视频容器格式;metadata/video/audio tag的header部分不加密;对于avcSequenceHeader和aacSequenceHeader tag整体不加密。具体加密算法,可以采用一些流式加密算法,这里我们不再赘述。
三、监控报警与预案
-
全链路监控
此次直播中,内容上支持了多种机位流以及多个清晰度的转码输出流,同时通过多个CDN厂商进行分发,我们把上行链路中节点的码率、帧率,直观地通过N个指标卡集中展示在单个大盘页面上,并且通过增加预警值进行异常显示和弹窗消息告警。活动作战室现场,我们采用了多个大屏展示,非常直观地展现当前主备双推流链路的实时帧率、码率等情况,为现场地指挥保障提供了强大的数据决策支撑。
以下图为例:蓝色表示上行帧率,绿色表示正常的上行码率,红色表示码率值过低,N/A表示当前没有上行推流数据。
而在下行播放链路中,比较常用的指标就是卡顿率。下面是我们对卡顿相关的描述:
-
一次卡顿:播放器持续2s发生缓冲区空,即播放器2s没有拉到流
-
一分钟用户卡顿:1分钟窗口内,用户只要卡顿一次,则该用户计作卡顿用户
-
一分钟用户卡顿率:1分钟窗口内,卡顿用户数/总的用户数
-
一分钟用户零卡顿率:1分钟窗口内,(总的用户数 - 卡顿用户数)/总的用户数
为什么会选择用户卡顿率这个指标呢,而不是使用整体的卡顿采样点/总采样数呢?是因为我们更想看到有多少用户没有出现过卡顿现象,这更能直观体现优质网络的整体占比。通过对各省份用户零卡顿率、用户数排行,以及各省用户卡顿率的观察,我们可以非常直观地找到卡顿严重的地区,以便重点关注,进行资源调度优化。
2. 直播应急预案
Hardware faults,software bugs, and operator errors, such failures are a fact of life:not a problem that will someday be solved once and for all, but a reality that we must live with.
Armando Fox.2002.Torward Recovery-Oriented Computing. VLDB 2002.
(1)预案信息明确:大盘自动监控不具备二义性,确保预案信息来源正确,触发执行预案的条件明确且有数值化约束。
(2)预案操作简洁:所有的预案操作都有有简洁明确(开关型)的操作输入。
(3)预案操作安全:所有预案要经过充分预演,同时预演操作本身需要有明确的确认机制,以确保在正常情况下不会被误触发。
(4)预案影响:明确理清预案操作的影响,QA在预演阶段需要对相关影响进行充分验证。
风险预案这块,包含了各类资源故障、上下行链路质量、地区性网络故障、CDN异常流量水位等在内的场景应对,其中资源故障包含了机器宕机、机架整体断电、堆叠交换机宕机、机房外网出口不可用,我们均进行了风险预案演练覆盖。下面列举几点网易云信大型直播解决方案中的部分预案机制:
-
如果因为误操作等导致非正常解密等,网易云信可在推流不中断的情况下,动态中止流加密,客户端无任何感知影响。
-
某家cdn在某地区运营商出现大面积故障瘫痪,该地区相应运营商线路的QoS指标会大幅度下降并触发报警,网易云信将故障cdn在该地区运营商进行黑名单处理,动态停止对其的调度,将流量调度至正常提供服务的cdn厂商。
-
在两路热流均正常的情况下,但是正在分发的一路出现质量问题,方案可支持手动触发主备切换,让监控数据质量更好的另一路流参与分发,客户端感知时间在1s以内。
-
因为一些不可抗因素,某机房出现大面积故障整体不可用,触发链路报警,此时我们会紧急将流切至另一机房,故障感知与恢复的时间在一分钟内。
四、结 语
作者介绍
*各渠道文章转载需注明来源及作者