一句话说透计算机视频传输里面的为什么我们在选择 RTP 打包方式的时候,需要根据 NALU 大小是不是大于 1500 字节(MTU)来选择?

146 阅读3分钟

一句话总结:
选择 RTP 打包方式时,根据 NALU 是否超过 MTU(如1500字节)来决定,就像寄快递时判断包裹是否超重——小包裹直接发,大包裹拆箱分装,避免被快递公司拒收或额外收费!


一、MTU 是什么?为什么是 1500 字节?

  • MTU(最大传输单元) :网络链路层一次能传输的最大数据包大小。

    • 以太网默认 MTU=1500 字节:这是历史遗留标准(早期网络设备内存限制),沿用至今。

    • 超过 MTU 的后果

      • 路由器强制分片:拆成多个小包,但分片丢失一个,整个包失效(像快递拆箱后丢件)。
      • 传输效率下降:分片重组消耗计算资源,增加延迟。

二、视频 NALU 的 RTP 打包策略

1. 小 NALU(≤1500字节)→ 直接装一个 RTP 包

  • 模式:Single NAL Unit 模式。

  • 结构

    [RTP头 | NALU头 | NALU数据]  
    
  • 优点:简单高效,无需额外分片头。

2. 大 NALU(>1500字节)→ 必须拆成多个 RTP 包

  • 模式:Fragmentation Unit (FU-A) 模式。

  • 结构

    1[RTP头 | FU指示头 | FU分片头(S=1) | 分片1数据]2[RTP头 | FU指示头 | FU分片头(S=0) | 分片2数据]  
    包N:[RTP头 | FU指示头 | FU分片头(E=1) | 分片N数据]  
    
    • S(Start) :标记分片起始包。
    • E(End) :标记分片结束包。
  • 优点:避免网络层分片,自主控制分片逻辑,提高可靠性。


三、为什么必须根据 MTU 选择打包方式?

场景直接发送大 NALU分片发送(FU-A)
路由器处理强制拆片,重组失败则全丢应用层自主分片,标记清晰易重组
传输效率分片开销大,延迟高分片头仅3字节,效率更高
抗丢包能力任意分片丢失导致整个 NALU 失效可配合重传或纠错码保护关键分片
兼容性某些防火墙/NAT 设备会丢弃分片包统一封装,穿透性更好

四、实战示例:H.264 关键帧分片

假设一个 IDR 帧的 NALU 大小为 3000 字节:

  1. 拆包

    • 分片1:RTP头 + FU头 + 分片头(S=1) + 数据(1400字节)
    • 分片2:RTP头 + FU头 + 分片头(S=0) + 数据(1400字节)
    • 分片3:RTP头 + FU头 + 分片头(E=1) + 数据(200字节)
  2. 传输

    • 三个包分别发送,接收方根据序号和 S/E 标记重组。

五、扩展:MTU 不总是 1500!

  • 实际网络中的 MTU 可能更小

    • VPN/隧道封装:额外头部占用,有效 MTU 可能减至 1400 字节。
    • Wi-Fi/4G:MTU 通常仍为 1500,但需预留协议开销(如 IPsec)。
  • 自适应策略

    • 动态探测路径 MTU(如 ICMP 探测)。
    • 保守预设分片阈值(如默认按 1400 字节分片)。

六、总结口诀

“NALU大小比MTU,超了必须拆箱走。
直接发包会被拆,分片自主更可控。
FU-A模式标始终,抗丢保序穿透强。
视频传输无脑记,RTP打包稳如狗!”