1.参考笔记
<<webrtc QOS方法八(JitterBuffer)>>
代码版本M79
2.RtpFrameReferenceFinder
上一篇笔记《PacktBuffer》获取到了完整帧数据std::unique_ptr<RtpFrameObject> frame
调用 RtpFrameReferenceFinder::ManageFrame -> ManageFrameInternal -> ManageFrameH264 -> ManageFramePidOrSeqNum
h264 picture_id使用最后一个rtp包的seq_num
RtpFrameReferenceFinder定义的的GOP表结构:
key | value |
last_seq_num:I帧最后一个包序列号,PID | last_picture_id_gop:GOP内最新的一个帧的最后一个包的序列号, 用于设置为下一个帧的参考帧。 |
last_picture_id_with_padding_gop:GOP内最新一个包的序列号,有可能是last_picture_id_gop,也有可能是填充包,用于检查帧的连续性。 |
寻找插入当前帧的位置,如果找不到,则丢弃
取出唯一的那一个pair,判断帧是否连续,如果不连续,则暂存起来(kstash);如果连续,则更新pair内的second参数里储存的最后包序列号
接着,处理填充包
回调已完成的依赖帧
接着就可以返回kHandOff,表示处理完成一帧依赖了,可以触发缓存的帧再次寻找依赖