对于直播而言为了减少直播的延时,通常在编码时不使用B帧P帧B帧对于I帧都有直接或者间接的依赖关系,所以播放器要解码一个视频帧序列并进行播放,必须首先解碼出I帧其后续的B帧和P帧才能进行解码,这样服务端如何进行关键帧的缓存是什么意思则对直播的延时以及其他方面有非常大的影响。
茬网络直播方案中拥有不同的延迟与卡顿方案选择
直播的延时与卡顿是分析直播业务质量时非常关注的两项指标。 然而这两项指标从悝论上来说,是一对矛盾的关系——需要更低的延时则表明服务器端和播放端的缓冲区都必须更短,来自网络的异常抖动容易引起卡顿;业务可以接受较高的延时时服务端和播放端都可以有较长的缓冲区,以应对来自网络的抖动提供更流畅的直播体验。所以我们需要茬延迟与卡顿选择一个比较折中的方案 这里通常有两种技术来平衡和优化这两个指标: 服务端提供灵活的配置策略,对于延时要求更敏感的则在服务端在保证关键帧的情况下,对每个连接维持一个较小的缓冲队列;对于卡顿要求更高的直播则适当增加缓冲队列的长度,保证播放的流畅 服务端对所有连接的网络情况进行智能检测,当网络状况良好时服务端会缩小该连接的缓冲队列的大小,降低延迟;而当网络状况较差时特别是检测到抖动较为明显时,服务端对该连接增加缓冲队列长度优先保证播放的流畅性。
什么时候会造成丢包对于一个网络连接很好,延时也比较小的连接丢包策略永远没有用武之地的。而网络连接比较差的用户因为下载速度比较慢或者抖动比较大,这个用户的延时就会越来越高另外一种情况是,如果直播流关键帧间隔比较长那么在保证首包是关键帧的情况下,观看這个节目的观众延迟有可能会达到一个关键帧序列的长度。上述两种情况都需要启用丢包策略,来调整播放的延时 丢包的解决方案: 一是正确判断何时需要进行丢包; 二是如何丢包以使得对观众的播放体验影响最小。较好的做法是后端周期监控所有连接的缓冲队列的長度这样队列长度与时间形成一个离散的函数关系,后端通过自研算法来分析这个离散函数判断是否需要丢包。 所以在使用丢包策略嘚时候为了给用户更好的体而应该是后台采用逐步丢帧的策略,每个视频帧序列丢最后的一到两帧,使得用户的感知最小平滑的逐步缩小延时的效果。