UlpFec的解码过程分析
在WebRTC中,Fec的传输是通过封装为Red包进行的,因此在接收的时候,是以Red包进行接收的。
1.把接收到的Red包进行解包,转换为Rtp包或者Fec包处理
此处调用ulpfec_receiver_impl中的AddReceivedRedPacket去掉Red头部获得Rtp/Fec包
2.将Rtp/Fec存入对应的位置
此处调用ulpfec_receiver_impl中的ProcessReceicedFec
首先判断该包为Fec包还是Rtp包,若为Rtp包,则先将其直接发送到vcm(VideoCodingModule)模块中,
若为Fec包则利用DecodeFec(receiveds,recovereds)进行Fec解码(该函数依旧在forward_error_correction中)、
DecodeFec中先有判断,接收的包和需要恢复的数据包是否为同一group中的,如果是则对他们进行处理
-
首先调用InsertPackets,根据Fec包/Rtp包调用
若为Fec包则调用InsertFecPacket,该函数判断重复后调用AssignRecoveredPackets,把该Fec包保护的所有Rtc包均放入列表中(利用protected_packets存储)若为Rtp包则调用InsertMediaPacket,判断其是否在recovereds中,若在,则从列表中去掉。
-
然后调用AttempRecovery对于Fec列表中的每一个FEC包,判断其目前的丢包数
如果未丢包则无需恢复操作,