类关系图

image.png

completeframe_callback: 指的是左边的 internal::VideoReceiveStream
referencefinder : 找该帧的依赖帧;如果是I 帧则是独立的;如果是P帧,则依赖前面的帧;B帧,则依赖前面和后面的帧。找到依赖帧后传给解码器进行解码。
H:\webrtc-20210315\webrtc-20210315\webrtc\webrtc-checkout\src\video\rtp_video_stream_receiver.h
image.png
RtpVideoStreamReceiver类收到RTP包后,交给PacketBuffer类缓存、排序,PacketBuffer收集满1个完整的帧后,交还给RtpVideoStreamReceiver类,RtpVideoStreamReceiver类将一个完整的帧交给RtpFrameReferenceFinder,RtpFrameReferenceFinder类缓存最近的GOP,每个完整帧落在一个GOP中会填充好该帧的参考帧,交还给RtpVideoStreamReceiver,RtpVideoStreamReceiver将填充好参考帧的完整帧由internal::VideoReceiveStream保存到FrameBuffer,FrameBuffer判断某帧的所有参考帧都收到认为该帧连续,在某帧的所有参考帧都解码后认为该帧可以解码,从而可以交给解码器。
可以认为JitterBuffer的这些模块分三个层次分别做了RTP包的排序、GOP内帧的排序、GOP之间的排序:
包的排序:PacketBuffer;
帧的排序:RtpFrameReferenceFinder;
GOP的排序:FrameBuffer。

数据流图


image.png

资料

WebRTC视频JitterBuffer详解
https://blog.csdn.net/sonysuqin/article/details/106629343