Real Time Streaming Protocol
2021-03
Real Time Streaming Protocol(リアルタイム・ストリーミング・プロトコル、略称:RTSP)は IETF において標準化されたリアルタイム性のあるデータの配布 (ストリーミング) を制御するためのプロトコルである。ストリーミングデータ自体の配信を行なうためのプロトコルではない。1998年4月にその最初の版がとして標準化されたが、様々な問題点があることが指摘され、改訂が続けられている。2016年にReal-Time Streaming Protocolバージョン2.0がとして標準化された。
RTSP は音声 (オーディオ)、映像 (動画、ビデオ) などのマルチメディア・データを含むサーバを遠隔操作するためのプロトコルであり、テープレコーダのように再生、停止、記録 (録音) などの操作ができる (巻き戻しや早送りの機能はない)。SIP (Session Initiation Protocol; セッション確立プロトコル) とは違って RTSP においてはサーバとクライアントとが明確に区別され、データの流れは基本的にサーバからクライアントへの一方向であるが、サーバからクライアントに送付する要求も定義されている。すなわち、要求-応答モデルとしてみると、サーバとクライアントの役割が逆転することもある。
サーバからクライアントへのデータ転送 (RTSP においてはプレゼンテーションとよばれる) には通常Real-time Transport Protocol (RTP) が使用されるが、それに限定されてはいない。RTSP によって制御されるデータの流れに関しては "RTSP セッション" が存在するが、RTSP 自体には、SIP と同様にセッションの概念はない。SIP と同様、RTSP も HTTP (ハイパーテキスト転送プロトコル) に似せてある。RTSP の下位のプロトコルとしては、SIP とは違って、TCP (Transmission Control Protocol) のように高信頼なプロトコルの使用が前提とされている。ただし、RTSP の改訂にあたっては低信頼なプロトコルを使用できるようにする方向性が示されている。
RTSP がサポートする操作は次の3つである。
1. メディアサーバからのメディアの取り出し
RTSP を使用してメディア・データを取り出すことができる。そのきっかけとしてよくあるのは WWW においてメディアへのリンクをクリックすることであり、この場合プレゼンテーションの記述は HTTP によってメディアサーバに与えられる。
2. メディアサーバをセッションに参加させること
マルチメディアセッションにおいてメディアを再生したり、セッションを記録したりするために RTSP を使用してメディアサーバをセッションに参加させることができる。セッション自体の制御はたとえば SIP によって行なわれる。
3. メディアをプレゼンテーションに加えること
RTSP を使用して、特にライブ・プレゼンテーションにおいて、メディアをプレゼンテーションに参加させることができる。
RTSP を扱うメディアサーバは RTSP セッションの状態を管理する必要がある。
RFC 2326 にはセキュリティに関する記述がわずかしかないが、改訂中の仕様2021-03においてはセキュリティやプライバシーを守るための機構についても記述されている。
以下の例は改訂中の仕様2021-03から引用したものであり、クライアント C がメディアサーバ V (video.example.com) および A (audio.example.com) から映画を受け取るときのシーケンスである。メディア記述は Web サーバ W に格納されている。
C->W: GET /twister.sdp HTTP/1.1
Host: www.example.com
Accept: application/sdp
W->C: HTTP/1.0 200 OK
Date: 23 Jan 1997 15:35:06 GMT
Content-Type: application/sdp
v=0
o=- 2890844526 2890842807 IN IP4 192.16.24.202
s=RTSP Session
e=adm@example.com
m=audio 0 RTP/AVP 0
a=control:rtsp://audio.example.com/twister/audio.en
m=video 0 RTP/AVP 31
a=control:rtsp://video.example.com/twister/video
C->A: SETUP rtsp://audio.example.com/twister/audio.en RTSP/1.0
CSeq: 1
User-Agent: PhonyClient/1.2
Transport: RTP/AVP/UDP;unicast;client_port=3056-3057
A->C: RTSP/1.0 200 OK
CSeq: 1
Session: 12345678
Transport: RTP/AVP/UDP;unicast;client_port=3056-3057;
server_port=5000-5001
C->V: SETUP rtsp://video.example.com/twister/video RTSP/1.0
CSeq: 1
User-Agent: PhonyClient/1.2
Transport: RTP/AVP/UDP;unicast;client_port=3058-3059
V->C: RTSP/1.0 200 OK
CSeq: 1
Session: 23456789
Transport: RTP/AVP/UDP;unicast;client_port=3058-3059;
server_port=5002-5003
C->V: PLAY rtsp://video.example.com/twister/video RTSP/1.0
CSeq: 2
User-Agent: PhonyClient/1.2
Session: 23456789
Range: smpte=0:10:00-
V->C: RTSP/1.0 200 OK
CSeq: 2
Session: 23456789
Range: smpte=0:10:00-0:20:00
RTP-Info: url=rtsp://video.example.com/twister/video;
seq=12312232;rtptime=78712811
C->A: PLAY rtsp://audio.example.com/twister/audio.en RTSP/1.0
CSeq: 2
User-Agent: PhonyClient/1.2
Session: 12345678
Range: smpte=0:10:00-
A->C: RTSP/1.0 200 OK
CSeq: 2
User-Agent: PhonyClient/1.2
Session: 12345678
Range: smpte=0:10:00-0:20:00
RTP-Info: url=rtsp://audio.example.com/twister/audio.en;
seq=876655;rtptime=1032181
C->A: TEARDOWN rtsp://audio.example.com/twister/audio.en RTSP/1.0
CSeq: 3
User-Agent: PhonyClient/1.2
Session: 12345678
A->C: RTSP/1.0 200 OK
CSeq: 3
C->V: TEARDOWN rtsp://video.example.com/twister/video RTSP/1.0
CSeq: 3
User-Agent: PhonyClient/1.2
Session: 23456789
V->C: RTSP/1.0 200 OK
CSeq: 3