DEV/Backend

WebRTC Overview

Beomsu Koh 2023. 2. 28.

WebRTC Overview

WebRTC(Web Real Time Communication)이란

  • 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고, 스트림 등의 임의 데이터를 교환할 수 있도록하는 기술
  • 제 3자 소프트웨어 설치 없이 종단 간 데이터 공유와 화상 회의를 가능하게 한다

WebRTC 사용법

  • RTCPeerConnection : 두 피어 간의 커넥션을 위한 인터 페이스
    • 커넥션이 열리면 미디어 스트림/데이터 채널들울 커넥션에 연결할 수 있다.
    • 시그널링을 하는 이유는 RTCPeerConnection에 사용할 정보를 얻기 위함
      • 프로토콜,채널,코덱 및 형식, 데이터 전송 방법 등등
  • MediaStreamTrack : 미디어 스트림 정보를 다루는 인터페이스
    • Object로 음성,영상,텍스트를 포함하는 다양한 미디어 데이터를 포함시켜 전달한다
    • 시그널링이 끝난 이후 미디어 스트림을 생성한다

WebRTC 통신 원리(P2P 통신)

  • 브라우저는 웹 서버가 아니어서 외부에서 접근할 수 있는 주소가 없다
    • 즉 통신 설정 초기 단계에서는 중재자의 역할이 필요하다 (2-3번 단계)
  1. 각 브라우저가 P2P 커뮤니케이션에 동의
  2. 서로의 주소를 공유
  3. 보안 사항 및 방화벽 우회
  4. 멀티미디어 데이터를 실시간 교환

방화벽과 NAT 트래버셜

  • WebRTC에서 직접 P2P 연결을 하기 위해 방화벽 우회를 해야한다!
    • 이를 위해 필요한 것이 NAT Traversal이다.
  • NAT Traversal
    • 라우터의 방화벽을 통과해서 연결하는 방법을 찾는 과정
    • 일반적으로 컴퓨터에는 공인 IP가 할당되어 있지 않음
      • DHCP 또는 NAT을 사용하기 때문이다.
      • 단순 공인 IP를 알아낸다고 해서 특정 사용자를 찾을 수 없음
  • STUN(Session Traversal utilities for NAT)
    • 단말이 자신의 공인 IP 주소와 포트를 확인하는 과정에 대한 프로토콜이다
    • 인터넷의 많은 주소들 중 유일하게 자기 자신을 식별할 수 있는 정보를 반환한다
    • WebRTC 연결 시작 전 STUN 서버를 향해 요청을 보내면, Peer들이 서로 연결할 수 있도록 공인 IP와 포트를 찾아준다

ICE과 Candidate

  • Candidate
    • STUN/TURN 서버를 이용해서 획득했던 IP 주소와 프로토콜, 포트의 조합으로 구성된 연결 가능한 네트워크 주소들
    • 보통 3개의 주소를 얻게 된다
      • 자신의 사설 IP와 포트 넘버
      • 자신의 공인 IP와 포트 넘버(STUN,TURN)
      • TURN 서버의 IP와 포트 넘버(TURN)
  • 보통은 Candidate를 얻는 과정은 ICE라는 프레임 워크 위에서 이루어진다.
    • ICE(Interactive Connecitivity Establishment)
      • 두 단말이 P2P 연결을 가능하게 하도록 최적의 경로를 찾아주는 프레임 워크
  • 요약하자면, ICE 프레임워크가 STUN 서버를 이용해 상대방과 연결 가능한 후보들을 가진다
    • 즉 적어도 통신을 위한 주소만큼은 확실하게 알아낸 것이다.

SDP(Session Description Protocol)

  • 주소를 알아냈으니 이제 미디어와 그 관련 정보를 교환해야한다.
  • SDP는 WebRTC에서 스르리밍 미디어의 해상도/형식/코덱 등의 멀티미디어 컨텐츠의 초기 인수를 설명하기 위해 채택한 프로토콜이다
    • 인수란 해상도,오디오 전송, 수신 여부 등을 예로 들 수 있다
  • 제안/응답 제안/수락 모델의 형태를 가진다
    • 어떤 피어가 미디어 스트림을 교환할 것이라고 제안을 하면 상대방으로부터 응답이 오기를 기다린다
    • 응답을 받는 다면, 피어가 수집한 ICE 후보 중 최적의 경로를 결정한다
    • 즉 기본적으로 필요한 모든 메타 데이터와 IP 주소 및 포트, 미디어 정보 간 합의가 완료된다
    • 이 과정을 통해 피어 간의 P2P 연결이 완전히 설정되고 활성화 된다
    • 각 피어에 의해 로컬 데이터 스트림의 엔드포인트가 생성되고 양방향으로 전달된다.

한계

  1. 브라우저 간의 호환성
    1. 구글 오픈 소스 프로젝트라서 adapter 없이는 다양한 브라우저의 호환성 장담 x
  2. 시그널링 서버에 대한 명시적인 표준이 없다
  3. UDP 위에서 동작하여 데이터 손실 문제 발생

Reference

WebRTC를 공부하며 스트리밍 과정 익히기
초보 개발자 WebRTC 시동걸기
초보개발자 WebRTC 시그널링서버 만들기

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

댓글