본문으로 바로가기

[프로토콜] RTSP란

category 네트워크/프로토콜 2021. 9. 26. 16:32
728x90
반응형

최근 영상 스트리밍에 대한걸 스터디하다보니 RTSP란걸 알게 되었습니다.

RTSP는 Real Time Streaming Protocol입니다.

이름만으로도 어떤역할을 하는지 추측 가능하죠.

스트리밍 서버를 제어하기 위해서 만들어졌습니다.

미디어 세션을 확립하고 제어하기위해 사용합니다.

RTSP는 서버와 클라이언트로 구성하여 통신을 합니다

그렇다고해서 RTSP가 데이터를 전달하지는 않습니다.

RTP가 그 역할을 합니다. 또는 다른 프로토콜을 사용합니다.

RTSP는 여러분들이 많이 들어본 HTTP와 문법적으로 비슷합니다.

차이점은 HTTP는 Stateless 이고, RTSP는 Stateful 입니다.

stateless는 이전의 어떤 요청과 무관하게 각각의 요청에 대해 독립적입니다.

즉, 하나의 요청을 하면 하나에 대한 응답만 나옵니다.

과거 트랜잭션에 대한 것들은 따로 저장되지 않습니다.

그렇기 때문에 각각의 세션들은 처음부터 시작됩니다.

그러나 stateful은 stateless와 반대입니다.

인터넷뱅킹이나 이메일 처럼 여러번 시도될 수 있습니다.

트랜잭션이 중단되더라도, 중단된곳 까지의 내역을 저장하고, 다시 시작할 경우, 저장된 그곳부터 다시 시작합니다.

보통 TCP형태이고, RTSP는 554 포트를 사용합니다.

이번에는 각각의 명령어에 대해 알아보겠습니다.

 

출처:https://ko.wikipedia.org/wiki/%EC%8B%A4%EC%8B%9C%EA%B0%84_%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

 

실시간 스트리밍 프로토콜 - 위키백과, 우리 모두의 백과사전

실시간 스트리밍 프로토콜(Real Time Streaming Protocol, RTSP)은 스트리밍 미디어 서버를 제어할 목적으로 엔터테인먼트, 통신 시스템에 사용하도록 설계된 네트워크 제어 프로토콜이다. 이 프로토콜은

ko.wikipedia.org

 

1. OPTIONS

클라이언트가 서버에게 요청을 하고, 사용할 수 있는 명렁어를 얻어옵니다.

Request:
OPTIONS rtsp://test.com/test.mp4 RTSP/1.0
CSeq: 1
Require: implicit-play
Proxy-Require: gzipped-messages

Response:
RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

 

2. DESCRIBE
클라이언트가 서버에게 미디어에 대한 정보를 요청합니다.
이 응답은 SDP형태로 오게됩니다.

Request:
DESCRIBE rtsp://test.com/test.mp4 RTSP/1.0
CSeq: 2

Response:
RTSP/1.0 200 OK
CSeq: 2
Content-Base: rtsp://test.com/test.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"

3. SETUP
클라이언트는 서버에게 어떻게 전송되어야하는지에 대한 정보를 얻어옵니다.

Request:
SETUP rtsp://test.com/test.mp4/streamid=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=8000-8001

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

Request:
SETUP rtsp://test.com/test.mp4/streamid=1 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=8002-8003
Session: 12345678

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

4. PLAY
클라이언트가 서버에게 요청합니다.
미디어를 재생합니다. 재생 범위를 지정할 수 있고, 범위를 지정하지 않을 경우, 처음부터 끝까지 재생됩니다.
또한, 일지중지하게되면 중지된지점부터 이어서 재생할 수 있습니다.

Request:
PLAY rtsp://test.com/test.mp4 RTSP/1.0
CSeq: 4
Range: npt=5-20
Session: 12345678

Response:
RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
RTP-Info: url=rtsp://test.com/test.mp4/streamid=0;seq=9810092;rtptime=3450012

5. PAUSE
클라이언트가 서버에게 요청합니다.
스트림을 일시 중지합니다. 범위를 지정할 수 있습니다.

Request:
PAUSE rtsp://test.com/test.mp4 RTSP/1.0
CSeq: 5
Session: 12345678

Response:
RTSP/1.0 200 OK
CSeq: 5
Session: 12345678

6. RECORD
클라이언트가 서버에게 요청합니다.
미디어 데이터를 녹화합니다. 범위를 지정하게되면, 그 범위 동안 녹화를 합니다.
범위를 지정하지 않으면, 즉시 녹화가 시작됩니다.

Request:
RECORD rtsp://test.com/test.mp4 RTSP/1.0
CSeq: 6
Session: 12345678

Response:
RTSP/1.0 200 OK
CSeq: 6
Session: 12345678

그 이 외에도 여러가지가 있습니다.

오늘 포스팅은 여기까지하겠습니다.

728x90
반응형