본문 바로가기
TIL

TIL 240723 - WebRTC 란?

by lemonpie611 2024. 7. 23.

라이브 방송 구현을 위해...

그냥 OBS 써야되나 했는데 앱으로 확장 생각하면 WebRTC를 쓰는게 맞다..

 

1. WebRTC

WebRTC란, 웹 브라우저 환경, Android, IOS 애플리케이션에서도 사용 가능한 비디오, 음성 및 일반 데이터가 피어 간 실시간으로 전송되도록 지원하는 오픈소스이다.

공개 웹 표준으로 구현되며, 모든 주요 브라우저에서 일반 Javascript API로 제공한다.

 

 

2. 기술 및 프로토콜

1) ICE (Interactive Connectivity Establishment)

  • 브라우저가 peer을 통한 연결이 가능하도록 해주는 프레임워크로, 두 단말이 통신할 수 있는 최적의 경로를 찾아줌
  • peer간 단순 연결 시 작동하지 않는 이유
    • 연결을 시도하는 방화벽을 통과해야 함
    • 단말에 Public IP가 없다면 유일한 주소값을 할당해야 함
    • 라우터가 peer간의 직접 연결을 허용하지 않는 경우
  • 위의 경우 방화벽을 통과시켜주거나 private IP를 public IP로 바꾸는 STUN, TURN 서버를 사용한다.

2) NAT(Network Address Transilation, 네트워크 주소 변환)

  • private IP를 쓰고 있는 각각의 단말들에 Public IP Address를 할당하여 외부 인터넷에 접속할 수 있게 해줌
  • 라우터는 공개 IP 주소를 갖고있고, 모든 단말들은 라우터에 연결되어있으며, Private IP Address를 가짐
  • 클라이언트에서 요청 시 private IP가 데이터를 요청했다는 것을 기록 > private IP는 외부에서 접근할 수 없으므로 NAT가 public IP로 변환하여 접근 가능하도록 함

3) STUN(Session Traversal Utilities for NAT) 서버

  • NAT를 통해 public IP를 알아냄 + peer 간의 직접 연결을 막는 등의 라우터 제한을 결정
  • 클라이언트의 Public Address와 클라이언트가 접근 가능한지 여부를 STUN 서버에 요청하여 알아냄
  • 몇몇 라우터들은 Symmetric NAT를 사용(peer들이 이전에 연결한 적 있는 연결들만 허용함) > STUN 서버에 의해 공개 IP 주소를 발견하여도 모두 연결이 가능한 것은 아님 > TURN 사용

4) TURN(Traversal Using Relays around NAT) 서버

 

  • STUN의 확장으로, 각 Peer들이 Private IP 안에서 통신할 수 있도록 함
  • Peer들이 직접 통신하는 것이 아니라, 릴레이 역할을 하는 TURN 서버를 사용하여 공유 > Symmetric NAT 제한 우회 가능
  • 오버헤드가 발생하니까, 최후의 수단(?)으로 사용하자...

STUN / TURN

 

5) SDP(Session Description Protocol)

  • 해상도, 형식, 코덱, 암호화 등 멀티미디어 컨텐츠의 연결을 설명하기 위한 표준
  • 두 peer가 다른 한쪽이 데이터가 전송되고 있다는 것을 알게 해줌
  • 프로토콜은 아님.. 컨텐츠에 대한 메타데이터 설명

 

3. WebRTC를 위해 구현할 수 있는 서버 종류

1) Signaling 서버 (P2P / Mesh)

  • peer 간의 offer, answer라는 세션 정보 signal만을 중계함
  • 처음 WebRTC가 peer간의 정보를 중계할 때에만 서버에 부하가 발생하며, 연결 완료 후에는 서버에 별도 부하 없음
  • 1:1 연결에 적합하나, 1:N, N:M 연결에서는 클라이언트의 과부하가 급격하게 증가함

2) SFU(Selective Forwarding Unit) 서버

  • 종단 간 미디어 트래픽을 중계하는 중앙 서버 방식으로, 클라이언트 peer간 연결이 아닌 서버와 클라이언트 간의 peer를 연결함
  • 1:1, 1:N, N:M 등 모든 연결 형식에서 클라이언트는 서버에게만 자신의 영상 데이터를 보내면 됨 (uplink가 1개)
  • 대신 상대방의 수만큼 데이터를 받는 peer를 유지해야 함 (downlink는 N개)
  • P2P보다는 느리지만 비슷한 수준의 실시간성 유지
  • 클라이언트가 받는 부하는 줄어들지만, 서버 비용은 많이 듦
  • 1:N 형식 또는 소규모 N:M 형식의 실시간 스트리밍에 적합

3) MCU(Multi-point Control Unit) 서버

  • 다수의 송출 미디어를 중앙 서버에서 혼합 또는 가공하여 수신측으로 전달하는 중앙 서버 방식
  • 클라이언트 peer간 연결이 아닌, 서버와 클라이언트 간의 peer을 연결, uplink, downlink 모두 1개
  • 근데, 다수의 peer로부터 받은 video와 audio 데이터를 하나의 데이터로 편집해서 한명에게 보내는 식이라서 실시간성 저해, 비용이 많이 듦
  • N:M 구조에 사용 가능 (적합하다고는 안했음)