webrtc FEC 终极秘籍
- 前言:
WebRTC主要采取两种手段对抗网络丢包:丢包重传(NACK)和前向纠错(FEC)。fec内容较多,分为发送端和接受端,本文集中注意力于FEC发送端。
FEC是一种前向纠错技术,发送端将负载数据加上一定的冗余纠错码一起发送,接收端根据接收到的纠错码对数据进行差错检测,如果发现差错,则利用纠错码进行纠错。
FEC冗余度说明:
冗余比例N: N个媒体包生成一个FEC包
冗余度 = (FEC个数) / (FEC个数+ 媒体包个数)
推流过程中 FEC 工作过程 :
FEC 发送端关键的地方有三个:
1. 计算FEC 媒体分组大小
- 通过丢包率和单个视频帧的码率计算得到媒体分组大小,如fec媒体分组大小是2的话,表示fec模块 每缓冲两帧视频帧大小的rtp数据就开始进行fec编码,生成 fec 包
-
( 计算出 要保护的媒体包的个数(fec 媒体分组(以视频帧作为单位)大小) )
// 这是 表示 一个 fec 的媒体分组(以视频帧作为单位)的 大小(多少个 视频帧 作为一个 fec 的媒体分组(以视频帧作为单位),以视频帧作为单位,而不是 rtp 分片,fec包生成的时候是用 rtp 包作为