分析来说,在WebRTC中使用ULPFEC其实是动态的,媒体包来自于同一帧,并将其打成RTP包列表,冗余包的个数来自于FecProtectionParams函数中的fec_rate,即冗余度,这个是动态的
假设媒体包为M个,冗余包为N个,采用某类掩码表(random或者bursty),
那么ForwardErrorCorrection::GenerateFecPayload根据packet_masks(在fec_private_tables_bursty中给出)对原有的rtc进行异或,
例如M=2,N=2,采用Bursty类掩码表,那么使用的掩码表为kPacketMaskBurstyTbl2_2,
其中kPacketMaskBurstyTbl2_2[4]={0x80,0x00,0xc0,0x00}
第一个fec包0x80由第一个媒体包异或组成
第二个fec包0xc0由第一个和第二个媒体包异或构成,
例如M=3,N=1,采用Bursty类掩码表,那么使用的掩码表为kPacketMaskBurstyTbl3_1,
其中kPacketMaskBurstyTbl3_1[4]={0xe0,0x00}
第一个fec包0xe0由第一,第二个,第三个媒体包异或组成.