Skip to content

Real Time Streaming Protocol

실시간 스트리밍 프로토콜(Real Time Streaming Protocol, RTSP)은 IETF가 1998년에 개발한 통신 규약이다. RFC 2326에 정의되어 있다. RTSP는 스트리밍 시스템에 사용되며, 미디어 서버를 원격으로 제어할 때 쓰인다. 명령어는 "PLAY", "PAUSE" 같이 VCR 동작하고 비슷하며 시간 정보를 바탕으로 서버에 접근을 한다.

실제 미디어 스트리밍 데이터를 전송하지는 않는다. 대부분의 RTSP 서버는 RTP 규약을 사용해서 전송 계층으로 실제 오디오/비디오 데이터를 전송한다.

Categories

RTSP 명령어

RTSP 규약은 HTTP 규약하고 비교해 볼 때, 문법이나 동작이 비슷하다. 하지만, HTTP 가 무상태형(stateless)인 반면에 RTSP는 상태형(stateful) 규약이다. 임의의 세션 ID는 세션 추적할 때마다 사용되는데, 이 방법은 영구 TCP 연결을 필요로 한다. RTSP 메시지는 클라이언트에서 서버로 간다. 만약, 서버에서 오류가 발생한다면 서버는 오류에 대한 응답 코드를 클라이언트로 보내준다. 기본적인 RTSP 요청 메시지는 아래와 같고, 기본 포트는 554번이다.

DESCRIBE
DESCRIBE 요청에는 URL (rtsp://...)이 포함된다. 기본 포트 554번은 UDP, TCP 둘 다에 사용된다. DESCRIBE에 대한 응답 메시지에는 요청한 것에 대한 설명도 포함되는데, 대개 SDP 형태를 갖추고 있다.
SETUP
SETUP 요청은 단일 미디어 스트림이 전송되어야 하는지 규정한다. 이 요청은 PLAY 요청 하기 전에 마쳐야한다. 그리고 요청할 때 미디어 스트림 URL과 전송점을 포함해야 한다. 전송점에는 RTP 데이터(오디오/비디오), RTCP 데이터(메타 정보)를 전송받기 위한 포트 번호도 포함된다.
PLAY
PLAY 요청은 하나 또는 모든 미디어 스트림을 재생시킨다. PLAY 명령은 다중 요청이 가능하다. 모든 미디어 스트림 재생을 위해서는 URL 집합체가 요청에 포함되어야 한다. 재생 범위를 구체적으로 지정할 수도 있다. 만약에 재생 범위를 지정하지 않으면, 미디어 처음부터 끝까지 재생한다. 또, 일시 정지 상태라면 일시 정지된 위치부터 재생 된다.
PAUSE
PAUSE 요청은 하나 또는 모든 미디어 스트림에 대해서 일시 중지를 명령한다. PLAY 요청으로 다시 재시작 할 수 있다. 이 요청 메시지에는 미디어 스트림 URL이 포함되어야 한다. 일시 정지를 할 때 범위를 구체적으로 지정할 수도 있다.
RECORD
RECORD 요청은 녹화를 위한 명령어이다.
TEARDOWN
TEARDOWN 요청은 세션을 종료하기 위한 명령어이고, 모든 미디어 스트림의 재생을 중단하고 서버에 있는 관련 데이터에 걸린 모든 세션도 해제한다.

Packet flow

단일 포트로 RTSP와 RTP를 함께 보낼 수 있는듯 하여, Wireshark를 사용하여 패킷을 조사했다.

No.     Time           Source                Destination           Protocol Length Info
      5 0.000388       127.0.0.1             127.0.0.1             RTSP     141    OPTIONS rtsp://0.0.0.0:8554/live.sdp RTSP/1.0
      7 0.003347       127.0.0.1             127.0.0.1             RTSP     257    Reply: RTSP/1.0 200 OK
      9 0.004811       127.0.0.1             127.0.0.1             RTSP     167    DESCRIBE rtsp://0.0.0.0:8554/live.sdp RTSP/1.0
     11 0.087192       127.0.0.1             127.0.0.1             RTSP/SDP 698    Reply: RTSP/1.0 200 OK
     13 0.095190       127.0.0.1             127.0.0.1             RTSP     204    SETUP rtsp://0.0.0.0:8554/live.sdp/stream=0 RTSP/1.0
     15 0.096064       127.0.0.1             127.0.0.1             RTSP     281    Reply: RTSP/1.0 200 OK
     17 0.097255       127.0.0.1             127.0.0.1             RTSP     185    PLAY rtsp://0.0.0.0:8554/live.sdp/ RTSP/1.0
     19 0.098056       127.0.0.1             127.0.0.1             RTSP     275    Reply: RTSP/1.0 200 OK
     39 10.419850      127.0.0.1             127.0.0.1             RTSP     167    PAUSE rtsp://0.0.0.0:8554/live.sdp/ RTSP/1.0
     41 10.421940      127.0.0.1             127.0.0.1             RTSP     179    Reply: RTSP/1.0 200 OK
     43 10.422700      127.0.0.1             127.0.0.1             RTSP     196    SETUP rtsp://0.0.0.0:8554/live.sdp/stream=0 RTSP/1.0
     45 10.490884      127.0.0.1             127.0.0.1             RTSP     253    Reply: RTSP/1.0 200 OK
     47 10.492739      127.0.0.1             127.0.0.1             RTSP     185    PLAY rtsp://0.0.0.0:8554/live.sdp/ RTSP/1.0
     49 10.494810      127.0.0.1             127.0.0.1             RTSP     275    Reply: RTSP/1.0 200 OK
     51 10.496769      127.0.0.1             127.0.0.1             RTP      2251   PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3488, Time=1765483086, PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3489, Time=1765483086, PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3490, Time=1765483086, PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3491, Time=1765483086, PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3492, Time=1765483086
     53 10.496959      127.0.0.1             127.0.0.1             RTP      2864   PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3493, Time=1765483086, PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3494, Time=1765483086
     55 10.497185      127.0.0.1             127.0.0.1             RTP      2864   PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3495, Time=1765483086, PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3496, Time=1765483086

55번 RTP패킷을 보면 아래와 같다.

No.     Time           Source                Destination           Protocol Length Info
     55 10.497185      127.0.0.1             127.0.0.1             RTP      2864   PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3495, Time=1765483086, PT=DynamicRTP-Type-96, SSRC=0x19292F8, Seq=3496, Time=1765483086

Frame 55: 2864 bytes on wire (22912 bits), 2864 bytes captured (22912 bits) on interface 0
Null/Loopback
Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1
Transmission Control Protocol, Src Port: 8554, Dst Port: 52409, Seq: 6830, Ack: 854, Len: 2808
RTSP Interleaved Frame, Channel: 0x00, 1400 bytes
Real-Time Transport Protocol
RTSP Interleaved Frame, Channel: 0x00, 1400 bytes
Real-Time Transport Protocol

RTSP Interleaved Frame을 통하여 RTP 패킷이 전달되는 것을 확인할 수 있다.

It is not a part of RTSP OPTION response but an option allowing to send RTP by the same TCP channel as controlling RTSP session, see RFC 2326 

RTSP OPTION 응답의 일부는 아니지만 RTSP 세션을 제어하는 것과 동일한 TCP 채널로 RTP를 보낼 수있는 옵션입니다. (RFC 2326 참조)

Libraries and examples

가장 추천

그 밖 추천

Local Download

RFC 2326 - Real Time Streaming Protocol (RTSP)
https://tools.ietf.org/html/rfc2326
Rfc2326.txt
Rfc2326-ko.txt.zip (Google translate: en -> ko)

See also

Favorite site

Guide

Programming

Tips

References


  1. 7_ways_to_stream_RTSP_on_the_page.pdf 

  2. FFmpegRTSPServer-795db88.zip