IP電話機がNATを越えて通信する場合、外部のメディアストリームが内部ネットワークを通過できず、通信できなくなることがあります。この状況は、すでに通信中の2台のデバイスが長時間Hold状態になった場合にも発生します。外部ルーターに保存されたNATマッピング情報がタイムアウトするため、Resume後も通信できない場合があります。
NAT環境で正常な通信を確保するためには、RTPストリーム透過を保証することが非常に重要です。
RFC6263によると、INACTIVEおよびRECVONLYの状態で動作する場合、規格で推奨されるいずれかの方式を使用して、RTPパケットを定期的に送信する必要があります。規格ではRTCPをRTPに多重化する方式が推奨されていますが、多くの端末で実装されていない可能性があるため、互換性を考慮して別の方式を採用します。
規格の第4節を参考にし、誤ったPayload TypeのRTPパケットを定期的に送信することで通信を維持します。
1.3.1 設定
上図の設定を有効にすると、RTPストリーム透過が有効になります。次の状況でRTP Keep Aliveパケットが送信されます。
1 電話機で通話が接続された後、電話機はNATチャネルを開くためにRTPパケットを送信します。これはX6ビデオ通話に適用されます。
2 電話機の通話がHold状態になった後、電話機はNAT接続を維持するためにRTPパケットを定期的に送信します。
1.3.2 パケットキャプチャ
次の図は、送信されたRTP Keep Alive パケットを示しています。Wiresharkで解析されたパケットを見ると、通常通話のコーデックはG.711 PCMUであり、送信されたRTP Keep Aliveパケットのコーデックとは一致していません。
次の図は、完全なRTP Keep Aliveパケットを示しています。