网易云信流媒体服务端架构设计与实现( 五 )


下行带宽探测

网易云信流媒体服务端架构设计与实现

文章插图
 
接下来我将介绍以上四个模块是如何具体操作的 。第一个模块是发布订阅模块 。第二个模块是带宽探测模块,它是基于google的BBR音视频场景下的优化,主要有六点:一是probe_RTT阶段的隐藏弱化;二是上行网络丢包带宽补偿;三是上行网络RTT突变以及高jitter场景优化;四是下行链路抖动自己丢包的优化;五是padding流量的优化;六是快速上探机制的实现 。右图展示了我们优化后的BBR在弱网下的探测效果,基本做了探测准确度为95%以上 。
带宽分配策略
网易云信流媒体服务端架构设计与实现

文章插图
 
探测出带宽后如何结合地域关系、上行的实际码率做下行带宽的分配 。假如下行用户实际带宽有2M,订阅了A、B、C的大流,A、B、C的大流的最大码率和最小码率分别是2M、800k,1M、700k,1.6M、1M 。那么下行用户实际带宽2M是不可以接收所有的大流的 。
网易云信流媒体服务端架构设计与实现

文章插图
 
针对以上问题,带宽的分配策略为:首先基于现有大小流进行选择性接收;其次综合所有下行接收端的带宽以及预分配结果,反馈到发送端,进行上行流的码率的压制 。
拥塞控制
网易云信流媒体服务端架构设计与实现

文章插图
 
拥塞控制模块主要有四个模块:一是平滑发送;二是基于流级别的优先级策略以及可选择性发送策略;三是拥塞避免;四是拥塞缓解 。
网易云信流媒体服务端架构设计与实现

文章插图
 
基于流级别的优先级策略以及可选择性发送策略中优先级是在实际发送包后制定的包的优先级:重传包>音频包>视频包>被切掉的流>padding包 。
可选性发送策略是在实际转发中基于上行流SVC的码流,我们制定了SVC时域分层选取:在实际下行转发时会实时评估各个层总体的码流,在实际分发过程中会基于当前近程发送队列的拥塞程度去实时选取应该分发的层 。
网易云信流媒体服务端架构设计与实现

文章插图
 
拥塞缓解的具体工作为:首先下调SVC分层选取,如果拥塞严重就切小流,然后基于包级别的优先级发送 。其次是如果实际网络发生拥塞,需要改造BBR的发送周期,即减少1.0倍发送周期 。另外,如果数据超发,源端的码率波动比较大,需要代替网络主动丢包 。
下图是具体的丢包策略:绿色条柱是应用程序发送队列的堆积情况,基于堆积的安全阈值和堆积的Trendline这两个去判断当前是否需要主动丢包 。
网易云信流媒体服务端架构设计与实现

文章插图
 
上图是拥塞控制总图,首先是拥塞避免从BBR获取匹配的发送数据,当避免不了的时候就需要进行流优先级控制以及SVC分层选取控制,并进行拥塞缓解,最后数据真实发送给用户时要进行平滑发送 。




推荐阅读