RTPについて
VoIPでは符号化した音声データの伝送を行うためにRTP(Real-time Transport Protocol:リアルタイム転送プロトコル)を使用します。
RTPの特徴
一般的なRTPパケットの構造を(図6)に示します。 RTPの大きな目的は符号データのフレーミング(パケット化)を行い,RTPヘッダのシーケンス番号とタイムスタンプ情報を利用することにより, 送信側のパケット送出タイミングを受信側でも復元できるようにすることです。 伝送データのフレーミングを行うという点ではトランスポート層に近い役割を果たしますが, 効率良くリアルタイム制御を行うためにアプリケーション層で直接フレーミングを行います。 最適なフレーミング方法は符号データごとに異なりますので,RTPでは詳細な仕様を定義していません。 符号データごとの具体的なフレーミング方法,すなわちRTPパケットのフォーマットはIETFからRFC3551として公開されています。
(http://www.ietf.org/rfc/rfc3551.txt)
RTPでは下位の転送プロトコルにUDPを使用します。 もしネットワークでパケットが破棄された場合でもTCPのように再送せず,新しいパケットを転送し続ける方がリアルタイム通信には適しています。 RTPには符号データを伝送する機能しかありません。RTPパケットの伝送制御や監視はRTCP(RTP Control Protocol:RTP制御プロトコル)により行います。
(図6)RTPパケット
RTPヘッダ
(図7)にRTPヘッダの構造を示します。
(図7)RTPヘッダ
バージョン(V)
RTPのバージョン番号。現在(RFC1889)は2です。
パディング(P)
パディング・データの有無を示します。
拡張ヘッダ
拡張ヘッダの有無を示します。拡張ヘッダはPTごとに定義されており,存在する場合はCSRC識別子の後に挿入されます。
CSRC識別子の数(CC)
マーカー(M)
使用方法はPTごとに定義されます。
ペイロード・タイプ(PT)
伝送する符号データの種類を示します。
シーケンス番号
初期値が乱数で,パケットごとに1ずつ増加します。受信側でパケットの破棄や受信順序の入れ替りを検出することができます。
タイムスタンプ
パケットに含まれる最も古いデータが発生した時刻を表します。クロックの周波数はPTごとに定義され, 音声コーデックの場合はサンプリング周波数になります。 たとえば8kHzサンプリングの音声コーデックを20msecのパケット長で伝送する場合, 1パケットには160サンプル分の音声データが含まれており,タイムスタンプもパケットごとに160ずつ増加します。
同期送信元(SSRC)識別子
RTPパケットの送信元を識別するための識別子です。識別子の値には乱数を使用します。
寄与送信元(CSRC)識別子
RTPでは複数の送信元から送られるパケットをミキシングする「ミキサ」という機能が定義されています。 たとえば2人の話者から送信される2系統の音声パケットをそれぞれデコードし,加算した後で再びエンコードすれば1つのRTPパケットが得られます。 このような場合,CSRC識別子として元のパケットのSSRC識別子を列挙します。1対1の通信の場合はCSRC識別子は存在せずCCの値は0になります。