RTP
UDPと組み合わせてRTPを使う場合、RTPのパケットは図3のようになります。 RTPは、リアルタイム情報を運ぶための汎用ヘッダであるRTPヘッダと、実際のデータを格納するRTPペイロードにより構成されます。
RTPでは、転送などの挙動に関する詳細をあえて不完全なままにしています。 これらの詳細は、RTPプロファイルとRTPペイロードフォーマットにより規定されます。 RTPプロファイルは、挙動に関して記したものです。 RTPペイロードは、運ぶフォーマット(例えばMPEG1、MPEG2、MJPEG、L16など)毎に別々のRFC(Request For Comments)として定義されています。
オプションを使わない最小構成のRTPヘッダは図4のようになっています。
version(v) | 2 bit | 現在のRTPのバージョンは2です。 |
padding(p) | 1 bit | RTPペイロードの最後にパディングがある場合に1になります。 |
extension(x) | 1 bit | RTP拡張ヘッダを利用する場合に1になります。 |
csrc count(cc) | 4 bit | csrcの数が入ります。csrcは、途中にミキサやトランスレータが入り、複数RTPストリームがマージされたときにマージされたソースを表すために利用されます。 |
marker(m) | 1 bit | RTPストリームの重要なイベントに印をつけるために使います。このビットの利用方法は利用するRTPプロファイルやRTPペイロードフォーマットによって決まります。 |
payload type | 7 bit | ペイロードの種類を表します。昔はペイロードの種類ごとにstaticに割り振られていましたが、現在はSDPやシグナリングを使って動的にペイロードタイプを割り当てる事になっています。 |
sequence number | 16 bit | RTPパケットのシーケンス番号です。パケットが送信される度にインクリメントされます。これを利用して受信者側でパケットロスを検知できます。16ビットなので1周する事を想定したプログラムを書く必要があります。 |
timestamp | 32 bit | タイムスタンプです。タイムスタンプの増加の割合やどのタイミングでタイムスタンプが変化するかはペイロードフォーマットに依存します。 |
ssrc | 32 bit | 送信者識別子です。 |
RTPを送信するためのUDPポート番号は偶数の番号、RTCPはRTPのポート番号に1を足した奇数の番号を利用することをお勧め致します。 例えば、RTPをUDPポート番号12000で送った場合、それに対応するRTCPはUDPポート番号12001で送るという感じです。 以前まで、このようにRTPは偶数番でRTCPは奇数番というのが決まりでした。 しかし、最近はこの制限が緩和されたため必ずしも従う必要はありません。 そのため、ポート番号の決定は自由ですが以前のシステムとの互換性を考えるとRTPを偶数番で利用し、それに対応するRTCPは+1したポート番号を使うのが無難であると思われます。
| | 1 | | | 2 | | | 3 | | |