본문 바로가기

Technical Document/RTSP, RTP

RTSP/RTP 개요

RTSP (Real Time Streaming Protocol)

  • 실제로 비디오, 오디오 등 데이터를 전송하지 않는다. (RTP가 실제 전송)
  • 서버와 클라이언트 간 RTP 데이터 흐름을 제어하기 위한 프로토콜.
    • 클라이언트가 재생하고 싶은 스트림 선택
    • 스트림의 코덱정보, UDP 또는 TCP 기반 전송 방식 쿼리
    • 스트림 세션 start, stop

 

RTSP 동작 과정

 

≫ OPTIONS

 - 서버에서 제공하는 메서드를 얻는다.

 

≫ DESCRIBE

 - 서버에게 요청할 미디어 개체의 설명을 얻는다.

 

≫ SETUP

 - 미디어 스트림 전송을 위한 전송방식을 설정한다.

 

≫ PLAY

 - 스트림 재생.

 

≫ RTP를 통해 스트림을 받아 재생.

 

≫ PAUSE

 - 스트림 전송중단.

 

≫ TEARDOWN

 - 세션을 완전히 없앤다.

 

RTP (Real-time Transport Protocol)

  • 비디오, 오디오 등 데이터를 전송하기 위한 프로토콜.
  • 미디어 데이터를 RTP Packet들로 Packetization 과정을 거친 후 전송한다.
  • 시간 정보, 동기화 기능 제공.

 

RTP over UDP

  • UDP를 통한 RTP는 UDP를 저수준 전송 프로토콜로 사용한다.
  • UDP는 전송된 패킷이 올바르게 도착한다고 보장하지 않는다.
  • UDP의 가장 큰 단점은 방화벽과 라우터 제한으로 인해 인터넷과 같은 이기종 네트워크를 통해 전송하는 것이 종종 불가능하다는 사실이다.
  • RTP over UDP로 패킷 전달 시 UDP는 항상 최소 2개의 채널을 설정.

RTP over TCP

  • RTP는 TCP를 통해서도 전송될 수 있다.
  • RTSP SETUP 요청에서 클라이언트에 의해 TCP 방식으로 선택되면 스트리머는 RTSP 통신을 위해 이미 설정된 TCP 연결을 통해 RTP 패킷을 보낸다.
  • TCP 전송은 UDP와 비교하여 프로토콜에 약간의 오버헤드가 있다.
  • TCP는 신뢰할 수 있는 전송 프로토콜이며, 데이터가 클라이언트에 도착하도록 보장한다.
  • TCP는 RTSP(제어)와 RTP(미디어) 모두 하나의 채널만 사용한다.

 

Payload type

 

RTP Packet에 넣을 수 있는 오디오 또는 비디오 형식을 페이로드라고 한다.

일반적으로 스트림에서 오디오 및 비디오 데이터는 압축된 형식으로 전송되기에

Payload type은 압축 형식인 Codec을 나타내게 된다.

 

Payload는 Payload Header로 시작한다. 

Payload는 전달하려는 데이터의 codec type에 따라 Payload type을 부여한다

RTP는 각 codec에 대해 packetization하는 방법을 표준으로 정해놓았다.

각각의 format에 따라 데이터를 RTP packets에 넣는 규칙이 다르게 정의된다.

 

 

RTP packetization

 

전송해야 할 이미지 데이터가 RTP packet보다 사이즈가 클 경우 여러 조각으로 쪼개져서 packet에 담겨야 한다.

각각의 데이터는 RTP packet으로 wrapping되어 있는데 이는 RTP header이미지 데이터 조각으로 이루어져 있다.

 

RTP Packet의 RTP Header는 12바이트 길이를 갖는다.

 

RTP Header에 포함되는 정보

  • RTP 프로토콜 버전
  • 패킷 손실을 감지하기 위한 패킷(시퀀스) 카운터
  • 재생시간 제어를 위한 타임스탬프
  • RTP 스트림의 고유 식별자

RTP header 다음에는 이미지 데이터 조각이, 예를들어 JPEG 데이터였다면 8바이트 JPEG 전용 헤더가 나온다.

JPEG 전용 헤더에는 너비와 높이, 품질, 색상 형식 등 메타 데이터 정보가 담겨있고,

이미지가 RTP Packet으로 분할되어 전송될 정도로 데이터가 클 경우 이미지 조각 위치를 의미하는

fragment offset 정보도 포함한다.

 

 

UDP/TCP transport

 

RTP over TCP 방식의 전송은 RTP packet에 부가적인 조작이 필요하다.

왜냐하면 RTSP communication에 사용되는 TCP 연결을 동일하게 사용하여

클라이언트가 RTSP와 RTP packet을 서로 구별할 수 있어야 하기 때문이다.

부가적인 RTP over RTSP header라는 "demultiplexing" header를 삽입해준다.

// Prepare the first 4 byte of the packet. This is the Rtp over Rtsp header in case of TCP based transport RtpBuf[0] = '$';   // magic number
RtpBuf[1] = 0;    // number of multiplexed subchannel on RTPS connection - here the RTP channel
RtpBuf[2] = (RtpPacketSize & 0x0000FF00) >> 8;
RtpBuf[3] = (RtpPacketSize & 0x000000FF);
...

 

RTP 패킷을 처리해야 할 입장인 클라이언트에서

같은 TCP 연결이라 RTSP나 RTP 패킷을 동시에 받을 수 있는 상황에서

매직 넘버인 $를 수신하면 패킷이 RTSP 데이터를 갖고 있지 않다는 것을 알 수 있게 된다.

 

 

 

 

참고 문서

https://www.medialan.de/usecase0001.html

 

Medialan - RTSP, RTP Video Streaming Server, Tutorial, Hello World

Summary Shows a basic C++ hello world RTP/JPEG streaming server. Discusses the necessary technologies for streaming server development like streaming protocols, payloads and packetization mechanisms. Suited for developers who are searching for a starting p

www.medialan.de

 

'Technical Document > RTSP, RTP' 카테고리의 다른 글

RTSPTestServer 예제 분석  (0) 2022.04.29