首屏秒开和追幀播放技术
首屏秒开是指在极短的时间内呈现直播画面以缩短用户的等待时间。LSS的首屏秒开核心技术有:
-
GOP缓存
将当前直播帧所在GOP缓存在CDN节点的服务器上,当用户播放器接入该CDN节点上时,GOP数据被快速发送给播放器,播放器拿到GOP的第一个I帧后就可以独立解码并开始播放。
由于播放器拿到的I帧不是当前最新的视频画面,所以GOP缓存客观上造成了额外的端到端延迟。例如,如果GOP长度是5秒,那么如果用户接入CDN时刚好当前视频帧是GOP的最后一帧,那么GOP缓存可能带来额外5秒的延迟,对于互动体验质量是极大的削弱。针对这一问题,我们发明了追赶播放专利技术解决。
-
HTTP-FLV播放
FLV的视频格式是:FLV头+ Video/Audio tags,在播放器收到FLV头部数据后,其后续的Video/Audio tag可以边下载边播放,这样的特性也使得FLV格式可以用在视频直播上。
相比于RTMP播放,FLV播放有两大优点:第一,FLV比RTMP需要更少的启播时间,FLV只需要一次HTTP请求,获得FLV头部数据后即开始下载播放,而RTMP播放要经过3次握手,还有其后connect和createStream等消息的交互后才能开始下载播放;第二,FLV播放使用80端口,对防火墙更加友好,而RTMP默认使用1935端口,在某些网络里会被防火墙屏蔽;第三,FLV播放由于使用HTTP链接,可以使用HTTP 302调度,使得播放端能被更精确地调度,以保障低延迟与高流畅的需求。
-
追赶帧放降低时延技术
前面提到GOP缓存会带来额外的端到端延迟。GOP越短,带来的端到端延迟影响越小。然而,短GOP在同等带宽损耗下却很损失视频质量。因为短GOP意味着更多I帧,由于I帧是自包含帧,没有利用帧间的相关性,所以压缩率相比P帧与B帧来说差很多,所以更多的I帧意味着需要的带宽更多。
视频场景 | GOP长度 | |
---|---|---|
1秒 | 3秒 | |
游戏视频 | 34.9 dB | 36.5 dB |
美女视频 | 42.6 dB | 42.6 dB |
电影 | 44.0dB | 44.9dB |
上表显示在同等带宽损耗下,不同的GOP长度(1秒和3秒)所取得的视频质量。这里视频质量用PSNR(峰值性噪比)来衡量,PSNR越高,视频的质量也越高。一般来说,在PSNR上0.5 dB的增益可以明显从视觉上看到视频质量的提高。从图上看到,3秒的GOP长度能比1秒的GOP获得大约从0.9 dB~2.0 dB的PSNR增益,从视觉上意味着获得了明显更好的视频质量。
为了在长GOP下保持低延迟,百度云发明了追赶播放的专利技术,来追赶播放当前最新帧之前的GOP缓存帧,以达到最小的端到端延迟。该技术利用RTMP/FLV封装协议及H.264/AVC编码标准,修改当前帧之前的GOP缓存的音视频数据,使得这些缓存数据在到达播放器的时候能快进播放,在时间线上赶上当前最新的直播内容。
追赶播放技术不仅用在首屏打开时的快进GOP缓存的数据,还用在RTMP/FLV播放时遇到累积延迟的情况。当CDN节点到用户播放器之间的最后一公里网络受到波动时,音视频帧数据累积在CDN节点上的队列内,当我们的程序探测到视频帧累积时,我们使用追赶播放技术修改队列中的音视频数据,使得当这些数据到达播放器能被快进播放,从而消除累积延迟。
淘宝的解决方案
- 收流服务器主动推送 GOP 至边缘节点,边缘节点缓存 GOP,播放端则可以快速加载,减少回源延迟;
- 根据TCP拥塞窗口做智能调度,当拥塞窗口过小说明丢包率过高,需要切换节点和故障排查;
- 增加上行、下行带宽探测接口,当带宽不满足时降低视频质量,即降低码率
通过这些优化手段,能够做到95%的直播点击后在900ms以内能够播放。