WebRTC 개념

devkwon·2022년 12월 22일
0

WebRTC

목록 보기
2/2

Signaling

서로 다른 네트워크에 있는 2개의 디바이스들을 통신하기 위해서는 각 디바이스들의 주소 및 미디어 포맷협의가 필요하다. 이 프로세스를 시그널링 signaling 이라 부르고 각 디바이스들을 상호간에 동의된 서버에 연결시킨다.

ICE

Interactive Connectivity Establishment의 약자로
웹 브라우저가 피어(peer)와 연결할 수 있게 최적의 관계를 찾도록 도와주는 프레임워크다. 즉시 피어 간 연결은 방화벽을 우회해야하고, 고유 주소(public IP)를 가지고 있어야 한다. 이러한 문제점들을 ICE가 STUN 또는 TURN 서버를 활용하여 해결해준다.

NAT

Network Address Translation는 사용자 디바이스에게 공인(public) 아이피를 주기 위해 사용된다.
라우터는 public 주소가 있고 이와 연결된 모든 디바이스는 private 주소가 있다. request를 할 경우 디바이스의 private 주소는 라우터의 public 주소와 고유한 포트로 변경된다. 이러한 방식은 모든 디바이스가 public 주소를 가지고 있지 않아도 인터넷에서 식별이 가능하게 한다.

프로토콜: 네트워크 상 통신을 할 수 있도록 정해둔 공통의 언어 또는 규정

STUN

Session Traversal Utilities for NAT의 약자로
사용자의 public address와 피어간 연결을 막는 어떠한 제약들이 라우터에 있는지 탐색한다. 클라이언트는 인터넷을 통해 STUN 서버에게 request를 보낸다. STUN 서버는 클라이언트의 public address와 클라이언트가 NAT라우터 뒤에 접근이 가능한지 아닌지를 알려준다. 즉, 단말이 자신의 공인 IP와 포트를 확인하는 프로토콜이다.

TURN

STUN으로 항상 모든 단말의 IP를 바인딩을 할 수 없다. 두 피어가 같은 NAT 안에 있거나 Symmetric NAT을 사용할 경우이다. Symmetric NAT는 이전에 연결을 했던 피어만 연결을 허용한다. TURN(Traversal Using Relays around NAT)는 이러한 Symmetric NAT 규정을 우회하기 위해 TURN 서버를 중계 서버로 사용해서 통신을 진행한다. 이러한 방식은 오버헤드를 초래하기 때문에 다른 대안이 없을 시 사용한다.

Candidate

STUN,TURN 서버를 이용해서 획득했던 IP주소와 프로토콜, 포트의 조합으로 구성된 연결 가능한 네트워크 주소들을 Candidate라고 부른다.

다음과 같이 총 3개의 Candidiate를 얻을 수 있다.

자신의 사설 IP와 포트 넘버
자신의 공인 IP와 포트 넘버 (STUN, TURN 서버로부터 획득 가능)
TURN 서버의 IP와 포트 넘버 (TURN 서버로부터 획득 가능)

SDP

SDP(Session Description Protocol)는 WebRTC에서 스트리밍 미디어의 해상도나 형식, 코덱 등의 멀티미디어 컨텐츠의 초기 인수를 설명하기 위해 채택한 프로토콜이다.

이처럼 미디어와 관련된 초기 세팅 정보를 기술하는 SDP는 발행 구독 모델(Pub/Sub)과 유사한 제안 응답 모델(Offer/Answer)을 갖고 있다. 즉, 어떤 피어가 이러한 미디어 스트림을 교환할 것이라고 제안(offer)하면, 상대방으로부터 응답(answer)이 오기를 기다린다. 응답을 받게 되면, 각자의 피어가 수집한 ICE 후보 중에서 최적의 경로를 결정하고 협상하는 프로세스가 발생한다. 수집한 ICE Candidate들로 패킷을 보내 가장 지연 시간이 적고 안정적인 경로를 찾는 것이다. 이렇게 최적의 ICE 후보가 선택되면, 기본적으로 필요한 모든 메타 데이터와 IP 주소 및 포트, 미디어 정보가 피어 간 합의가 완료된다.

SDP exchange가 일어나면 OnIceConnectionChange callback이 호출됨.
RTCDataChannel이 열리면 메세지로 string, byte[] 를 주고 받을 수 있는 때 이때마다 OnMessage callback이 메세지를 받으면 일어난다.

Audio 또는 Video를 추가하려면 MediaStream의 CaptureStream을 이용하고 track을 peer에 추가하여 send하면 된다.

0개의 댓글