posts

vnn01

Ulpfec

tags
webrtc

ulpfec

  • 就像我们日常生活中的事情有轻重缓急,实时音视频传输里面的数据重要性也有轻重之分
    • 音视频编码输出的数据往往是头部数据更重要(几乎所有的媒体格式帧头都是放在前面)
  • ulpfec(非均匀程度fec)算法针对不同重要程度的数据报文给予不同程度的保护
  • 但webrtc的ulpfec并没有实现完整的ULP功能,定义了相关参数,但实际生成的FEC包是对将每个包都视作同等重要的

rfc中的ulpfec

  • 可以将包内部划分成L0、L1这2个重要程度,对包内的数据进行保护

    • A、B的L0部分由FEC1的L0保护
    • C、D的L0部分由FEC2的L0保护
    • A、B、C、D的L1部分,由FEC2的L1保护
             Packet A          #####################
                                      :        :
             Packet B          ############### :
                                      :        :
             ULP FEC Packet #1 @@@@@@@@        :
                                      :        :
             Packet C          ###########     :
                                      :        :
             Packet D          ###################################
                                      :        :
             ULP FEC Packet #2 @@@@@@@@@@@@@@@@@
                               :      :        :
                               :<-L0->:<--L1-->:
    
  • 具体的描述在

生成

关键数据结构

UlpfecGenerator

  const std::unique_ptr<ForwardErrorCorrection> fec_;
  ForwardErrorCorrection::PacketList media_packets_;
  std::optional<RtpPacketToSend> last_media_packet_;
  std::list<ForwardErrorCorrection::Packet*> generated_fec_packets_;

解码