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

 概要 
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 セッションの状態を管理する必要がある。

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

 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