RTP/RTCP
概要
RTP (Realmtime Transport Protocol) とは、インターネット経由で、VoIP やビデオストリーミング等、主にマルチメディアデータをリアルタイムに転送するためのプロトコル。関連して、RTCP (RTC Control Protocol)/RTSP (Realtime Streaming Protocol) 等のプロトコルがあり、いずれも IETF によって標準化されている。 RTP はメディアデータ自体を転送するため、RTCP は転送状態をやり取りして転送自体を制御するため、RTSP は再生、停止、録音等の再生状態の制御を行うためのプロトコルになっている。RTP/RTCP はトランスポート層のプロトコルからは独立した規約となっているけれど、実際には UDP での実装がほとんど。 A complete specification of RTP for a particular application will require one or more companion documents of two types described here: profiles, and payload format specifications.
RTP は、異なる要求を持った様々なアプリケーションで利用される。その各々に柔軟に対応するために、特定の環境やアプリケーション種別のために、RTP の拡張定義や大元の仕様から採用した箇所等を記述したものが プロファイル。つまりは特定用途のための詳細仕様に当たる。 ペイロードフォーマット とは、例えば H.264 等、RTP で転送するペイロードデータの種別のことで、どのような圧縮技術 (コーデック) が利用されているか?等について決められたもの。ペイロードフォーマットについては、RTP Payload format for {hoge} Audio/Video Encoding というタイトルで RFC やドキュメントがいくつか公開されている。 端末間でセッションを確率し通信を開始させるために SIP (Session Initiation Protocol)、その通信内容の記述のために SDP (Session Description Protocol) 等のプロトコルが利用されたりする。
竹下隆史, 村山公保, 荒井透. (2012-02). マスタリングTCP/IP 入門編第5版. 株式会社 オーム社, 360p.
code:protocol stack
+-------+-------+------+-------+-----+
| Video | Audio | | SIP | SDP |
|---------------+ RTCP +---+---+-----+
| RTP | | | RTSP |
+---------------+------+-+-+---------+
| UDP | TCP |
+------------------------+-----------+
| IP |
+------------------------------------+
なぜ RTP が必要か?
主に UDP ベースの実装が利用されている。TCP では、パケットの再送や輻輳制御等が、アプリケーションレイヤからは見えないレベルで実現されてしまっているために、転送に遅延が生じる可能性が高くなる。また、UDP のみだと、マルチメディアデータの転送に必要な情報を転送できないため、その上にさらに仕様を重ねる必要があった。 端末同士が実際に通信を開始する前に、通信に必要な情報をやり取りするためのプロトコル。このようなネゴシエーションのことは 呼制御 (シグナリング) と呼ばれ、呼制御を行う SIP のようなプロトコルはシグナリングプロトコルと呼ばれる。他のシグナリングプロトコルとしては H.323 などがある。1996 年に発案され、その後 1999 年に IETF によって RFC 2543 として標準化された。さらに 2002 年に様々な改訂案が取り入れられ、RFC 3261 となった。 HTTP や SMTP と同様、テキストベースのプロトコルである。トランスポート層のプロトコルからは独立した定義となっているため、TCP, UDP のどちらの上でも利用できる。HTTP における GET や POST 等の HTTP メソッドに相当する 14 種類のメソッドや、ステータスコードによる応答の表現等、他のテキストベースプロトコルから取り入れている要素がいくつかある。 table:SIP METHOD
メソッド 内容
INVITE セッション開始
ACK INVITE に対する応答
BYE セッション終了
code:SIP flow
+--------------+ +------------+ +--------------+
| SIP Client A | | SIP Server | | SIP Client B |
+--------------+ +------------+ +--------------+
| INVITE | |
+----------------->| INVITE |
| +------------------>|
| | 200 OK |
| 200 OK |<------------------+
|<-----------------+ |
| |
| RTP |
|<------------------------------------>|
| |
| BYE |
| BYE |<------------------+
|<-----------------| |
| 200 OK | |
+----------------->| 200 OK |
| +------------------>|
RTP はメディアデータの転送のためのプロトコルである。パケットは、メディアデータを分割したペイロードと、そこにRTP ヘッダ、必要に応じて拡張ヘッダが付与される。 拡張ヘッダについては 5.3.1 で触れられている。この時点だと、単一の RTP パケットにつき1つの拡張ヘッダが付与可能で、16bit の ID によって識別するものとされていた。
これに対し、後方互換性を保ちつつ、単一の RTP パケットに複数の拡張ヘッダを付与できるようにし、かつ識別子として URI を利用することで名前空間の衝突も避けられるようにした RFC が公開されている。
RTCP は、動画の配信側とクライアント側で定期的に情報を交換することで、通信を制御するためのプロトコル。ここで交換する情報には、例えば UDP ベースであるがゆえのパケットロスの情報や、配信の遅延に関する情報などが含まれる。 その他参考