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

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

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