**실시간 스트리밍 프로토콜**은 스트리밍 미디어 서버를 제어할 목적으로 엔터테인먼트, 통신 시스템에 사용하도록 설계된 네트워크 제어 프로토콜이다. 이 프로토콜은 종단점(end point)들 간에 미디어 세션을 확립하고 제어하기 위해 사용된다. 미디어 서버의 클라이언트들은 play, record, pause 등 VHS 스타일의 명령을 발행하여 서버→클라이언트(주문형 비디오/VOD) 또는 클라이언트→서버(녹음)의 실시간 미디어 스트리밍 제어를 용이하게 만들어준다.

스트리밍 데이터 전송 그 자체는 RTSP의 역할이 아니다. 대부분의 RTSP 서버들은 미디어 스트림 전달을 위해 RTCP와 결합한 실시간 전송 프로토콜(RTP)를 사용한다. 그러나 일부 벤더들은 사유 전송 프로토콜을 구현해놓고 있다. 예를 들어 리얼네트웍스의 RTSP 서버 소프트웨어는 리얼네트웍스의 사유 리얼 데이터 트랜스포트(RDT)를 사용하였다.

RTSP는 리얼네트웍스, 넷스케이프 RTSP 1.0을 대체하는 RTSP 2.0이 "RFC 7826"의 이름으로 2016년 출판되었으나 이 버전은 기본 버전 협상(negotiation) 매커니즘 외에는 하위 호환이 되지 않는다.

## RTSP 명령어
RTSP 규약은 HTTP 규약과 비교해 볼 때, 문법이나 동작이 비슷한 면이 있으나 RTSP는 멀티미디어 재생을 제어하는데 유용한 컨트롤 시퀀스를 정의한다는 점에서 차이가 있다. 그 밖의 차이점을 들자면, HTTP가 무상태형(stateless)인 반면에 RTSP는 상태형(stateful)이라는 점이다. 즉, 병행 세션을 추적하기 위해 식별자를 사용하게 되는데, HTTP처럼 RTSP는 TCP를 사용하여 단대단(end-to-end) 연결을 유지하는 반면 대부분의 RTSP 제어 메시지들은 클라이언트에서 서버로 전달되며 일부 명령들은 그 밖의 방향으로 전달된다.(예: 서버→클라이언트)

아래에 제시된 것들은 기본적인 RTSP 요청들이다. OPTIONS 요청과 같은 일부 일반 HTTP 요청 또한 사용할 수 있다. 기본 전송 계층 포트 번호는 554번이며 TCP와 UDP에 둘 다 사용되며 후자의 경우 전송 요청에 사용되는 일은 드문 편이다.

C->S: OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 1
 Require: implicit-play
 Proxy-Require: gzipped-messages

S->C: RTSP/1.0 200 OK
 CSeq: 1
 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 2

S->C: RTSP/1.0 200 OK
 CSeq: 2
 Content-Base: rtsp://example.com/media.mp4
 Content-Type: application/sdp
 Content-Length: 460

 m=video 0 RTP/AVP 96
 a=control:streamid=0
 a=range:npt=0-7.741000
 a=length:npt=7.741000
 a=rtpmap:96 MP4V-ES/5544
 a=mimetype:string;"video/MP4V-ES"
 a=AvgBitRate:integer;304018
 a=StreamName:string;"hinted video track"
 m=audio 0 RTP/AVP 97
 a=control:streamid=1
 a=range:npt=0-7.712000
 a=length:npt=7.712000
 a=rtpmap:97 mpeg4-generic/32000/2
 a=mimetype:string;"audio/mpeg4-generic"
 a=AvgBitRate:integer;65790
 a=StreamName:string;"hinted audio track"

C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
 CSeq: 3
 Transport: RTP/AVP;unicast;client_port=8000-8001

S->C: RTSP/1.0 200 OK
 CSeq: 3
 Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD
 Session: 12345678

C->S: SETUP rtsp://example.com/media.mp4/streamid=1 RTSP/1.0
 CSeq: 3
 Transport: RTP/AVP;unicast;client_port=8002-8003
 Session: 12345678

S->C: RTSP/1.0 200 OK
 CSeq: 3
 Transport: RTP/AVP;unicast;client_port=8002-8003;server_port=9002-9003;ssrc=1234ABCD
 Session: 12345678

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 4
 Range: npt=5-20
 Session: 12345678

S->C: RTSP/1.0 200 OK
 CSeq: 4
 Session: 12345678
 RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012

C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 5
 Session: 12345678

S->C: RTSP/1.0 200 OK
 CSeq: 5
 Session: 12345678

C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 6
 Session: 12345678

S->C: RTSP/1.0 200 OK
 CSeq: 6
 Session: 12345678

C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 7
 Date: 23 Jan 1997 15:35:06 GMT
 Session: 12345678
 Content-Type: application/sdp
 Content-Length: 332

 v=0
 o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
 s=SDP Seminar
 i=A Seminar on the session description protocol
 u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
 e=mjh@isi.edu (Mark Handley)
 c=IN IP4 224.2.17.12/127
 t=2873397496 2873404696
 a=recvonly
 m=audio 3456 RTP/AVP 0
 m=video 2232 RTP/AVP 31

S->C: RTSP/1.0 200 OK
 CSeq: 7

C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 8
 Session: 12345678

S->C: RTSP/1.0 200 OK
 CSeq: 8

S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 9
 Content-Type: text/parameters
 Session: 12345678
 Content-Length: 15

 packets_received
 jitter

C->S: RTSP/1.0 200 OK
 CSeq: 9
 Content-Length: 46
 Content-Type: text/parameters

 packets_received: 10
 jitter: 0.3838

C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 10
 Content-length: 20
 Content-type: text/parameters

 barparam: barstuff

S->C: RTSP/1.0 451 Invalid Parameter
 CSeq: 10
 Content-length: 10
 Content-type: text/parameters

 barparam

S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 11
 Location: rtsp://bigserver.com:8001
 Range: clock=19960213T143205Z-

C->S: SETUP rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 3
 Transport: RTP/AVP/TCP;interleaved=0-1

S->C: RTSP/1.0 200 OK
 CSeq: 3
 Date: 05 Jun 1997 18:57:18 GMT
 Transport: RTP/AVP/TCP;interleaved=0-1
 Session: 12345678

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
 CSeq: 4
 Session: 12345678

S->C: RTSP/1.0 200 OK
 CSeq: 4
 Session: 12345678
 Date: 05 Jun 1997 18:59:15 GMT
 RTP-Info: url=rtsp://example.com/media.mp4;seq=232433;rtptime=972948234

S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
S->C: $\001{2 byte length}{"length" bytes RTCP packet}

## 속도 적응
RTP, RTCP를 사용하는 RTSP는 속도 적응(순응) 구현체를 허용한다.

## 구현체

### 서버
IP 카메라로 불리는 수많은 CCTV / 감시 카메라들은 RTSP 스트리밍을 지원한다.