流穿透
2.1 背景
当话机跨越 NAT 进行通信时,外部媒体流由于不能穿越内网从而导致无法通信。这种情况在两台已经通信的设备在长时间 Hold 后也会出现,由于外网路由器保存的 NAT 映射信息超时,从而导致 Resume 后仍然无法通信。为保证 NAT 下的正常通信,保证 RTP 流穿透显得尤为重要。
2.2 原理
根据 RFC6263 , 工作在 INACTIVE 和 RECVONLY 的情况下,要采用规范里推荐的一种方式来定期发送 RTP 包。规范推荐用 RTCP 复用 RTP 的方法,担心很多终端没有实现,考虑兼容的问题决定采用其他方式。
参考规范第四节,考虑通过定时发送错误 Payload Type 的 RTP 包来保证通信。
2.3 应用
2.3.1 配置


开启上图配置后,会使能 RTP 流穿透,在以下情况会发送 RTP Keep Alive 包:
1 话机拨通电话后会发送 RTP 包来打通 NAT 通道(应用于 x6 视频通话)
2 话机通话 Hold 后会定时发送 RTP 来保持 NAT 连接
2.3.2 抓包
下图显示了发送的 RTP Keep Alive 包,可以看到 wireshark 解析出来的包,正常通话的包编码为 G.711 PCMU,与发出去的 RTP Keep Alive 包的编码是不一致的。


下图显示一个完整的 RTP Keep Alive 包

