WebRTC中的padding数据包主要用于以下几个方面:
-
网络探测和带宽调整:在启动网络探测或网络状态突变时,WebRTC会发送padding数据包以启动网络探测。这有助于评估网络的实际编码带宽,从而调整发送策略。
-
填充预算(Budget):PacedSender模块在执行发送时,如果检测到实际编码带宽低于预测带宽,会发送padding数据包以补足基于带宽预估分配的数据量。
-
心跳包:WebRTC每500ms发送一个心跳包,其padding大小为1字节,以保持连接活跃。
-
防止突发数据包:Pacer模块的目的之一是防止突发数据包发送到网络,造成丢包。通过发送padding数据包,可以均匀地分布在各个时间片里发送数据,避免瞬时对网络的冲击。
-
调整发送数据包的优先级:Pacer模块还会调整发送数据包的优先级,确保音频、重传、视频和FEC数据包的发送优先于padding数据包。
-
生成Padding数据包:在RTPSender::GeneratePadding()中,有两种模式生成padding数据包:RTX模式和普通模式。在RTX模式下,会从历史发送的packet中取一包数据,把类型改为padding;在普通模式下,生成新的RTP Padding包,长度范围为50-224字节。
-
解析Padding包:RTP头中的padding标志表示本RTP包中包含了Padding数据,同时也可能包含了真实的负载数据。RTP音视频负载长度payload_size = 总长度 - RTP头及扩展长度 - Padding长度。如果payload_size > 0为有效数据包,payload_size == 0为纯padding包。
-
RTP扩展和填充数据:RTP使用的端口号为偶数,每个关联的RTCP端口为下一个较高的奇数。RTP头中的P(Padding)位表示RTP数据包是否有填充值。最后一个字节记录填充字节个数(Padding Size),包含它自己。填充数据不属于RTP Payload的部分。
通过这些机制,WebRTC能够有效地管理网络带宽,优化数据传输,提高通信质量。