流媒体播放不同于本地播放,受网络环境的影响,不可避免的存在播放卡顿问题。而直播场景下由于播放的是实时流,因此还会存在延时的问题。卡顿和延时彼此影响,又相互矛盾,究其原因还是由于实时流在播放过程中网络线路上的抖动引起的。
播放卡顿一般可以通过增大网络数据缓冲区来缓解,但这种解决方法会增加播放延时。播放延时可以通过追帧的方法来解决,但这样做在网络条件不好的情况下又会造成较明显的卡顿。
这里讨论一种利用变速播放的方法来解决直播场景下延时和卡顿问题,通过客户端播放器在播放过程中动态调整音视频播放速率,来平衡网络波动导致的卡顿和延时。
一般播放器的正常流程如图1:
改进后的播放流程如图2。音视频同步采用以音频播放时间作为基准。
以ijk播放器为例,通过变速播放来平衡延时和卡顿的具体示例如图3。音频变速算法可以采用ffmpeg基于WSOLA变速算法的音频滤镜来实现。
当缓冲较多发生延时时,我们提高播放速率以缓解延时;当缓冲较少发生卡顿时,我们降低播放速率以减少卡顿几率。