在实时音视频的网络传输中,我们需要平衡数据传输的时效性和数据的完整性,FEC(Forward Error Correction 前向纠错)技术可以帮助我们实现这一目标。
FEC的原理: 在发送端对原始报文数据进行编码,生成一些额外的恢复包。当一部分原始数据包在网络传输中丢失时,只要收到足够数量的剩余包(无论是原始的还是恢复的),接收端能通过解码把丢失的数据完美地复原出来。这对于保证在不可靠网络上数据传输的完整性至关重要,并且不依赖报文重传,实现了实时通信。
本教程将详细介绍FEC的原理、实现和应用,帮助你更好地理解和使用FEC技术。
- 如果仅想了解如何调用使用FEC库,可只阅读第1章节FEC 公共接口 (FEC Public Interface)。
- 如果进一步想了解FEC的内部编码器/解码器实现原理,可阅读后续章节。
本项目源码参考的源码 GitHub 仓库地址为:github.com/catid/fecal
使用这个项目代码的原因:
- 代码相对比较简单,性能足够满足常见音视频场景
- 我比较熟悉,在自己开发的raylink、镭速产品中有参考应用
** 整体结构介绍
flowchart TD
A0["FEC 公共接口 (FEC Public Interface)"]
A1["伽罗瓦域 (GF(256)) 运算"]
A2["编码器 (Encoder)"]
A3["解码器 (Decoder)"]
A4["恢复矩阵 (Recovery Matrix)"]
A5["数据窗口 (AppDataWindow)"]
A0 -- "创建和封装" --> A2
A0 -- "创建和封装" --> A3
A2 -- "应用运算生成恢复数据" --> A1
A2 -- "组织原始数据" --> A5
A3 -- "使用矩阵求解" --> A4
A3 -- "追踪数据状态" --> A5
A4 -- "应用运算求解方程" --> A1
A4 -- "查询丢失数据信息" --> A5
A3 -- "应用运算恢复数据" --> A1
章节
- FEC 公共接口 (FEC Public Interface)
- 编码器 (Encoder)
- 解码器 (Decoder)
- 数据窗口 (AppDataWindow)
- 恢复矩阵 (Recovery Matrix)
- 伽罗瓦域 (GF(256)) 运算