直播的基础原理和介绍,网上的材料多不胜数,这里先不赘述。一般而言,一个直播系统包括采集编码、推流、CDN分发、*载下***放播**等必不可少的几个模块。当然,各家业务的需要,还会标配转码、美颜等等功能。
从传输的角度,本文重点分析直播系统中的推流传输协议模块,主要考虑到推流传输协议直接关系着媒体源的延迟、流畅等问题,一旦传输协议不够高效,将导致媒体源到CDN的卡顿与延迟,进而导致所有用户观看的卡顿,极大的影响应用程序的体验。而目前的主流配置是采用RTMP+CDN,例如映客、斗鱼、战旗等,也有少数采用基于UDP的推流协议,例如花椒。
基于RTMP的推流协议,其底层主要是基于TCP的,但TCP在推流时存在固有的问题,例如重传导致的延迟、拥塞控制算法的不够高效等,从而导致带宽利用率不够高。一般情况下,在TCP下进行媒体传输,为了保证媒体的质量,要求带宽至少是视频码率的2倍以上,也即保持带宽利用率不超过50%。
而基于UDP的推流策略虽然可以很灵活,但是对协议的设计与优化有一定的挑战,即在应用层如何做流控、FEC保护、容错、一定程度的可靠性保障等,都需要很好地设计,同时各个环节需要很好地配合,否则其效率将大大折扣,不如传统的TCP。正因为基于UDP的门槛较高,目前大部分的直播系统还是基于RTMP的。
针对TCP&UDP的这些特性,以及推流模块在整个直播系统中的关键角色,微吼流媒体部门设计了一种高效的主动增强流媒体传输协议——AESTP。基于该协议进行直播推流,可以大大提高带宽占用率,提高推流码率,降低传输延迟。对比测试显示,其推流码率可达到市面主流直播应用推流码率的4~6倍。
为了测试AESTP的性能,我们与主流的直播应用做了详尽的对比测试,以下主要展示AESTP协议,在推流部分与主流直播应用在网络带宽受限时,各自对网络带宽的占用情况。在对比结果中,我们选择了AESTP协议,标准RTMP协议,战旗、斗鱼、六间房、映客、花椒等直播应用进行展示与说明。
注:当网络足够好时,各个应用都可以顺利推流,在网络极端好情况下,任何算法和协议都能达到非常完美的效果,而实际网络一般波动较大且带宽受限,因此,我们主要分析在网络带宽受限时,各个传输协议和直播应用对带宽的占用情况。
第一步:基础数据测量
在保证网络足够好的情况下,我们测试各种应用的平均码率。在该环境下,推流的码率取决于推流端编码器的参数配置和协议开销,网络不会构成任何瓶颈,其效果如图一所示。不同直播应用,其码率主要取决于应用层编码参数的设置。可以看出,不同应用支持的媒体码率,差异性较大,因此,单纯的从观看质量去衡量其网络传输协议的好坏,不具有说服力。例如六间房的视频看起来比斗鱼模糊,并不能说明六间房的网络传输协议实现得比斗鱼差,而有可能是因为应用层视频码率较低的缘故。
该基础测量数据,主要为后续对比测试进行带宽限制时,提供一定的参考依据。为了分析在网络带宽受限时,比较各传输协议与各直播应用对带宽的占用与竞争情况,我们利用分组对比的办法进行对比测试,即我们逐个比较各直播应用与标准RTMP协议和AESTP协议,在带宽受限时对网络的占用情况。而在各组实验中,我们都将带宽限制为两应用在第一步测量的技术数据总码率的一半,从而保证带宽不足以同时承载两路直播应用的推流。例如当对比测试RTMP与战旗时,总带宽限制为 (1536+1365)/2kbps,其中1536kbps对应的RTMP或AESTP推流时的码率,1365kbps对应的战旗推流的码率。

图1:基础数据
第二步:标准RTMP与直播应用推流对比
在这一步,我们展示了基于标准RTMP的推流策略与不同直播应用在带宽受限时,对带宽的占用情况,其结果如图2所示。从图2可以看出,在带宽受限时,战旗和斗鱼的表现与基于标准RTMP协议的推流策略大致差不多。
我们经过抓包分析,战旗和斗鱼底层也的确是基于RTMP协议。六间房和映客则表现不如标准的RTMP,通过抓包分析,六间房和映客底层也是基于RTMP协议,但其效果不如标准的RTMP协议,猜测可能是这类应用考虑到了流媒体的一些特性,在传输时采取了一些保守的措施,从而导致其带宽占用情况不如标准的RTMP。
最后是花椒,其效果要优于标准的RTMP,这主要是抓包分析发现,花椒底层采用的不是RTMP,而是基于UDP的QUIC协议,通过在应用层增加合适的流控与容错机制,基于UDP的流媒体协议优于TCP,也是可以理解的。

图2 :RTMP vs. 主流直播推流
第三步:主动增强流媒体传输协议AESTP与直播应用推流对比
在这一步,我们展示了基于主动增强流媒体传输协议AESTP 1.0版本与不同直播应用在带宽受限时,对带宽的占用情况,其结果如图3所示。

图3 :AESTP vs. 主流直播推流
从图3可以看出,在带宽受限时,无论是基于RTMP(TCP)的战旗、斗鱼、六间房和映客,还是基于QUIC(UDP)的花椒,其效果都远远不如AESTP,在带宽受限时,AESTP的推流速度是其他直播应用的4~6倍。可见,在直播应用中,采用AESTP协议,将能大大提高推流的效率,从而保证视频源的质量,降低传输延迟,提升用户的整体感受。
注:在第二步和第三步中,每组的对比,其带宽限制都不一样,限制的值为两应用在第一步测量的技术数据总码率的一半。
目前,AESTP1.0已经通过测试正式上线,但是微吼流媒体部门负责研发的同事认为,目前的效果远远没有达到预期,还存在很大的挖掘和优化空间。虽然AESTP1.0推流速率能达到相关直播应用的4~6倍,但这距离理论目标还有较大差距,也存在很大的挖掘空间。微吼流媒体部门正在设计与优化AESTP2.0。
更多直播相关信息,欢迎添加QQ讨论群:348530112,我们一块聊聊直播的那点事儿