RTP/RTCPとは?【第2回】RTP/RTCPパケットにはどんな情報が含まれているか

みなさん、こんにちは。
  第1回 では、RTP/RTCPの概要についてお話しました。
 今回は第2回目として「RTP/RTCPパケットにはどのような情報が含まれているか」について説明していきたいと思います。
 それでは始めましょう。
目次
はじめに
まずはRTPとRTCPについて少しおさらいをします。
RTP
RTPはTCP/IPネットワーク上で音声や動画のように連続するデータの流れをリアルタイムに伝送するための通信プロトコルです。
  第1回 で説明したカプセル化においてRTPペイロード(メディアデータ)とRTPヘッダをつけて送受信されます。
RTCP
RTCPは、RTPパケットによる情報転送を制御するためのプロトコルで、RTPパケットのデータ転送を補助する役割を果たします。
 カプセル化においてRTCPペイロードとRTCPヘッダをつけて送受信されます。
RTPパケット
RTPヘッダ
- ■ V
 - RTPのバージョン番号。現在(RFC1889)は2。
 - ■ P
 - パディング。パケットの最後にペイロードがパディングされ、本来の長さよりも長くなっていることを示す。
 - ■ X
 - 拡張ヘッダの有無を示す。拡張ヘッダはPTごとに定義されており、存在する場合はCSRC識別子の後に挿入される。
 - ■ CC
 - CSRCカウント(4bit)。後続するCSRC識別子の数がはいる。
 - ■ M
 - マーカ(1bit)。
パケットストリームでのフレーム境界の有無やストリーム内での重要なイベントにマークを付けるために使用される。
意味は使用するRTPプロファイルとメディアタイプによって定義される。 - ■ PT
 - ペイロードタイプ。
0:G.711 μ-law, 2:G.721, 8:G.711 A-law, 9:G.722 - ■ Sequence Number
 - シーケンス番号。初期値が乱数で,パケットごとに1ずつ増加。
受信側でパケットの破棄や受信順序の入れ替りを検出することができる。 - ■ Timestamp
 - 先頭バイトの送信時刻。値はメディア(ペイロードタイプ)ごとに異なる割合で増加し、最大値を超えると0となる。メディアデータの再生をスケジュールするために使用される。
例えば、G.711 u-law を 20ms のパケット長で送信する場合(これはVoIPで標準的な仕様)、8kHz(1秒間に8000回サンプリング)なので、1パケットに160サンプル分(160 byte)のデータが含まれており、タイムスタンプもパケットごとに 160ずつ増加する。 - ■ SSRC
 - 同期送信元(SSRC)識別子。
RTPパケットの送信元を識別するための識別子。
識別子の値には乱数が使用される。 - 
 - ■ CSRC
 - 寄与送信元(CSRC)識別子。
RTPでは複数の送信元から送られるパケットをミキシングする「ミキサ」という機能が定義されている。
例えば、2人の話者から送信される2系統の音声パケットをそれぞれデコードし、加算した後で再びエンコードすれば1つのRTPパケットが得られる。このような場合、CSRC識別子として元のパケットのSSRC識別子を列挙する。1対1の通信の場合は、CSRC識別子は存在せずCCの値は0となる。 - 
 
RTCPパケット
RTCPヘッダ(基本)
- ■ V
 - RTPのバージョン番号。現在(RFC1889)は2。
 - ■ P
 - パディング。パケットの最後にペイロードがパディングされ、本来の長さよりも長くなっていることを示す。
 - ■ IC
 - Item Count。ペイロードに複数の項目がリスト形式で含まれている場合、その項目の数を示す。パケットの種類によっては別の目的で使用されることもある。
 - ■ PT
 - Packet Type。RTCP のパケット種類を示す。
 - ■ Length
 - ヘッダを除くパケット長(ペイロード長)を示す。
 
RTCPパケット種類(PT)
| 略称 | CODE | |
|---|---|---|
| SR | 200 | Sender Report(送信者レポート) | 
| RR | 201 | Receiver Report(受信者レポート) | 
| SDES | 202 | Source Description(送信元記述) | 
| BYE | 203 | Goodbye(退去メッセージ) | 
| APP | 204 | Application Defined(アプリケーション定義) | 
| FIR | 192 | Full INTRA-Frame request(フルイントラフレーム要求) | 
| NACK | 193 | Negative acknowledgement(否定応答) | 
Sender Report
(送信者レポート)
アプリケーションはデータを受信せずに、SRパケットの情報に基づいてインターバル単位でのペイロードデータの平均レートとパケットの平均レートを計算できます。そしてこの2つの比率からペイロードの平均サイズを得ることができます。
 また、タイムスタンプを使えば、メディアクロックと周s知の外部参照との間の対応付けができます。
 これによってリップシンク(口の動きと声を同期させる)が可能となります。
- ■ V, P
 - RTCPヘッダ(基本)の通り。
 - ■ RC
 - このパケットに含まれる受信レポートブロックの数。
 - ■ PT
 - RTCPヘッダ(基本)の通り、SRは200。
 - ■ Length
 - このRTCPパケットの長さ(32ビットワードから1を引いた値)で、ヘッダとパディングを含む。
 - ■ SSRC of sender
 - このSRパケットの送信者の同期ソース識別子。
 
- ■ NTP timestamp
 - NTP タイムスタンプは、このレポートが送信されたときの壁時計時間で測定された時点を示す。
それぞれの受信者からの受信レポートで返されたタイムスタンプと組み合わせて、受信者との間の往復伝搬時間を推定するために使用できる。 - ■ RTS
 - RTPタイムスタンプは、NTPタイムスタンプ(上記)と同じ時刻に似ていますが、データ パケットのRTPタイムスタンプと同じ単位と同じランダム オフセットで測定される。
この対応は、NTPタイムスタンプが同期されているソースのメディア内およびメディア間同期に使用でき、メディアに依存しない受信機が公称RTPクロック周波数を推定するために使用できる。RTCPヘッダ(基本)の通りSRは200。 - ■ SPC
 - 送信者のパケット数は、RTPセッションに参加してから送信者によって送信されたRTP データ パケットの数を合計する。
このフィールドは、平均データ パケット レートを推定するために使用できる。このRTCPパケットの長さ(32ビットワードから1を引いた値)で、ヘッダとパディングを含む。 - ■ SOC
 - 送信を開始してから、送信者がRTPデータパケットで送信したペイロード オクテットの総数(つまり、ヘッダーやパディングを含まない)。このフィールドは、平均ペイロード データ レートを推定するために使用できる。
 
- ■ SSRC_n
 - このブロックで受信が報告された送信者の SSRC 識別子。
 - ■ F
 - 受信者レポートの送信者は、以前のSRまたはRRパケットを送信してから失われたと想定するソース SSRC_n からの RTP データ パケットの割合を推定する。
 - ■ C
 - 受信者レポートブロックの送信者は、受信開始以降に失われたソースSSRC_n からのRTPデータ パケットの総数を推定しようとする。
遅れて到着したパケットは失われたものとしてカウントされず、重複がある場合、損失はマイナスになる可能性がある。 - ■ EHSN
 - 拡張された最大シーケンス番号の下位16ビットには、ソースSSRC_nからRTPデータ パケットで受信された最大シーケンス番号が含まれ、最上位16ビットは、対応するシーケンス番号サイクル数でそのシーケンス番号を拡張する。
 - ■ J
 - タイムスタンプ単位で測定され、符号なし整数として表されるRTP データ パケットの到着間隔時間の統計的分散の推定値。
 
Receiver Report
(受信者レポート)
受信者レポートは受信品質のフィードバックに主に使われます。送信側はRRパケットによるフィードバックに従ってデータの転送量を調節することが可能です。それ以外の参加者もRRパケットにより問題が局所的なものか多数の受信側で発生しているのかを判断できます、また、送信側はLSRとDLSRのフィールドを使用し、自分と各受信者間の往復時間を計算することもできます。
受信者レポートは、送信者レポートと同じように構成されています。
 もちろん、送信者情報ブロック(The sender information block)は含まれておらず パケット タイプ コードは 201 です。
Source Description
(送信元記述)
SDESパケットは、SDESヘッダと、記述されたソースの可変数のチャンクで構成されます。各チャンクは、SSRC/CSRC 識別子とSDESアイテムのコレクションで構成されます。SDES アイテム自体は、SDESアイテム タイプ コード(8ビット)、長さフィールド(8ビット)、および長さフィールドが示すテキスト オクテットから構成されます。
- ■ V, P, PT, L
 - RTCPヘッダ(基本)の通り。
 - ■ SC
 - このSDES パケットに含まれるSSRC/CSRCチャンクの数。
 
さまざまなSDESアイテムは、type-length-value スキームに従ってエンコードされます。現在、CNAME、NAME、EMAIL、PHONE、LOC、TOOL、NOTE、およびPRIV項目が[RFC1889]で定義されています。
 CNAME 項目はすべてのSDES パケットで必須であり、これはすべての複合RTCPパケットの必須部分です。SSRC 識別子と同様に、CNAMEは他のすべてのセッション参加者のCNAMEとは異なる必要があります。
ただし、CNAME 識別子を無作為に選択する代わりに、CNAME は人またはプログラムの両方がCNAME コンテンツを使用してソースを特定できるようにする必要があります。
Goodbye(退去メッセージ)
参加者は BYE パケットを送信して、1つ以上のソースがアクティブでなくなったことを示し、オプションで退去の理由を示します。
- ■ V, P, PT, Length
 - RTCPヘッダ(基本)の通り。
 - ■ SC
 - このBYEパケットに含まれるSSRC/CSRC識別子の数。
 
Application Defined
(アプリケーション定義)
APP パケットは、新しいアプリケーションや機能を開発する際の実験的な使用を目的としています。
 新しいAPP RTCP パケット タイプがテストされ、有用であることが判明したら、元のパケット タイプとしてInternet Assigned Numbers Authority(IANA)に登録する必要があります。
- ■ V, P, PT, L
 - RTCPヘッダ(基本)の通り。
 - ■ ST
 - サブタイプ フィールドを使用すると、APP パケットのセットを1つの一意の名前で定義したり、アプリケーションに依存するデータを提供したりできる。
 - ■ N
 - このアプリケーションが受信する可能性のある他の APP パケットに対して一意になるように、APP パケットのセットを定義する人が選択した名前。
 - ■ A
 - アプリケーション依存のデータは、APP パケットに表示される場合と表示されない場合がある。
 
おわりに
いかがでしたでしょうか。
RTP/RTCPパケットにどのようなデータが含まれているか理解いただければ幸いです。
最後までご覧いただきましてありがとうございました。
VoIP関連のDSP、システム・オン・チップ(SoC)などに関する情報は以下よりご確認ください。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



