RTSP (Real Time Streaming Protocol)

Related Post

> ストリーミング専用プロトコル > RTSP (Real Time Streaming Protocol)

Real Time Streaming Protocol(リアルタイム・ストリーミング・プロトコル, 略称:RTSP)は IETF において標準化されたリアルタイム性のあるデータの配布 (ストリーミング) を制御するためのプロトコルであり、ストリーミングデータ自体の配信を行うためのプロトコルではない。1998 年 4 月にその最初の版が RFC 2326 として標準化されたが、様々な問題点があることが指摘され、改訂が続けられている。

【概要】

RTSP はオーディオ、ビデオなどのマルチメディア・データをふくむサーバを遠隔操作するためのプロトコルであり、テープレコーダのように再生、停止、記録 (録音) などの操作ができる (巻き戻しや早送りの機能はない)。SIP (セッション確立プロトコル) とはちがって RTSP においてはサーバとクライアントとが明確に区別され、データの流れは基本的にサーバからクライアントへの一方向であるが、サーバからクライアントに送付する要求も定義されている。すなわち、要求-応答モデルとしてみると、サーバ とクライアントの役割が逆転することもある。
サーバからクライアントへのデータ転送 (RTSP においてはプレゼンテーションとよばれる) には通常Real-time Transport Protocol (RTP) が使用されるが、それに限定されてはいない。RTSP によって制御されるデータのながれに関しては “RTSP セッション” が存在するが、RTSP 自体には、SIP と同様にセッションの概念はない。SIP と同様、RTSP も HTTP (ハイパーテキスト転送プロトコル) に似せてある。RTSP の下位のプロトコルとしては、SIP とはちがって、TCP のように高信頼なプロトコルの使用が前提とされている。ただし、RTSP の改訂にあたっては低信頼なプロトコルを使用できるようにする方向性が示されている。
RTSP がサポートする操作はつぎの3 つである。

  1. メディアサーバからのメディアのとりだし
    RTSP を使用してメディア・データをとりだすことができる。そのきっかけとしてよくあるのは WWW においてメディアへのリンクをクリックすることであり、この場合プレゼンテーションの記述は HTTP によってメディアサーバにあたえられる。
  1. メディアサーバを会議に参加させること
    マルチメディア会議においてメディアを再生したり、会議を記録したりするために RTSP を使用してメディアサーバを会議に参加させることができる。会議自体の制御はたとえば SIP によっておこなわれる。
  1. メディアをプレゼンテーションにくわえること
    RTSP を使用してとくにライブ・プレゼンテーションにおいて、メディアをプレゼンテーションに参加させることができる。 RTSP をあつかうメディアサーバは RTSP セッションの状態を管理する必要がある。

RFC 2326 にはセキュリティに関する記述がわずかしかないが、改訂中の仕様においてはセキュリティやプライバシーを守るための機構についても記述されている。

【RTSP における標準的なシーケンス】

以下の例は改訂中の仕様から引用したものであり、クライアント 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