PacketRouter,继承PacedSender和TransportSequenceNumberAllocator;PacketRouter保持发送模块的小碎步发送。同时接收反馈消息,如果存在发送模块,则将反馈消息转发给发送模块,如果有发送模块处理则退出,如果没有发送模块处理则发送给接收模块处理。
TransportSequenceNumberAllocator只是一个产生传输序列号虚基类。
PacedSender用于小碎步的按照某码率发送数据,见PacedSender;
PacketRouter:函数解析:
void AddSendRtpModule(RtpRtcp* rtp_module):添加发送模块
void RemoveSendRtpModule(RtpRtcp* rtp_module):移除发送模块
void AddReceiveRtpModule(RtpRtcp* rtp_module):添加接收模块
void RemoveReceiveRtpModule(RtpRtcp* rtp_module):移除接收模块
bool TimeToSendPacket(uint32_t ssrc, uint16_t sequence_number,int64_t capture_timestamp,bool retransmission,const PacedPacketInfo& packet_info):调用PacedSender的方法,根据ssrc匹配发送模块,然后调用该发送模块的TimeToSendPacket方法,返回下一次需要发送的时间。
size_t PacketRouter::TimeToSendPadding(size_t bytes_to_send, PacedPacketInfo& pacing_info):按照名字,应该是下一次需要发送填充数据的时间
virtual bool SendFeedback(rtcp::TransportFeedback* packet):发送反馈信息到发送端
void SetTransportWideSequenceNumber(uint16_t sequence_number);设置一个SequenceNumber,一般是设置起始的。
uint16_t AllocateSequenceNumber() override;TransportSequenceNumberAllocator虚基类的接口,在已存在的SequenceNumber+1产生一个新的SequenceNumber,