프로토콜

RTSP

Real-Time Streaming Protocol. 미디어 서버와 클라이언트 간의 스트리밍 세션을 관리 및 제어합니다. RTSP는 실제 미디어 데이터를 직접 전송하지는 않고, 재생, 일시정지 정지, 위치 이동 등 제어 명령을 담당합니다. 실제 미디어 데이터는 RTP 같은 별도 프로토콜이 담당합니다.

TCP를 주로 사용하며 HTTP와 문법이나 동작이 비슷합니다. 하지만 HTTP가 stateless인 반면 RTSP는 stateful 합니다. 다시 말해 RTSP는 영구적인 TRP 연결로 임이의 세션 ID를 계속 추적합니다.1

RTMP

Real-Time Message Protocol. 불특정 다수가 스트리밍 데이터를 받을 수 있도록 하는 Flash 기반의 어도비 독점 프로토콜입니다. 수백 만 명까지 처리할 수 있을 정도로 확장성이 좋습니다. 다만 Flash 기반이라 최신 브라우저에서는 지원하지 않을 수 있습니다.

HLS

HTTP Live Streaming. 가장 널리 사용되는 비디오 스트리밍 프로토콜입니다. HTTP “라이브” 스트리밍으로 불리지만 온디멘드(사용자가 원하는 영상, 시점) 스트리밍도 지원합니다. HLS 서버는 비디오 파일을 작게 나누고 HTTP로 전송합니다. 클라이언트는 이 HTTP 조각을 로드한 후 재생합니다. 주로 TCP를 사용합니다. 2

HLS 스트리밍은 재생에 지장을 주지 않고 네트워크 상태에 따라 비디오 품질을 조정할 수 있습니다. 이를 적응형 스트리밍이라 합니다.

작동 방식

  1. 인코딩: 비디오를 여러 해상도와 여러 방식(H.264, H.265)로 변환합니다.
  2. 조각화: 비디오를 몇 초 길이의 세그먼트(기본 6초)로 나눕니다.

비디오가 업로드되면 서버는 미리 인코딩과 조각화를 수행합니다. 그리고 각 버전 정보를 m3u8 플레이리스트에 기록합니다. 클라이언트는 m3u8 파일을 다운받아 원하는 해상도와 포맷의 세그먼트 파일을 서버에 요청합니다.

과거에는세그먼트 파일 포맷으로 MPEG-TS를 사용했으나, 2016년부터 fMP4도 같이 지원합니다.

MPEG-DASH

Dynamic Adaptive Streaming over HTTP. HLS와 비슷하게 HTTP 에서 스트리밍을 위한 프로토콜입니다. 애플 기기에서 지원하지 않습니다.3

WebRTC

Web Real-Time Communication. 웹이나 모바일 앱에서 별도의 소프트웨어나 플러그인 없이 브라우저간 실시간 음성,영상,데이터 통신을 가능하게 하는 프로토콜입니다.

중앙 서버 없이 참여자(노드)끼리 직접 데이터를 주고 받는 P2P 방식을 사용합니다. 다만 대부분의 사용자가 방화벽이나 NAT 환경 안에 있기 때문에 STUN/TURN 서버가 필요할 수 있습니다.

SRT

Secure Reliable Transport. 기존 RTMP, RTSP는 지원하는 기능이 적고, 보안이 취약했습니다. SRT는 이를 극복해 UDP 기반의 AES 128/256 암호화를 지원하는 스트리밍 프로토콜입니다.

UDP 기반이지만 종단 간 암호화, 패킷 손실 복구(ARQ) 등의 추가 기능을 구현해 신뢰성을 높였습니다.

RTP

Real-time Transport Protocol. 실제 미디어 데이터를 전송합니다. 패킷화, 타임스탬프, 시퀀스 번호 등을 포함하여 데이터의 순서와 동기화를 지원합니다. 주로 UDP를 사용합니다.

RTSPWebRTC의 내부 기능으로 사용됩니다.4 보안을 강화한 SRTP도 있습니다.

파일 포맷

m3u8

MP3 URL + UTF-8. 멀티미디어 재생 목록을 위한 파일 형식입니다. 원래는 MP3 같은 오디오 파일용이었지만 시간이 지나며 오디오와 비디오 소스를 함께 가리키는 용도로 사용합니다. 보통 m3u를 쓰고 텍스트를 UTF-8로 인코딩한 경우 m3u8 확장자를 사용합니다.

MPEG-TS

MPEG Transport Stream, TS. 오디오, 비디오 및 PSIP 데이터를 전송/저장하기 위한 표준 디지털 컨테이너 포맷입니다. 주로 디지털 방송, 위성/케이블 TV, 그리고 HLS의 세그먼트 포맷으로 사용됩니다.

188 bytes의 짧은 고정 길이 패킷을 사용하며, 여러 오디오/비디오 스트림을 다중화하여 전송할 수 있습니다. 다만, 패킷 헤더로 인한 오버헤드가 커 HTTP 기반 스트리밍(OTT)에는 비효율적입니다.

fMP4

Fragmented MP4. 기존 MP4 파일 포맷을 스트리밍 환경에 최적화하기 위해 조각(fragment) 단위로 분할한 미디어 파일 포맷입니다. 최신 코덱와의 호환성이 뛰어나며 HLSMPEG-DASH 모두 지원하기 때문에 CDN 비용을 크게 줄일 수 있습니다.

HTTP Range requests

유튜브로 1시간 영상을 볼 때 영상 전체를 다운받은 후에 실행하지 않습니다. 영상의 첫 몇 초만 다운받고 점진적으로 영상을 다운받습니다. 이를 위한 기능이 HTTP Range 헤더입니다. Range: bytes=0-153 헤더로 영상의 원하는 바이트만 받아올 수 있습니다.

> GET /cctv001/2025/05/24/02-41-55-941642.mp4 HTTP/1.1
> ...
> Range: bytes=0-153
> 
< HTTP/1.1 206 Partial Content
< Server: nginx/1.27.5
< Content-Type: video/mp4
< Content-Length: 154
< Connection: keep-alive
< Content-Range: bytes 0-153/166694557

Footnotes

  1. RTSP(Real Time Streaming Protocol) 이란?

  2. HLS (HTTP 라이브 스트리밍)이란 | Cloudflare

  3. HLS vs. DASH | What’s The Difference? | Mux

  4. Introduction to the Real-time Transport Protocol (RTP) - Web APIs | MDN