秒开技术
大家可能会看到,市面上某些手机直播 APP 的打开速度非常快,几乎是一点就开。而某些手机直播 APP,点击播放后要等好几秒才能播放。这是怎么回事呢?
这就不得不提到“首屏耗时”这个在直播中非常重要的指标。通俗地说,首屏耗时是从第一次点击播放到人的肉眼能够看到画面所耗费的时间,在技术上指的是播放器解码第一帧渲染显示画面的耗时。而通常我们说的“秒开”,是指点击播放后在一秒内即可看到播放画面,无需等待。
毫无疑问,首屏打开越快,用户的体验越好。
首屏耗时主要由两部分组成,一部分是进房时间,一部分是出画时间。
先看进房时间的优化。在进房时间方面,我们通过一系列的提前信令加载机制将信令尽可能的提前,并且将不能提前的部分与设备启动等耗时操作进行并行处理,同时与业务侧进行一系列的联动,通过这些措施把进房速度优化到最优的水平上。
接下来我们看出画时间的优化。
小科普:
一个视频(Video),其图像部分的数据是一组 GOP 的集合,而单个 GOP 则是一组 I / P / B 帧图像的集合。I 帧是内部编码帧(也称为关键帧),P 帧是前向预测帧(前向参考帧),B 帧是双向内插帧(双向参考帧)。简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。如果没有 I 帧,P 帧和 B 帧就无法解码。
由此,我们很容易想到:如果直播服务器支持 GOP 缓存,那么客户端在和服务器建立连接后可立即拿到数据,这样可以避免要等到下一个 I 帧到来时才能出画。但是,这个方案的缺点在于拉取的时间较随机,会带来唇音不同步、播放端延时不稳定等多个问题。为此,我们采取了一套双 GOP 缓存方案。它能够根据拉取时机更加智能地选择拉取哪个 GOP 的数据。
做完这些,是不是就可以实现一个非常好的秒开体验了呢?
其实不然。
实测中我们发现,虽然首屏耗时在整体上有了明显的降低,但它非常地不稳定,偶尔会出现耗时非常大的情况。对其原因进行排查,我们发现,这主要是由于接通的瞬间产生了大量数据的推送,此时网络的负载会变得非常大,很容易丢失 I 帧数据,导致出画需要等到下一个 GOP。基于此,我们又做了一系列的保障措施,包括推流速度的人为控制与推流数据的 QoS 保障机制等。
下图是我们与主要竞品在首屏耗时上的一个数据对比:
本文转载自腾讯多媒体实验室公众号。
原文链接:https://mp.weixin.qq.com/s/JnSP65ORttmkzDEYLIGI5A
评论