WebRTC 아키텍처

개인적으로 새로운 뭔가를 배울 때 가장 좋은건 그 뭔가를 사용해서 간단한 예제를 만들어 보는 것이라고 생각한다.
그리고 이제 더 깊이 있는 원리나 아키텍쳐를 익히기 위해선 역시 document와 소스코드를 보는 것이 가장 좋은 것같다.

최근에 개인적으로 WebRTC에 대해 흥미가 있었고, Udemy를 통해서 간단한 1:1 채팅방 웹앱도 만들어봤다.
물론 그렇게 대단하진 않았지만 맘에드는 새로운 기술을 사용해 뭔가를 만든다는 건 재밌는 일이다.

어찌됐든 지금 더 WebRTC에 대해 깊게 파야할 이유가 생겨 WebRTC에 대해 document나 여러가지 프레임워크 등을 공부해가며 이곳에 적어 나가려고 하며
그 시작으로 WebRTC의 아키텍쳐에 대해 정리하고자 한다.

참고는 공식 사이트 https://webrtc.org/


Architecture

(https://webrtc.org/architecture/)
(통신 관련 전문 용어가 많아 의역과 오역이 많음)

WebRTC는 어떤 플러그인을 다운받거나 설치하지도 않고도
웹 애플리케이션 개발자에게 웹에서 화상 채팅과 같은 실시간 멀티미디어 애플리케이션을 만들 수 있는 기능들을 제공한다.

WebRTC의 목적은 여러 웹 브라우저와 플랫폼을 아우르는 강력한 RTC 플랫폼을 만드는 것을 도와주는 것이다.

전체적인 아키텍쳐는 아래와 같다.

여기서 2개의 레이어를 볼 수 있는데,

  • 브라우저 개발자는 그들의 입맛에 맞게 사용할 수 있는 WebRTC C++ API와 captrue/render hooks에 관심이 있을 것이고
  • 웹 개발자들은 Web API에 관심이 있을 것이다.

위 아키텍쳐를 하나 씩 살펴보면

Web App

실시간 통신을 위한 웹 API에 의해 작동되는 비디오, 오디오 채팅 기능을 가진 웹 기반의 3rd-party 애플리케이션

Web API

웹 기반으로 만든 화상 채팅 같은 애플리케이션을 만드는 3rd-party 개발자들에 의해 사용되는 API

WebRTC Native C++ API

브라우저 제작자가 쉽게 Web API 명세를 구현할 수 있게하는 API 레이어

Transport / Session

XMPP/Jingle 프로토콜을 사용하거나 필요로 하지 않고 libjingle의 컴포넌트들을 재사용을 통해 session 컴포넌트들이 만들어졌다.
(XMPP는 메시징 프로토콜, Jingle은 XMPP가 VoIP 요청이나 파일 전송 수립에 사용하는 서브 프로토콜)

  • RTP Stack
    RTP(Real Time Protocol)를 위한 네트워크 스택
  • STUN/ICE
    다양한 종류의 네트워크를 아우르는 연결 수립을 위한 STUN, ICE 메카니즘을 사용하기 위한 호출을 하게하는 컴포넌트
  • Session Management
    setup, management 레이저를 호출할 수 있는 추상화된 세션 레이어
    프로토콜 구현 결정이 앱 개발자에게 맡겨진다.

VoiceEngine

VoiceEngine은 사운드 카드에서 네트워크로의 오디오 미디어 체인을 위한 프레임워크이다.

  • iSAC / iLBC / Opus

    • iSAC:
      VoIP와 오디오 스트리밍을 위한 광대역/초광대역 오디오 코덱
      12 ~ 52 kbps의 비트율과 함께 16 kHz나 32 kHz 샘플링 주파수를 사용한다.

    • iLBC:
      VoIP와 오디오 스트리밍을 위한 좁은 대역의 음성 부호화기(A narrowband speech codec)
      20ms 프레임을 위한 15.2 kbps 비트레이트를 사용한 8 KHz 샘플링 주파수와 30ms 프레임을 위한 13.33 kbps
      Defined by IETF RFCs 3951 and 3952.

    • Opus:
      일정하거나 가변하는(6 kbit/s ~ 510 kbit/s) 비트레이트 인코딩, 프레임 사이즈(2.5 ms ~ 60 ms)와 다양한 샘플링율(8 kHz ~ 48 kHz)을 지원한다.
      Defined by IETF RFC 6176.

A dynamic jitter buffer와 error concealment algorithm은 네트워크 jitter와 패킷 손실의 부정적인 효과들을 은폐하기 위해 사용된다.
제일 높은 음질을 유지하면서 지연을 가능한 낮게한다.

  • Acoustic Echo Canceler (AEC)
    The Acoustic Echo Canceler 재생된 목소리가 다시 마이크에 들어가면서 생긴 acoustic echo를 실시간으로 없애주는 시그널 프로세싱 컴포넌트 기반의 소프트웨어이다.

  • Noise Reduction (NR)
    Noise Reduction 컴포넌트는 특정 종류의 배경 소음을 제거하는 시그널 프로세싱 컴포넌트 (주로 VoIP와 관련이 있다) 기반의 소프트웨어이다.

VideoEngine

VideoEngine is a framework video media chain for video, from camera to the network, and from network to the screen.

  • VP8
    WebM project(open web media project)의 비디오 코덱이다.
    낮은 지연시간을 위해 설계되어 RTC에 적합하다.

  • Video Jitter Buffer
    Dynamic Jitter Buffer for video.
    Helps conceal the effects of jitter and packet loss on overall video quality.

  • Image enhancements:
    예로, 웹캠으로 캡쳐한 이미지의 비디오 노이즈를 제거한다

Share