直播的网络影响因素

探究直播课程质量的网络影响因素

业务需求

网络直播课程的质量,反应在用户提的需求,具体表现如下:

  • 推流端不能卡,画质清晰,播放流畅
  • 手机、平板或电脑播放时不能太烫
  • 点开就能看,首屏时间短
  • 背景噪音低,无回声

架构分析

图1:直播服务的示意图

在传统页面中,点播业务由于视频源是录好的视频,只需要将服务器上的视频下行分发。而新兴的直播业务由于主播们是分散在全国各地的,所以直播架构中,分为上行汇聚和下行分发两套网络。上行汇聚网络为主播推流模式,下行分发网络为回源拉流模式。

在主播推流模式中,有以下几步:

  1. 主播推流到上行边缘节点。
  2. 上行边缘节点将流推到汇聚核心。在有些环境中,上行边缘节点到汇聚核心网络状况并不好,这时候需要多走几层中转。
  3. 汇聚核心收到流后,完成转码,水印,录制类业务。和 CDN 一样,不需要主动将流分发到边缘(需要预热的情况除外)

在回源拉流模式中,当用户访问到汇聚核心时,汇聚核心就会向一个回源节点拉流,回源节点再向客户源站拉流。

所以,下行观看的流程为

  1. 观众到边缘节点拉取直播流。
  2. 边缘节点上如果有流,直接发送给观众,如果没有流则会向上一级回源。

与传统CDN一样,下行观看流程需要缓存区存储最近几秒的直播数据,不能使用一个汇聚核心,因为

  • 稳定性差。一个汇聚核心就是单点,一旦遇到网络故障或者机房割接,整个主播业务就会瘫痪
  • 资源消耗大。一个汇聚核心不可能覆盖全国的所有边缘节点,需要大量的中转节点

故,直播一般使用多汇聚核心的架构,如下面两种。

网络架构1

图2:网络架构1

架构 1 的思路就是保证每个汇聚核心都有流,下行边缘无论到哪个核心都能拉到流。好处就是不需要使用数据库去记录流是推到哪个核心的,从架构上来说比较简单粗暴,但是存在以下问题:

  • 上行边缘需要推两份流到汇聚核心,会造成带宽浪费,因为对直播来说,很多主播实际上并没有太多观众。
  • 上行边缘到两个核心的质量不能保证都好,如果上行边缘到某个汇聚核心的链路质量较差,那从这个汇 聚核心拉流的观众质量必然都差。
  • 为了解决上行边缘到所有核心的链路问题,就需要选取很多中转节点,或者使用 BGP 机房作为上行边缘,这样会造成更大的成本浪费。

综上,这种架构不适合太多的核心,更适合多选取中转节点的方式来保证质量。

在这个网络架构中,基本思路路:下行节点是可以进行选优的,即下行边缘将汇聚核心作为主核心,只有当链路异常时才去备用汇聚核心拉流。

网络架构2

图3:网络架构2

架构 2 的思路就是链路选优,上行到一个链路最优的核心,下行也到一个链路最优的核心,两个核心之间使用专线打通,以保证质量。一般情况下,国内最多使用 3 个核心就能覆盖国内主要区域和运营商,5 个核心就能基本覆盖全国所有边缘节点。核心之间可以使用专线为主,公网为辅的方式,这样对骨干网异常也能起到一定的容错性。

相对网络架构1,网络架构2更能保证直播的质量,但是存在一些技术难点。

  • 链路选优问题,这个需要进行长期实时数据监控,运营调整,当然,是完全可以做到自动的
  • 流生命周期问题,直播流在哪个汇聚核心,是汇聚核心之间互相能拉到流的基础,而直播流是一个长时间存在的,因此需要对直播流开始,结束状态进行维护。当然考虑到⼀些异常节点挂掉的情况,还需要加入开始和结束之间的心跳来保证异常数据清理。
  • 多一级拉流会增加首屏时间。

当然核心间互拉也可以改成互推的方式,这样可以省去一些流生命周期管理的麻烦,但是和网络架构1一样会浪费资源。

设计策略

延时

端与端要配合流畅,服务端要做好缓存,保证直播数据是连贯的。同时,若需丢数据,对于非关键帧,都可以丢弃,但是对于关键帧,必须保留,或者在TCP、UDP等协议基础上加入重传机制。

推流的时候,如果网络卡了,就降低帧率或码率。这可以用一个自适应设计,将码率反馈给编码器,让编码器动态调整自己的码率,尽量保证质量无损的情况下,传出来的视频码率下降,视频平滑。同理,帧率也可以反馈给帧率控制模块。

另外,用户对音频流畅性的敏感程度是大于对视频流畅的。所以,在传输过程中,可以保证音频流优先传输,其次是视频。

温度

可以考虑硬件编码,CPU发烫情况会轻于软件编码,但是硬编的人力成本太高,适配的机型有限。

如果有GPU的话,可以默认打开它,实现硬件加速优化。

首屏时间

客户端初始化的时候需要连接信令、媒体和文档服务器,所以客户端在开始登陆的时候,可以用异步连接的方式去连接这些服务器,从而加速首屏加载,减小首屏时间。

噪音

采集端做音频处理时,可以利用一些算法进行降噪,结合线性和非线性方法消除回声,同时为了避免失真,要进行调优。

接收端做音频处理时,由于网络速度不稳定,时快时慢,如果不做处理,直接输出就会产生不自然的声音。这时可以做一个缓冲区来缓存网络数据包,再输出的时候,就能得到匀速的数据包。

参考文献

  1. 卫向军.《教育交互直播的技术难点与架构探索》
  2. 武杰.CDN分发网络在直播上的应用
    https://mp.weixin.qq.com/s?__biz=MzU3OTQ3MzYxNQ==&mid=2247483667&idx=1&sn=ae83a1d3ca525f74d15faa1024886753&chksm=fd64d8b3ca1351a592cb10eede787f01f02d385dd61b79ff0e36a4a647c8914f800ffe44b7bc&scene=21#wechat_redirect

   转载规则


《直播的网络影响因素》 帅张 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录