webrtc JetterBuffer 笔记-FrameBuffer

1.参考笔记

<<webrtc代码走读十六(Jitter延时的计算)>>

<<webrtc QOS方法八(JitterBuffer)>>

<<WebRTC视频JitterBuffer详解>>

代码版本M79

2.FrameBuffer--frame_buffer2.cc

上一篇《webrtc JetterBuffer 笔记-RtpFrameReferenceFinder》里最终找到参考帧的视频帧通过

OnCompleteFrame回调出来,进入了FrameBuffer进行缓存

先判断参考帧是否合法,缓存是否溢出,溢出的话,关键帧就可以清掉所有缓存,继续处理,非关键帧则丢帧

然后处理pid的顺序,如果pid乱序,但时间戳正常,关键帧可以继续处理

加入出现很大的跳帧,则清理缓存

接着更新参考帧信息 UpdateFrameInfoWithIncomingFrame

先拿当前帧和最新解码帧进行比较,正常应该是比当前最新解码帧要晚,早的话,要么就不解码,要么就已经解码过了

先将帧插入为满足的依赖表

然后遍历依赖表,减去为参考的依赖数,简历反向依赖关系

然后就可以回调完成的帧,然后通知解码器了

顺手往解码线程抛一个task

解码线程void VideoReceiveStream::StartNextDecode()

递归循环函数,核心就是获取下一帧,然后回调进行解码,然后继续获取下一帧。。。。。

FrameBuffer::NextFrame函数就是记录回调,然后阻塞等待下一帧,有超时时间

FrameBuffer::FindNextFrame(int64_t now_ms)函数会去拼凑superframe,对于h264来说,一个frame就是一帧,不需要再拼接,所以这个函数就是等待一帧

如果性能不够,来不及渲染,则放弃该帧,直到下一个I帧才能被继续解码出来

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值