RTSP(μ‹€μ‹œκ°„ 슀트리밍 μ œμ–΄ ν”„λ‘œν† μ½œ)μ΄λž€?

2025. 11. 16. 15:48Β·λ„€νŠΈμ›Œν¬

 

 

λ“€μ–΄κ°€λ©°

μ‹€μ‹œκ°„ μ˜μƒ 슀트리밍 μ‹œμŠ€ν…œμ„ ꡬ좕할 λ•Œ κ°€μž₯ λ¨Όμ € λ“±μž₯ν•˜λŠ” ν”„λ‘œν† μ½œμ΄ λ°”λ‘œ RTSP(Real Time Streaming Protocol)μž…λ‹ˆλ‹€.
λ³΄μ•ˆ 카메라, CCTV κ΄€μ œ, λ”₯λŸ¬λ‹ μ˜μƒ 뢄석, 방솑 μ‹œμŠ€ν…œ λ“± λŒ€λΆ€λΆ„μ˜ μ‹€μ‹œκ°„ μ˜μƒ μΈν”„λΌμ—μ„œ ν‘œμ€€μ²˜λŸΌ μ‚¬μš©λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이름과 달리 RTSPλŠ” “μ˜μƒ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” ν”„λ‘œν† μ½œ”이 μ•„λ‹™λ‹ˆλ‹€. RTSP의 λ³Έμ§ˆμ€ μŠ€νŠΈλ¦¬λ°μ„ μ œμ–΄ν•˜λŠ” 역할에 μžˆμŠ΅λ‹ˆλ‹€.

 

 

1. RTSPλž€ 무엇인가?

RTSP(Real Time Streaming Protocol)λŠ” μ‹€μ‹œκ°„ μŠ€νŠΈλ¦Όμ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. μ›Ήμ—μ„œ HTTPκ°€ λ¬Έμ„œ μš”μ²­κ³Ό 전솑을 μ œμ–΄ν•˜λ“―, RTSPλŠ” μ˜μƒ·μŒμ„± μŠ€νŠΈλ¦Όμ„ μš”μ²­ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” “리λͺ¨μ»¨ μ—­ν• ”을 ν•©λ‹ˆλ‹€.

RTSPκ°€ μˆ˜ν–‰ν•˜λŠ” μ£Όμš” κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • 슀트림 μž¬μƒ μš”μ²­: PLAY
  • 슀트림 μΌμ‹œμ •μ§€: PAUSE
  • 슀트림 쀑단: TEARDOWN
  • 슀트림 정보 쑰회: DESCRIBE
  • 슀트림 전솑 경둜 μ„€μ •: SETUP

즉, RTSPλŠ” μ‹€μ œ μ˜μƒ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” ν”„λ‘œν† μ½œμ΄ μ•„λ‹ˆλΌ,
슀트리밍 μ„Έμ…˜μ„ μƒμ„±ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ œμ–΄ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.

μ˜μƒ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” ν”„λ‘œν† μ½œμ€ RTP(Real Time Transport Protocol)μž…λ‹ˆλ‹€. RTSPλŠ” RTPλ₯Ό ν™œμš©ν•˜μ—¬ μ‹€μ‹œκ°„ 데이터λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

 

2. RTSP와 RTP의 관계

RTSPλŠ” μ’…μ’… μ‹€μ‹œκ°„ 슀트리밍 ν”„λ‘œν† μ½œ 전체λ₯Ό μ˜λ―Έν•˜λŠ” κ²ƒμœΌλ‘œ κ°„μ£Όλ˜μ§€λ§Œ, μ‹€μ œ 전솑 역할은 RTP(Real-time Transport Protocol)κ°€ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

관계λ₯Ό κ°„λ‹¨νžˆ ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • RTSP = μ œμ–΄
  • RTP = μ˜μƒ/μŒμ„± 데이터 전솑
  • RTCP = 전솑 ν’ˆμ§ˆ 관리

RTSPλŠ” “PLAY μš”μ²­”을 보내면,
μ„œλ²„λŠ” 이후 RTPλ₯Ό 톡해 μ‹€μ‹œκ°„μœΌλ‘œ H.264/H.265, AAC λ“±μ˜ 데이터λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.

이 ꡬ쑰 덕뢄에 RTSPλŠ” 지연이 μž‘κ³  μ•ˆμ •μ μΈ μ‹€μ‹œκ°„ μŠ€νŠΈλ¦¬λ°μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

3. RTSP ν”„λ‘œν† μ½œμ˜ λ™μž‘ 흐름

RTSPλŠ” HTTP와 ꡬ쑰가 λΉ„μŠ·ν•œ request/response 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„(IP 카메라 λ˜λŠ” λ―Έλ””μ–΄ μ„œλ²„)에 λ³΄λ‚΄λŠ” μš”μ²­μ˜ μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1) OPTIONS

μ„œλ²„κ°€ μ§€μ›ν•˜λŠ” RTSP λͺ…령을 μ‘°νšŒν•©λ‹ˆλ‹€.

2) DESCRIBE

μ˜μƒ 슀트림의 상세 정보(SDP)λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.
코덱, νŠΈλž™ 정보, ν”„λ ˆμž„ 레이트 등이 ν¬ν•¨λ©λ‹ˆλ‹€.

3) SETUP

RTPλ₯Ό μ–΄λ–€ 포트둜 전솑할지 ν˜‘μƒν•©λ‹ˆλ‹€.

4) PLAY

μ‹€μ œ 슀트리밍 μ‹œμž‘ λͺ…λ Ήμž…λ‹ˆλ‹€.
이후 μ„œλ²„λŠ” RTP νŒ¨ν‚·μ„ μ§€μ†μ μœΌλ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.

5) PAUSE

μž¬μƒ μΌμ‹œμ •μ§€.

6) TEARDOWN

슀트리밍 μ„Έμ…˜ μ’…λ£Œ.

이제 전체 ν”„λ‘œμ„ΈμŠ€κ°€ λͺ…ν™•ν•΄μ§‘λ‹ˆλ‹€. RTSPλŠ” 슀트림 정보λ₯Ό μš”μ²­ν•˜κ³ , RTP 전솑 경둜λ₯Ό μ„€μ •ν•˜λ©°, μž¬μƒκ³Ό 쀑지λ₯Ό μ§€μ‹œν•˜λŠ” μ œμ–΄μžμž…λ‹ˆλ‹€.

 

4. RTSPκ°€ 널리 μ“°μ΄λŠ” 이유

RTSPλŠ” μ‹€μ‹œκ°„ μ‹œμŠ€ν…œμ—μ„œ λ‹€μŒκ³Ό 같은 μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

지연이 맀우 적닀 (Low Latency)

RTP 기반이기 λ•Œλ¬Έμ— μ‹€μ‹œκ°„μ„±μ΄ λ›°μ–΄λ‚©λ‹ˆλ‹€. μ›Ή 기반 슀트리밍(HLS, DASH)보닀 훨씬 λΉ λ₯Έ μž¬μƒμ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ‹€μ–‘ν•œ 코덱과 μž₯λΉ„μ—μ„œ ν‘œμ€€ 지원

거의 λͺ¨λ“  IP 카메라가 RTSPλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
λ˜ν•œ λŒ€λΆ€λΆ„μ˜ NVR, DVR, κ΄€μ œ μ†”λ£¨μ…˜λ„ RTSP κΈ°λ°˜μž…λ‹ˆλ‹€.

FFmpeg, GStreamer λ“± μ˜€ν”ˆμ†ŒμŠ€μ™€ ν˜Έν™˜μ„± λ†’μŒ

λ―Έλ””μ–΄ 처리 ν”„λ ˆμž„μ›Œν¬μ™€ μžμ—°μŠ€λŸ½κ²Œ μ—°λ™λ˜μ–΄ κ°œλ°œλ„ μ‰¬μš΄ νŽΈμž…λ‹ˆλ‹€.

 

5. RTSP의 λŒ€ν‘œμ μΈ ν™œμš© λΆ„μ•Ό

1) IP Camera / CCTV 슀트리밍

κ°€μž₯ λŒ€ν‘œμ μΈ RTSP μ‚¬μš©μ²˜μ΄λ‹€.
κ΄€μ œ μ‹œμŠ€ν…œ(NVR, CMS), μ˜μƒ 뢄석 AI, 슀마트 μ‹œν‹° κ΄€μ œ λ“±μ—μ„œ ν‘œμ€€μ²˜λŸΌ μ‚¬μš©λ©λ‹ˆλ‹€.

2) RTSP → WebRTC κ²Œμ΄νŠΈμ›¨μ΄

λΈŒλΌμš°μ €λŠ” RTSPλ₯Ό 직접 μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜λ―€λ‘œ,
μ„œλ²„μ—μ„œλŠ” RTSP μŠ€νŠΈλ¦Όμ„ WebRTC둜 λ³€ν™˜ν•΄ μ΄ˆμ €μ§€μ—° μž¬μƒμ„ κ΅¬ν˜„ν•©λ‹ˆλ‹€.

3) λ”₯λŸ¬λ‹ 기반 μ˜μƒ 뢄석 μ‹œμŠ€ν…œ

RTSP 슀트리밍 → λ””μ½”λ”© → GPU(Intel/NVIDIA)μ—μ„œ μΆ”λ‘ (Inference)

4) 방솑/ν”„λ‘œλ•μ…˜ μ‹œμŠ€ν…œ

SDI → IP μ „ν™˜ κΈ°μˆ μ—μ„œ RTP/RTSPκ°€ κΈ°λ³Έμž…λ‹ˆλ‹€.

5) λ‘œλ³΄ν‹±μŠ€·λ“œλ‘  μ˜μƒ 슀트리밍

저지연이 ν•„μˆ˜μΈ μ‚°μ—…μ—μ„œ RTSPλŠ” μ—¬μ „νžˆ κ°•λ ₯ν•œ μ„ νƒμ§€μž…λ‹ˆλ‹€.

 

6. RTSP μ œμ–΄ μ½”λ“œ μ˜ˆμ‹œ (Python)

Python은 RTSP ν…ŒμŠ€νŠΈμ™€ μžλ™ν™” 슀크립트 μž‘μ„±μ— κ°€μž₯ μ ν•©ν•œ μ–Έμ–΄ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. μ•„λž˜λŠ” 기본적인 RTSP μ œμ–΄ μ½”λ“œ μ˜ˆμ œμž…λ‹ˆλ‹€.

import socket

def send_rtsp(sock, message):
    sock.send(message.encode())
    data = sock.recv(4096).decode()
    print(data)
    return data

host = "192.168.0.101"
port = 554
stream = "rtsp://192.168.0.101/stream1"

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

cseq = 1

# OPTIONS
send_rtsp(sock, f"OPTIONS {stream} RTSP/1.0\r\nCSeq: {cseq}\r\n\r\n")
cseq += 1

# DESCRIBE
send_rtsp(sock,
    f"DESCRIBE {stream} RTSP/1.0\r\nCSeq: {cseq}\r\nAccept: application/sdp\r\n\r\n"
)
cseq += 1

이와 같은 ν˜•νƒœλ‘œ SETUP, PLAY, PAUSE 등을 직접 μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

7. RTSP κ°œλ°œμ— ν•„μš”ν•œ 기술 μŠ€νƒ

RTSP 기반 μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 경우 μ•„λž˜μ˜ κΈ°μˆ μ„ ν•¨κ»˜ ν•™μŠ΅ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

  • RTP/RCTP νŒ¨ν‚· ꡬ쑰 이해
  • H.264 / H.265 NAL λ‹¨μœ„ ꡬ쑰
  • FFmpeg, GStreamer ν™œμš©
  • ONVIF ν”„λ‘œν† μ½œ (카메라 μ œμ–΄)
  • GPU 인코딩/λ””μ½”λ”©(CUDA, NVENC/NVDEC)
  • WebRTC (λΈŒλΌμš°μ € μ‹€μ‹œκ°„ μž¬μƒ)

RTSPλŠ” λ‹¨λ…μœΌλ‘œ μ‚¬μš©λ˜λŠ” 것이 μ•„λ‹ˆλΌ
λΉ„λ””μ˜€ 처리 / 뢄석 / 전솑 νŒŒμ΄ν”„λΌμΈ 전체와 κ²°ν•©λ˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€.

 

마무리

RTSPλŠ” λ‹¨μˆœν•œ “μ˜μƒ URL” κ·Έ μ΄μƒμž…λ‹ˆλ‹€. μ‹€μ‹œκ°„ μ˜μƒ μ „μ†‘μ˜ 전체 흐름을 μ œμ–΄ν•˜λŠ” 핡심 ν”„λ‘œν† μ½œμ΄λ©°,
지연이 적고 μ•ˆμ •μ μ΄λ©° λ‹€μ–‘ν•œ μž₯비와 ν‘œμ€€μ— ν­λ„“κ²Œ μ μš©λ©λ‹ˆλ‹€.

μ‹€μ œ κ°œλ°œμ—μ„œλŠ” RTSPλ₯Ό μ€‘μ‹¬μœΌλ‘œ RTP, 코덱, FFmpeg λ“±μ˜ 기술이 유기적으둜 κ²°ν•©λ©λ‹ˆλ‹€. RTSPλ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜λ©΄ μ˜μƒ 슀트리밍 μ‹œμŠ€ν…œ 전체 ꡬ쑰λ₯Ό ν•œ 단계 더 깊이 νŒŒμ•…ν•  수 있게 λ©λ‹ˆλ‹€.

λ‹€μŒμ—λŠ” RTSP vs WebRTC 비ꡐ 글을 μž‘μ„±ν•΄λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'λ„€νŠΈμ›Œν¬' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μ„œλ²„μ˜ νŠΉμ • ν¬νŠΈκ°€ μ—΄λ €μžˆλŠ”μ§€ κ°„λ‹¨ν•˜κ²Œ μ²΄ν¬ν•˜κΈ°  (0) 2025.05.23
QoS, Traffic Shaping, Traffic Policing  (0) 2024.12.18
'λ„€νŠΈμ›Œν¬' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • μ„œλ²„μ˜ νŠΉμ • ν¬νŠΈκ°€ μ—΄λ €μžˆλŠ”μ§€ κ°„λ‹¨ν•˜κ²Œ μ²΄ν¬ν•˜κΈ°
  • QoS, Traffic Shaping, Traffic Policing
μ„œμ•„λž‘πŸ˜ƒ
μ„œμ•„λž‘πŸ˜ƒ
Just Do ItπŸ’ͺ
  • μ„œμ•„λž‘πŸ˜ƒ
    G-Stack
    μ„œμ•„λž‘πŸ˜ƒ
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (144)
      • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (78)
        • C++ 기초 (28)
        • C++ μ‘μš© (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • 컴퓨터 ꡬ쑰 & 운영체제 (31)
      • μ•Œκ³ λ¦¬μ¦˜ (12)
      • λ°μ΄ν„°λ² μ΄μŠ€ (5)
      • λ„€νŠΈμ›Œν¬ (3)
      • λ””μžμΈνŒ¨ν„΄ (5)
      • μ„œλΉ„μŠ€ & 툴 (7)
      • νŠΈλ Œλ“œ&이슈 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

    • GμŠ€νƒμ˜ 기술 λΈ”λ‘œκ·Έ
  • 인기 κΈ€

  • νƒœκ·Έ

    λ””μžμΈνŒ¨ν„΄
    Thread
    ν•˜λ“œλ””μŠ€ν¬
    쑰건문
    상속
    파이썬
    c
    pointer
    νŒŒμΌμž…μΆœλ ₯
    go
    RAM
    가상메λͺ¨λ¦¬
    λ³€μˆ˜
    STD
    cpu
    ν•¨μˆ˜
    μ•Œκ³ λ¦¬μ¦˜
    μž¬κ·€
    포인터
    init
    fork
    νŒ¨ν‚€μ§€
    λ°μ΄ν„°λ² μ΄μŠ€
    반볡문
    λ©”λͺ¨λ¦¬
    μŠ€νƒ
    λ°°μ—΄
    c++
    컴퓨터
    component
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
μ„œμ•„λž‘πŸ˜ƒ
RTSP(μ‹€μ‹œκ°„ 슀트리밍 μ œμ–΄ ν”„λ‘œν† μ½œ)μ΄λž€?
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”