Fec
1.能力交互加粗样式
Fec能力交互有3个消息,这个是fec capability能力消息,一个是fec Ack能力确认,一个是fec finish协商结束。要3次握手
2.fec命令和指示
Fec命令用于fec编码的启动和停止;fec指示用于fec解码的启动和停止;
接收到fec command之后,如果启动fec编码成功,则发送fec indication通知对端启动fec解码;如果启动fec编码失败或者停止fec编码,则发送fec指示通知对端停止fec解码;
丢包处理:在消息的最后增加序号,fec command发送端需要确认对方是否收到消息,通过接收到的fec indition消息进行确认,fec indition不需要确认
3.fec编码参数
分组大小:被保护的一组数据包的个数。由终端的cpu能力,速率,以及延迟来综合决定。例如,速率为1M,以每个包1400字节计算,每秒大约有89个包,没100ms有9个包,此时如果取分组为10,那么等待此分组就需要100ms左右,加上网络延时,解码延迟等,延迟可能更大,即使恢复了也会带来影响。
冗余度:冗余包占用的带宽。采用公式计算,目的先用大冗余度解决丢包,再根据网络状况慢慢降低到一个合适的冗余度。
4.自动fec
自动fec用过fec+反馈消息实现动态调整fec编码参数以抵抗变化的网络丢包率;
反馈消息是通过 fec command消息实现的,在fec command消息中填写实际的网络丢包率,用于远端决策编码参数。
利用fec消息中的fec模式字段,要求远端增加冗余包或减少冗余度?
5.自动fec处理流程
接收端检测有丢包时,向发送端发送启动fec编码的请求。
接收端检测到网络丢包率发生变化,请求对端调整参数:
网络丢包率上升,立即通知对端调整编码参数,模式设置为丢包率上升,发送端计算编码参数,并当前冗余包个数递增1,以抵抗更多的丢包;
网络丢包率没有变化,但fec解码之后仍然有丢包,通知对端调整参数,冗余包个数递增1,以抵抗更多的丢包;
网络丢包率下降,通知对端调整编码参数,fec模式设置为丢包率下降,冗余包个数递减1,降低冗余度。