RtpVideoStreamReceiver类收到RTP包后,交给PacketBuffer类缓存、排序,PacketBuffer收集满1个完整的帧后,交还给RtpVideoStreamReceiver类。

音频也有,packet_buffer.cc,不过那是属于NetEq的内容。
H:\webrtc\webrtc-checkout\src\modules\audio_coding\neteq\packet_buffer.cc
PacketBuffer类
InsertPacket函数
1、判断是否第一个包,和包的排序,更新第一个包的序列号。
2、判断是否是重复包,不是则队列满了,需要扩容直到有空间或者扩容失败
3、插入 包,根据对比是否是同一个I帧里面的包。因为rtp的话,同一个帧,则里面的timestamp会是相等的。然后插入包。UpdateMissingPackets更新丢失的包,FindFrames查找是否可以组成一个帧,result.packets不为空则是找到了该帧的所有包,否则为空。
ExpandBufferSize扩容函数

PacketBuffer::PacketBuffer(Clock* clock,size_t start_buffer_size,size_t max_buffer_size): clock_(clock),max_size_(max_buffer_size),first_seq_num_(0),first_packet_received_(false),is_cleared_to_first_seq_num_(false),buffer_(start_buffer_size),sps_pps_idr_is_h264_keyframe_(false) {RTC_DCHECK_LE(start_buffer_size, max_buffer_size);// Buffer size must always be a power of 2.RTC_DCHECK((start_buffer_size & (start_buffer_size - 1)) == 0);RTC_DCHECK((max_buffer_size & (max_buffer_size - 1)) == 0);}
经过打断点,得到:
视频,最大值默认是constexpr int kPacketBufferMaxSize = 2048;,从PacketBufferMaxSize()获得
NetEq,默认配置最大值 size_t max_packets_in_buffer = 200;
