随着互联网基础设施和硬件设施的一直倒退。宽广直播观众对于直播观看的清晰度,延时等方面的体验要求越来越高,直播也随之进入了低提早高码率的时代,直播传输技术也面临着越来越高的要求和挑战。
腾讯视频云为此在全链路上针对流媒体传输不断深入优化,使得在各大重要赛事上具备了高牢靠、低提早、高画质和音质的需要,同时跟客户,比方斗鱼,深厚次单干,不光在服务端,在APP端也进行了SRT的单干,和赛事一样从源头上保障稳固。
在直播过程中因网络丢包,会造成各种丢帧,会造成各端卡顿甚至花屏,给观众造成很不好的观看体验,针对链路丢包,SRT是如何解决的呢?
SRT采纳的是ACK+ NACK的解决方案。每隔10ms,SRT接管方会发送一个"失常"ACK包,将以后接管buffer中间断的最大包序号通知发送方,发送方收到"失常'ACK包后,会确认数据,将发送窗口前移,同时发送ACKACK,接管方根据T(ackack) - T(ack)来计算链路rtt。对于高码率的链路,每10ms确认一次可能会不及时,为此,SRT每收到64个包,便会额定回复一个LITEACK,用来疾速确认数据,尽可能快的让发送窗口挪动。
每次收包时,SRT会计算以后的"乱序度"。举个例子,如下图所示:
上图以后时刻的"乱序度"为2,当发现丢包须要重传时,SRT会提早2个包发送NACK,用来缩小一部分因为UDP乱序导致的有效重传。
家喻户晓,TCP一个窗口内的数据包通常会一次性无距离的发送,容易造成流量突发。Pacing机制通过平滑发送距离,来避免该问题。
SRT是依据带宽评估来调整发送距离的。能够从输出的速率采样,或者由用户设置最大带宽(maxBW),并留出一部分重传带宽(overheadBW),两者之和作为最大的传输速率。
如上图所示,若maxBW为800Kbps,overheadBW为200Kbps,链路最大带宽限度为1Mbps,按每个包大小1Kb计算,SRT会依照1ms的距离平滑发送。
基于以上个性,腾讯视频云将SRT作为传输层之上的协定,能够将任何基于tcp的应用层协定革新为基于SRT的应用层协定,腾讯和斗鱼一起抉择rtmp over SRT尝试在APP端利用SRT,针对弱网主播进行源头的优化。
在斗鱼户外版块首次尝试应用SRT后,RTMP推流和SRT推流比照如下:
某长期丢包的户外主播,关上SRT开关后,推流,播放的卡顿如下: