RTP

UDPと組み合わせてRTPを使う場合、RTPのパケットは図3のようになります。 RTPは、リアルタイム情報を運ぶための汎用ヘッダであるRTPヘッダと、実際のデータを格納するRTPペイロードにより構成されます。

図3. RTPパケット
RTP packet

RTPでは、転送などの挙動に関する詳細をあえて不完全なままにしています。 これらの詳細は、RTPプロファイルとRTPペイロードフォーマットにより規定されます。 RTPプロファイルは、挙動に関して記したものです。 RTPペイロードは、運ぶフォーマット(例えばMPEG1、MPEG2、MJPEG、L16など)毎に別々のRFC(Request For Comments)として定義されています。

図4. RTPヘッダ
RTP header

オプションを使わない最小構成のRTPヘッダは図4のようになっています。

version(v) 1 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 |

YouTubeで技術解説やってます!