본문 바로가기

개발기술/영상처리

영상처리 인터페이스 및 프로토콜 개략

 Video Source Category


각 카테고리는 비디오 스트림을 수신하는 방식에 따라 구분되며, 카메라 또는 소스가 데이터를 어떻게 제공하는지에 따라 다릅니다.

  • 일부(웹캠, 비디오 파일)는 직접적인 비디오 소스
  • 일부(ONVIF, IP 카메라)는 네트워크 기반 스트리밍 프로토콜 사용
  • 일부(GStreamer)는 고급 비디오 파이프라인 역할

 

분류 설명
웹캠 USB 카메라 또는 노트북 내장 카메라
→ UVC(USB Video Class)로 운영체제가 인식하는 표준 비디오 장치로 처리
비디오 파일 사전 녹화된 동영상 파일 (MP4, AVI 등)
→ 실시간이 아닌 저장된 파일 재생
디렉토리 프레임 순서대로 저장된 이미지 폴더
→ 타임랩스나 일괄 처리에 적합
ONVIF IP 카메라용 표준 프로토콜
→ RTSP를 통해 실시간 스트리밍 수행
스크린 캡처 컴퓨터 화면을 비디오 스트림으로 캡처
→ 화면 녹화 또는 가상 카메라 용도
IP 카메라 일반 네트워크 카메라 (ONVIF 여부 무관)
→ RTSP, HTTP, 또는 자체 프로토콜 사용
GStreamer 멀티미디어 스트림 처리용 프레임워크
→ 비디오를 사전에 가공하거나 조합 가능

 

멀티미디어 프레임워크란?

비디오, 오디오, 이미지 등 미디어 데이터를 처리, 스트리밍, 캡처, 렌더링할 수 있도록 도와주는 소프트웨어 라이브러리입니다.

기능  항목설명
📥 입력 처리 파일, 카메라, 마이크, 스트림(RTSP, HTTP 등)으로부터 읽기
🔄 처리 및 트랜스코딩 압축/해제, 인코딩/디코딩, 필터링, 포맷 변환 등
📤 출력 처리 파일 저장, 네트워크 스트리밍, 화면 또는 스피커에 출력
🧩 파이프라인/플러그인 필터, 인코더, 싱크 등을 체인 형태로 연결 가능

🔧 대표적인 멀티미디어 프레임워크


프레임워크 설명
FFmpeg 인코딩, 디코딩, 스트리밍, 포맷 변환을 위한 커맨드라인 도구 및 라이브러리(libav*)
GStreamer 플러그인 기반, 라이브 스트리밍에 적합한 유연한 프레임워크
DirectShow 마이크로소프트의 멀티미디어 프레임워크 (Windows 기반)
LibVLC VLC 미디어 플레이어의 백엔드 라이브러리
MediaPipe 구글이 개발한 ML 기반의 미디어 프레임워크 (예: 얼굴 인식 등)

⚖️ FFmpeg vs GStreamer 비교


기능 FFmpeg GStreamer
인터페이스 커맨드라인(단일 명령어) 요소 기반의 모듈형 파이프라인
주요 사용 사례 파일 인코딩, 변환, 스트리밍 실시간 캡처, 커스텀 미디어 처리
지연 최적화 여부 낮음 실시간 지향 (저지연)
확장성 비교적 제한적 매우 유연 (플러그인 방식)
학습 곡선 진입장벽 낮음 진입장벽은 있지만 자유도 높음

 

 

 

 

 

스트리밍 프로토콜

HLS (HTTP Live Streaming)

애플이 개발한 HTTP 기반 스트리밍 프로토콜로, 비디오/오디오를 실시간으로 전송합니다.
→ 동영상을 .ts 세그먼트로 나누고, 재생 방법은 .m3u8 플레이리스트로 정의

장점

  • ✅ 네트워크 속도에 따라 화질 자동 조절 (Adaptive)
  • ✅ 브라우저 및 모바일 호환성 우수
  • ✅ CDN 사용 가능 (대규모 서비스에 적합)
특징내용
🌍 호환성 Chrome, Firefox, Safari 등 브라우저 지원
📶 적응 스트리밍 다양한 비트레이트 자동 조절
🔄 확장성 CDN을 통한 대량 사용자 지원 용이

 

RTSP (Real-Time Streaming Protocol)

네트워크를 통한 실시간 제어 프로토콜로, 실시간 카메라 영상 등에 적합

장점

  • ✅ 지연시간 낮음 (약 2초)
  • ✅ 실시간 스트리밍에 적합 (CCTV, 방송 등)

단점

  • ❌ 브라우저 비호환 (VLC 등 별도 플레이어 필요)
  • ❌ 대규모 사용자 처리 어려움 (스케일 아웃 어려움)

HLS vs RTSP 비교

 

항목 HLS RTSP
전송 방식 HTTP RTP (Real-time Transport Protocol)
지연 시간 높음 (10~30초) 낮음 (보통 2초 이하)
호환성 브라우저/모바일/TV 등 광범위 지원 VLC, OBS 등 별도 플레이어 필요
사용 사례 YouTube, Twitch 등 VOD/라이브 방송 CCTV, 실시간 감시, RT 카메라
스트리밍 구조 .m3u8 + .ts 세그먼트 방식 연속적인 실시간 스트림 전송
적응 스트리밍 지원 (다중 비트레이트) 미지원

 

RTSP (Real-Time Streaming Protocol)

  • 정의: Real-Time Streaming Protocol
  • 역할: 클라이언트(예: VLC)가 서버(예: MediaMTX)에게 멀티미디어 스트림 제어를 요청할 수 있는 응용 계층 프로토콜
  • 용도: VOD(Video on Demand), IP 카메라, CCTV 등에서 스트리밍 제어
  • 동작: HTTP처럼 요청/응답 구조지만, 멀티미디어 데이터 전송은 RTP를 통해 분리됨

 

RTSP와 RTP의 관계

  • RTSP는 제어 프로토콜로 RTP 세션을 설정해주는 역할
  • RTP(Real-time Transport Protocol)는 미디어 데이터 전송용 프로토콜
  • 실제 영상/음성 데이터는 RTP(보통 UDP) 로, 제어 명령은 RTSP(TCP) 로 주고받음
  • RTCP는 RTP의 상태를 모니터링하기 위한 보조 프로토콜

2. RTSP의 주요 기능

넷플릭스나 유튜브에서 "재생", "일시정지", "뒤로 감기" 버튼을 누르면, 단순히 클라이언트 UI만 멈추는 게 아니라 서버와의 전송 흐름도 달라지는것과 같음

기능 설명
DESCRIBE 스트림 메타데이터 요청 (예: 코덱, 트랙 정보 등)
SETUP 스트림 트랙별 전송 채널을 설정 (TCP or UDP)
PLAY 스트리밍 시작
PAUSE 스트리밍 일시 중지
TEARDOWN 스트리밍 종료 및 세션 해제
ANNOUNCE 서버에 스트림을 등록 (퍼블리셔 역할에서 사용)

 

3. RTSP의 전송 방식 (세션 설정 방식)


방식 특징
UDP (기본) 빠르지만 NAT, 방화벽, 패킷 손실 문제 있음
TCP 안정적이고 NAT 문제 없음. FFmpeg의 -rtsp_transport tcp
HTTP 터널링 방화벽 회피용. RTSP over HTTP. 기업망에서 사용

 

5. RTSP 동작 예시 (시청자 역할일 때)

  1. 클라이언트 → DESCRIBE → 서버로부터 SDP 정보 받음
  2. 클라이언트 → SETUP → RTP 채널 세팅 (포트 or 인터리브)
  3. 클라이언트 → PLAY → 스트리밍 시작
  4. 서버 → RTP 전송 시작
  5. 클라이언트 → TEARDOWN → 세션 종료

 

6. FFmpeg/MediaMTX에서 RTSP 흐름

  • FFmpeg 퍼블리셔 역할:
    • ffmpeg -f rtsp -rtsp_transport tcp -i ...
      → 서버(MediaMTX)에 SETUP → ANNOUNCE → RECORD → RTP 송신
  • MediaMTX 시청자 역할 (VLC 등):
    • RTSP URL로 접속 → DESCRIBE → SETUP → PLAY