RTP
音声や映像などのリアルタイムのデータを運ぶためのプロトコル。通常はUDPの上で使い、シーケンス番号とタイムスタンプで順序と再生のタイミングを伝える。
イマシルちゃんの解説
RTPは、通話の音声や映像などを運ぶためのプロトコルだよ。
こうしたデータは小分けにして送るけれど、途中で順番が入れ替わったり、届く間隔がばらついたりすることがあるんだ。
そこで各パケットに、送った順番を示すシーケンス番号と、音声や映像の時間的な位置を示すタイムスタンプを付けるよ。
受け取る側はその情報を使って順番や再生のタイミングを整えるんだ。
RTP自体が遅延をなくすわけではないけれど、届いた順にすぐ再生するよりも、元の音声や映像の流れを再現しやすくなるんだよ。
この解説はわかりやすかったですか?
より深い解説
定義
RTP(Real-time Transport Protocol)は、RFC 3550で定められた、音声や映像などのリアルタイムのメディアデータを伝送するためのプロトコルである。トランスポート層の機能を補うプロトコルで、通常はUDPの上で動作する。VoIPでは、音声データそのもの(メディア)の伝送をRTPが、呼の制御をSIPが担う。
再送をしない理由
TCPは、失われたデータを再送して確実に届けるが、再送を待つ間、後続のデータの受け渡しも止まってしまう。リアルタイムの音声では、遅れて届いたデータは再生に間に合わず役に立たないため、再送よりも遅延が小さいことが重視される。そこで、再送をしないUDPを使い、足りない機能をRTPで補う。
RTPヘッダーの主なフィールド
RTPヘッダーは、固定部分が12バイトである。
| フィールド | 役割 |
|---|---|
| ペイロードタイプ | 使っているコーデック(G.711、G.729など)を示す |
| シーケンス番号 | パケットごとに1ずつ増える番号。パケットの損失や順序の入れ替わりを検出する |
| タイムスタンプ | ペイロードの先頭の音が標本化された時刻。受信側で再生のタイミングを合わせ、ジッタを計算する |
| SSRC | 送信元(ストリーム)の識別子 |
前者は「何番目のパケットか」、後者は「どの時点の音か」を表す。無音の区間に送信を止めた場合、パケットの番号は連続したままだが、音の時刻は飛ぶ。
RTCP
RTCP(RTP Control Protocol)は、RTPと対になるプロトコルで、通信の品質に関する情報(パケット損失率、ジッタ、遅延など)を送信者と受信者の間で定期的に報告し合う。RTPがデータを、RTCPが品質の監視を担当する。
ポート番号
RTPのポート番号は固定ではなく、SIPなどの呼制御で、通話ごとに動的に決められる。慣習として、RTPに偶数のポート番号、対応するRTCPにその次の奇数のポート番号を使う。このため、ファイアウォールやNATでは、SIPのやり取りを解析して必要なポートを動的に開ける機能(SIP ALGなど)が必要になる場合がある。
VoIPパケットのヘッダー構成
| IPヘッダー(20バイト) | UDPヘッダー(8バイト) | RTPヘッダー(12バイト) | 音声ペイロード |
音声ペイロードが小さいコーデックでは、ヘッダーのオーバーヘッドが大きな割合を占める。