WebRTC QoS方法之FlexFEC 实现优化点

一、冗余报文和媒体报文组织结构优化点

以单帧10个媒体报文,冗余度20%为例。这里webrtc输出要有10个媒体包2个冗余包。webrtc输出的报文序列如下:

代码实现如下:

UlpfecGenerator::AddPacketAndGenerateFec:攒够足够的帧

ForwardErrorCorrection::EncodeFec:根据媒体报文个数和冗余度,计算要生成的冗余报文个数。

ForwardErrorCorrection::GenerateFecPayloads:通过这组媒体报文数据,连续生成num_fec_packets个冗余报文。

EnqueuePackets函数,一口气把num_fec_packets个冗余报文全部发送出去。

可以看出这种打包方式,会增加FEC解码端的解码时间。 建议优化改成FEC和媒体报文交织打包发送。如下:

二、冗余报文的保护个数限制

UlpfecGenerator::AddPacketAndGenerateFec函数限制如下:

目前webrtc限制,仅支持48bit的掩码,若是单帧视频报文数大于48的话,后续报文不会push到media_packets_队列,也就不会参与冗余。降低了FEC的保护能力。实际根据rfc8627协议格式,flexfec可以保护108个媒体包。这里的限制不合理。

flexfec_header_reader_writer.h文件报文格式定义:

 三、仅支持1D列冗余模式

 可以引入2D行列冗余模式,对抗连续丢包和随机丢包两种丢包模型。

 但是这种打包方式冗余度偏高,对于延时要求不是特别严苛的场景下,可以考虑多帧冗余打包。

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/131845158