WebRTC Overview
WebRTC(Web Real Time Communication)이란
- 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고, 스트림 등의 임의 데이터를 교환할 수 있도록하는 기술
- 제 3자 소프트웨어 설치 없이 종단 간 데이터 공유와 화상 회의를 가능하게 한다
WebRTC 사용법
- RTCPeerConnection : 두 피어 간의 커넥션을 위한 인터 페이스
- 커넥션이 열리면 미디어 스트림/데이터 채널들울 커넥션에 연결할 수 있다.
- 시그널링을 하는 이유는 RTCPeerConnection에 사용할 정보를 얻기 위함
- 프로토콜,채널,코덱 및 형식, 데이터 전송 방법 등등
- MediaStreamTrack : 미디어 스트림 정보를 다루는 인터페이스
- Object로 음성,영상,텍스트를 포함하는 다양한 미디어 데이터를 포함시켜 전달한다
- 시그널링이 끝난 이후 미디어 스트림을 생성한다
WebRTC 통신 원리(P2P 통신)
- 브라우저는 웹 서버가 아니어서 외부에서 접근할 수 있는 주소가 없다
- 즉 통신 설정 초기 단계에서는 중재자의 역할이 필요하다 (2-3번 단계)
- 각 브라우저가 P2P 커뮤니케이션에 동의
- 서로의 주소를 공유
- 보안 사항 및 방화벽 우회
- 멀티미디어 데이터를 실시간 교환
방화벽과 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(Interactive Connecitivity Establishment)
- 요약하자면, ICE 프레임워크가 STUN 서버를 이용해 상대방과 연결 가능한 후보들을 가진다
- 즉 적어도 통신을 위한 주소만큼은 확실하게 알아낸 것이다.
SDP(Session Description Protocol)
- 주소를 알아냈으니 이제 미디어와 그 관련 정보를 교환해야한다.
- SDP는 WebRTC에서 스르리밍 미디어의 해상도/형식/코덱 등의 멀티미디어 컨텐츠의 초기 인수를 설명하기 위해 채택한 프로토콜이다
- 인수란 해상도,오디오 전송, 수신 여부 등을 예로 들 수 있다
제안/응답제안/수락 모델의 형태를 가진다- 어떤 피어가 미디어 스트림을 교환할 것이라고 제안을 하면 상대방으로부터 응답이 오기를 기다린다
- 응답을 받는 다면, 피어가 수집한 ICE 후보 중 최적의 경로를 결정한다
- 즉 기본적으로 필요한 모든 메타 데이터와 IP 주소 및 포트, 미디어 정보 간 합의가 완료된다
- 이 과정을 통해 피어 간의 P2P 연결이 완전히 설정되고 활성화 된다
- 각 피어에 의해 로컬 데이터 스트림의 엔드포인트가 생성되고 양방향으로 전달된다.
한계
- 브라우저 간의 호환성
- 구글 오픈 소스 프로젝트라서 adapter 없이는 다양한 브라우저의 호환성 장담 x
- 시그널링 서버에 대한 명시적인 표준이 없다
- UDP 위에서 동작하여 데이터 손실 문제 발생
Reference
WebRTC를 공부하며 스트리밍 과정 익히기
초보 개발자 WebRTC 시동걸기
초보개발자 WebRTC 시그널링서버 만들기
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Backend' 카테고리의 다른 글
WebRTC Signaling 프로세스 - 기초 (0) | 2023.03.01 |
---|---|
Webrtc 통신 방법 (0) | 2023.02.28 |
fastify - Property 'view' does not exist on type (0) | 2023.02.27 |
Kurento 미디어 서버 typescript에 설치하는 방법 (0) | 2023.02.25 |
ICE - WebRTC Peer 연결 프로토콜 (0) | 2023.02.24 |