WebRTC m79中的RTP padding

1 为什么需要padding

  • 启动网络探测时,需要实际发送数据,PacedSender模块请求发送Padding
  • 网络状态突变时会启动网络探测
  • 实际编码带宽低于预测带宽,PacedSender执行发送时检测到发送数据量低于本次基于带宽预估分配的数据量,不足的部分发送padding
  • 每500ms发送一个心跳包,padding_size = 1

2 Padding的生成

核心业务逻辑在RTPSender::GeneratePadding(), 这里有两种模式:  RTX模式、普通模式,区别:WebRTC的NACK和RTX简述

两种模式下的区别

  • RTX: 如果启用RTX, WebRTC会从历史发送的packet中取一包数据,把类型改为padding,直到请求的padding_size用尽,并且使用RTX通道专用的序列号序列
  • 普通模式:生成新的RTP Padding包,长度范围: 50 - 224字节,超过224分段发,通常224字节满额发送,原因如下
      if (audio_configured_) {
        // Allow smaller padding packets for audio.
        padding_bytes_in_packet = rtc::SafeClamp<size_t>(
            bytes_left, kMinAudioPaddingLength,
            rtc::SafeMin(max_payload_size, kMaxPaddingLength));
      } else {
        // Always send full padding packets. This is accounted for by the
        // RtpPacketSender, which will make sure we don't send too much padding even
        // if a single packet is larger than requested.
        // We do this to avoid frequently sending small packets on higher bitrates.
        padding_bytes_in_packet = rtc::SafeMin(max_payload_size, kMaxPaddingLength);
      }

    bool RtpPacket::SetPadding(size_t padding_bytes)接口会设置padding标志和padding中的长度信息

3 解析padding包

  1. 为了方便理解,这里通过padding包的构成不同,简单将之分为两类:纯padding包、部分padding同时带有音视频数据RTP包
  2. RTP头中的padding标志了本RTP包中一定包含了Padding数据,同时也可能包含了真实的负载数据
  3. RTP音视频负载长度payload_size_ = 总长度 - RTP头及扩展长度 - Padding长度
  4. payload_size_> 0为有效数据包, payload_size_== 0为纯padding包

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值