SRS4.0源码分析-抖动算法 - 弦外之音

/ 0评 / 0

本文采用的 SRS 版本是 4.0-b8 , 下载地址:github


在前文《SRS4.0源码分析-SrsRecvThread::cycle》分析的时候,把推流的视频帧加进去 Consumer 队列的时候,传递了一个抖动算法参数,如下图:

未开启 atc 的情况 会执行 SrsRtmpJitter::correct(),act 全称是 (use absolute time and donot adjust time)。


本文主要分析 此 RTMP 抖动算法的原理。代码如下:

实际上,上图的抖动算法非常简单,就是判断一下 当前帧是不是比上一帧的时间大 250ms,或者少 250ms。这里我也不太明白,RTMP 基于 TCP 的,数据包是顺序到达,如果推流端没出问题,当前帧肯定比上一帧的时间大。

这里什么情况当前帧会比上一帧的时间大 250ms?我能想到的就是客户端推送的流有问题,才会出现这种情况,因此,SRS 这个SrsRtmpJitterAlgorithm 实际上只是对 音视频帧的时间戳做一下纠正。跟 webrtc 的抖动算法不太一样。

相关阅读:

1,《音视频常见问题分析和解决:延时和抖动》


由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。QQ:2338195090。

发表回复

您的电子邮箱地址不会被公开。