WebRTC란

  • WebRTC란 Web Real-Time Communications의 약자로, 웹 또는 앱에서 별도의 소프트웨어나 플러그인없이 P2P로 음성, 영상 및 데이터 전송이 가능한 기술을 말한다.

WebRTC 기초

  • NAT(Network Address Translation)
    • NAT는 해당 기기의 공인 IP를 부여한다.
    • 라우터가 공인 IP를 가지고 있으며, 여기에 연결된 기기는 사설 IP 주소를 갖는다.
    • 공인 IP는 전세계적으로 유일한 IP이며, 사설 IP는 특정 네트워크 안에서만 유효하다.
  • ICE(Interactive Connectivity Establishment)
    • ICE는 P2P간 다이렉트 통신을 위한 기술로 서로의 기기와 통신하기 위해 최적의 경로를 찾을 수 있도록 도와준다.
  • STUN(Session Traversal Utilities for NAT)
    • STUN 서버는 기기의 공인 IP를 찾고 P2P 연결을 방해하는 요소가 라우터 내에 있는지 알아내는 프로토콜이다.
    • STUN 서버는 공용 인터넷 망에 위치해 있으며 라우터의 NAT 뒤에 있는 기기가 공인 IP 주소를 요청할 때 해당 주소를 확인하고 외부 망에서 접근 가능한 IP 정보를 알려주는 역할을 한다.
  • TURN(Traversal Using Relays around NAT)
    • TURN은 STUN 서버를 이용한 연결이 실패했을 경우 오디오, 비디오 등의 데이터를 릴레이 해주는 역할을 한다.
    • TURN 서버를 통해 모든 정보를 중계하기 때문에 대안이 전혀 없는 경우에만 사용하는 것이 좋다.
  • SDP(Session Description Protocol)
    • SDP는 P2P로 서로간 주고받을 데이터를 이해하는데 사용된다.
    • 데이터의 해상도, 형식, 코덱, 암호화 방법 등을 기술하는 표준이며 미디어 자체라기보단 메타데이터라고 볼 수 있다.
  • ICE Candidate
    • SDP를 결정한 후에는 ICE Candidate들을 교환하기 시작하며 여러 경로중 최고의 ICE를 결정하게 한다.
    • 이 과정 때문에 이미 미디어 스트리밍이 시작됐다고 하더라도 연결 초반에는 영상 품질이 낮을 수 있다.
  • Signaling Server
    • 기기 사이에 커넥션을 만드는 역할을 한다.

WebRTC 흐름도

  1. Session Description 교환
    • Signaling 프로세스는 call을 하는 유저가 offer를 만들면서 시작된다.
    • 이 offer는 세션 정보를 SDP 포맷으로 가지고 있으며, callee에게 전달된다.
    • callee는 caller에게 SDP Description을 포함한 answer 메시지를 보낸다.
    • 현 시점에서 A와 B는 어떤 코덱들과 어떤 Video Parameter들이 사용될지 알게된다.
    • 하지만 여전히 미디어 데이터 자체를 전송하는 방법은 모른다.
  2. ICE Candidates 교환
    • SDP를 교환한 후에는 ICE Candidates를 교환한다.
    • 각 ICE Candidate는 caller 입장에서 통신할 수 있는 방법을 설명한다.
    • 각 Peer는 검색되는 순서대로 Candidate를 보내고, 이미 스트리밍이 시작됐다 하더라도 모든 가능한 Canidate가 전송 될때까지 계속 보낸다.
    • 각 Peer가 서로 호환되는 Candidate를 제안했다면, 미디어는 통신을 시작한다.
    • 추 후 더 나은 방법이 있다면 스트림의 포맷이 변경된다.
  3. 미디어 전송 시작