3DRX

// post

Read WebRTC Fec code

WebRTC Fec 代码阅读笔记

Updated

FEC 编码

WebRTC 中的 FEC 算法有两种,FlexFec 和 UlpFec, 其中默认的是 UlpFec。 两种 Fec 类的接口相同,是 VideoFecGeneratorUlpfecGenerator::AddPacketAndGenerateFec(const RtpPacketToSend& packet) 是 fec 编码过程的入口。

其中调用了函数 int ForwardErrorCorrection::EncodeFec(...)

...

fec_->EncodeFec(media_packets_, params.fec_rate, kNumImportantPackets,
        kUseUnequalProtection, params.fec_mask_type,
        &generated_fec_packets_);

...

该函数中如下语句控制产生 FEC 冗余数据量的比例

...

// Prepare generated FEC packets.
int num_fec_packets = NumFecPackets(num_media_packets, protection_factor);
if (num_fec_packets == 0) {
  return 0;
}

... encode fec

FEC rate 决策

bool VCMNackFecMethod::ProtectionFactor(...)

参考链接

https://xjsxjtu.github.io/2017-07-16/LearningWebRTC-adafec/

https://xjsxjtu.github.io/2017-07-16/LearningWebRTC-fec/