'RTSP 흐름제어'에 해당되는 글 1건

  1. 2007.10.17 RTSP(Real Time Streaming Protocol) 34
2007. 10. 17. 15:07

RTSP(Real Time Streaming Protocol)

RTSP(RealTime Streaming Protocol)은  On Demand 형식으로 리얼타임 미디어 전송을 행하는 애플리케이션 계층의 프로토콜

RTSP는 인터넷 상에서 스트리밍 데이터를 제어하는 방법에 대한 표준안으로 스트리밍 기술이 사용하는 표준 프로토콜

RTP 스트림 제어를 위한 메시지 패킷 

TCP를 하부 계층 프로토콜로 사용

비디오 데이터를 효율적으로 브로드캐스트 하기 위한 목적으로 설계되었다.

RTSP는 RealNetworks, Netscape Communications Corporation, Columbia대학 등에서 공동으로 개발하여 1996년 IETF에 draft를 제출하였고, 1998년 4월에 RFC2326으로 표준화되었다. 기본적으로 RTSP는 오디오나 비디오와 같은 시간적으로 동기화된 스트림을 생성하고 제어한다. 그러나 전형적으로 연속매체 자체는 전송하지는 않고 멀티미디어 서버를 위한 네트웍 원격 제어 역할을 수행한다.

RTSP는 기본적으로 HTTP와 비슷한 신택스와 오퍼레이션을 가지나, 서버와 클라이언트 모두가 요구(request)를 보내고 응답(response)을 받을 수 있으며, 초기상태, 준비상태, 재생상태 등의 프로토콜 상태(state)를 가진다. 또한, HTTP의 메서드로 GET, POST만 있지만 RTSP는 다양한 메서드를 가진다.

<RTSP의 실행 시나리오>

웹서버는 텍스트, 이미지등의 비연속 매체를 주로 서비스를 하며, RTSP서버는 HTTP의 기본적인 기능에 실시간 특성을 가진 멀티미디어 데이터를 전송하기 위한 기능을 추가한 개념으로써 HTTP의 확장이라고 할 수 있다. 사용자가 멀티미디어데이타를 웹상에서 얻고자 할 때는 일단 웹서버에 접속해서 미디어에 대한 정보를 얻은 후 RTSP서버에 접속해서 미디어의 스트리밍 서비스를 받게 된다.

image

<RTSP 서버>

RTSP서버는 클라이언트의 요구를 분석하여 처리하며 미리 저장되어있는 멀티미디어 데이터를 클라이언트에게 스트리밍하는 기능을 수행한다. [그림2]는 RTSP서버의 모듈 구성도를 나타낸다.

· Socket 모듈

RTSP데이터의 전송을 위한 TCP소켓과 RTP데이타를 위한 UDP소켓을 관리하는 함수를 구현한다.

· EventLoop 모듈

소켓을 열고 클라이언트가 연결된 소켓에 데이터를 보냈는지를 계속해서 폴링하다가 실제 데이터가 소켓에 실려있을 경우 이를 버퍼에 담는다. 그리고 이 데이터를 파싱해서 Request를 분석하고 이를 RequestHandler모듈에 전달한다.

· Parser 모듈

RTSP프로토콜은 텍스트기반 프로토콜이므로 버퍼에 담긴 데이터를 토큰으로 분리하여 Request를 분석해야 한다.

· Request Handler 모듈

서버의 핵심기능으로서 분석된 Request에 대해 적절한 처리를 수행한다.

· Streamer 모듈

연속매체 데이터를 RTP 패킷으로 만들어 주기적으로 전송한다. 또한 클라이언트의 패킷손실과 지터등의 피드백정보를 참조하여 전송률을 조정할 수 있다.

· Scheduler모듈

현재 서비스중인 세션들의 관리하며 이를 적절히 스케쥴링한다.

<RTSP 클라이언트>

RTSP클라이언트는 서버에서 전송되는 스트림을 초기지연을 최소화시켜 재생하는 기능을 수행한다. 이때 RTP패킷의 헤더정보를 이용하여 여러 가지 QoS를 분석하고 이를 서버측에 피드백해야한다. [그림3]은 클라이언트의 모듈 구성도를 나타낸다.

· Socket모듈

서버와 동일한 기능으로 통신에 필요한 소켓을 설정 및 관리하는 함수를 구현한다.

· EventLoop 모듈

RTSP서버에서와 동일한 기능으로 서버에 연결된 소켓들을 모니터링하다가 데이터가 전달될 때 버퍼에 읽어들이는 기능을 수행한다.

· Parser모듈

버퍼에 담긴 데이터를 분석하여 Command/Event Handler에게 보낸다.

· Command/Event Handler 모듈

실제 클라이언트의 핵심 모듈로서 서버에서 전송된 메시지에 대한 처리를 수행하며, 사용자의 명령을 분석하여 서버에게 요구를 보내는 기능을 구현한다.

· Decorder 모듈

서버에서 전송된 RTP패킷을 디코딩하여 재생장치에 보낸다. 본 논문에서는 디코딩을 위한 멀티미디어 미들웨어로서 MS의 DirectShow를 이용한다.

<흐름 제어>

인터넷의 트래픽이 과잉밀집이 되었을 경우 서버에서 보낸 패킷이 클라이언트에게 재대로 도착되지 않을 수 있다. 따라서, 지터를 줄이고 연속적인 비디오 재생을 위해서는 흐름제어가 필수적이다. 패킷 손실률을 기반으로 네트웍의 가부하 여부를 판단한다. 패킷 손실률은 클라이언트 측에서 계산되며 전송한 패킷수에 대한 손실된 패킷수의 비율로 계산한다. 이 패킷 손실률이 임계값을 넘어갈 때 흐름제어를 수행하게 된다. 즉, 네트웍이 과부하일 경우는 전송률을 낮추고, 네트웍이 언로드일 경우에는 전송률을 높인다.

또한 클라이언트 버퍼의 오버플로우나 언더플로우를 방지하기위해서 다음과 같은 방법을 사용한다. 즉, 버퍼의 수준이 오버플로우의 임계값을 넘을 경우 서버에게 전송률을 낮추라고 요청을 보내고, 언더플로우일 경우에는 플레이어를 중지시키고 재생이 가능할 때까지 버퍼링을 수행한다.