《SRS原理》上架了,深度剖析 SRS 源代码,访问地址:srs.xianwaizhiyin.net
本文采用的 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 的抖动算法不太一样。
相关阅读:
由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。QQ:2338195090。