腾讯云快直播——超低延迟直播技术方案及应用( 三 )


3.质量好、成本低(抗30%丢包)
4.接入简单(只要下行SDK做改造就可以了、功能完善、平滑兼容)
5.已大规模使用(内部已接入腾讯课堂、企鹅电竞,外部已接入教育类、电商类的客户)
 
快直播——延迟、秒开、抗性、画质提升 
4.1 快直播延迟
 

腾讯云快直播——超低延迟直播技术方案及应用

文章插图
 
我们现在能做到的延迟一般是300ms左右,极限延迟可以做到43ms,这个极限方案主要是给云游戏提供的,硬件编码通过边缘编码处理的方式得以实现 。
 
4.2 快直播首帧耗时秒开
 
腾讯云快直播——超低延迟直播技术方案及应用

文章插图
 
标准WebRTC要经过sdp交互、ice、dtls握手、rtp/rtcp,这里第二步和第三步基本是可以跳过的,ice可以用简单的storm来代替,dtls握手对于不需要加解密的也可以跳过,所以我们做了一个可以通过SRTP协商来关闭dtls握手,所以第二、第三步可以根据需求选择性的开或者关,从而通过精简信令优化首帧耗时 。
 
第二点就是边缘覆盖,我们不同的地方是信令和流媒体sever都部署在边缘节点,这就会保证用户与我们信令和流媒体交互的时候RTT多数会很小,从而就会保证整个信令耗时很短 。
 
另外还有一个影响首帧的是流媒体的回源,如果命中率不高,流媒体需要回源,也是一个首帧耗时的点,所以我们做了个调度按房间来收敛,提高命中率,也就是说在同一个省份看同一个房间的话都让他走到同一个机房 。通过以上三点优化首帧耗时基本达到100多ms 。
 
4.3 快直播WebRTC抗性优化
 
腾讯云快直播——超低延迟直播技术方案及应用

文章插图
 
WebRTC抗性怎么优化?这里抗性优化的本质是不断 “感知 + 调整 ”来适配变化的网络,这里的感知主要是RTT、丢包率、瓶颈带宽,通过感知到的网络的变化来调整发包策略、重传策略、FEC冗余策略等等 。上图把网络分为两类,有丢包未拥塞的网络(基站的信号弱,WiFi的信号弱),这种情况通过根据丢包率计算重传次数,提高重传成功率,也可以通过FEC冗余发包,在弱丢包或者少丢包的情况下不需要重传 。有丢包且拥塞的网络,它的表现主要是是丢包且RTT变大,这种情况又分为两种:一种是我们的码率超过了瓶颈带宽,第二个是码率没有超过瓶颈带宽 。上图可以看出I帧与P帧的关系,在视频会中比较特殊的是I帧一般比P帧大8-10倍左右,所以很多时候发包策略不受控制的时候,每次发一帧的时候就是很大的毛刺 。
 
腾讯云快直播——超低延迟直播技术方案及应用

文章插图
 
这里我们采取的是场景的识别和动态的适配 。
 
第一种是码率不是瓶颈,我们采用的是自适应的Pacing、根据I帧的播放时间以及buff将它平化掉,就会使得整个发包带宽在瓶颈带宽以下,从而兼顾帧率、帧大小、瓶颈带宽、播放器缓存,整个丢包就会少很多 。
 
第二种是码率是瓶颈,也就是它的码率在瓶颈带宽以下,如果不降低发送的数据量就一定会导致拥塞 。我们有两种策略:一种是时域分层,在编码的时候,将视频帧分三到四个级别,比如I帧、P帧、B帧,因为有一些B帧是没有依赖的,我们可以通过丢失一部分的帧直到码率小于瓶颈带宽,也就是通过降帧率达到降卡顿的效果 。另一种方式是空域分层,比如说编码的时候,我们会编高分辨率和低分辨率,对于弱网(码率是瓶颈)的情况下,我们通过只发低分辨率的帧使码率小于瓶颈带宽 。
 
腾讯云快直播——超低延迟直播技术方案及应用

文章插图
 
以上是我们抗性优化的效果 。从左上的图片中可以看到我们在做pacing前I帧的毛刺是很大,通过pacing发包可以减少80%突发毛刺,通过这张图可以看到在我们自己的应用上体现,WebRTC的质量是和flv相当的,而延迟从10秒降低到300ms,并且可以抗30%+丢包 。
 
4.4 快直播画质优化
 
腾讯云快直播——超低延迟直播技术方案及应用

文章插图
 
画质优化主要通过“云+端”来做协同优化,就是源流在编码的时候做修复增强,再通过一定的算法把视频进行压缩输出低码率的流,同时在云端进行云上的预分析,检测出视频的纹理区域以及边缘区域,然后把数据写到SEI中去读出纹理和边缘区域,如果是上采样就提高采样率进行超分,这样通过云端压到低码率、再由终端恢复到高码率的策略从而达到画质最强的效果 。


推荐阅读