WebRTC 개발에 사용되는 서버 컴포넌트
- Application Server: 만드는 프로그램에서 사용하는 서버, WebRTC와 직접적인 연관성은 없다.
- Signaling Server: 유저간 통신을 연결하는 데 사용된다. (WebRTC는 자체적인 Signaling Protocol을 소유하지 않음)
- TURN (and STUN) servers: 방화벽이나 NAT을 통해 미디어를 라우팅하기 위해 사용된다.
- WebRTC media servers: WebRTC 미디어 패킷을 인프라 구조에서 처리하고 전송하기 위해 사용된다.
Media Server의 역할과 Mesh
백엔드 인프라를 통해 미디어 패킷을 전송하는 역할을 한다.
만약 여러 명의 유저가 함께 P2P연결을 해야 한다고 가정해보자. 미디어 서버가 없이 구현을 한다면 Mesh 형태의 구현을 하게 된다. 모든 유저의 영상을 받고, 자신의 영상을 모든 유저에게 보내야 한다.
각각의 유저가 영상을 인코딩/암호화 과정을 거치거나 UDP를 실시간으로 이용한다고 생각해보자.
혹은 1mbps의 대역폭에 제한을 둬야 한다면? 만약 더 많은 인원간 소통해야 한다면?
Mesh 형태는 사실상 대규모의 연결에서 사용할 수 없다.
클라이언트 사이에 '미디어 서버'를 둔다면 얻을 수 있는 이점들
1. 클라이언트가 각 클라이언트에게 미디어 스트림 정보를 보내지 않아도 된다.
2. 클라이언트가 Bandwidth Estimation을 처리할 수 있다.
3. 미디어 서버 측에서 모든 클라이언트에서 사용 가능한 제약 조건 알고 모든 동작을 관리한다.
Bandwidth Estimation란?
IP 네트워크에서 처리되는 프로토콜은 가능한 대역폭에 대한 보장을 하지 않으며 세션에 따라 대역폭이 변경될 수 있다.
이를 위해 대역폭 추정 기술을 사용하여 사용 가능한 대역폭을 정한다. (더 적거나 그 이상 사용하지 않도록 처리하는 기술)
WebRTC 미디어 서버는 클라이언트 혼자 처리할 수 없는 아키텍처의 문제를 해결한다.
SFU(Selective Forwading Unit)
가장 일반적이고 인기있는 WebRTC 미디어 서버이다. 장치간 미디어를 라우팅하며, 미디어 처리 부분에 대해서는 가능한 적게 처리한다.
클라이언트의 레이아웃 및 디스플레이 의사결정에 대한 부하를 줄여주어 다른 대안보다 더 높은 유연성을 가진다.
또한 동작하는 기기의 가용성에 맞는 라우팅 로직과 대역폭을 관리한다.
이를 위해 bandwidth estimation, simulcase, SVC 기술을 이용한다.
초기에는 그룹 통화에 사용되다가, 라이브 스트리밍이나 방송에 사용되기 시작했다.
MCU(Multipoint Control Unit)
MCU는 WebRTC 전에 소개된 기술이다. 이전 Telephony 시스템은 MCU를 기반으로 개발되었다.
비디오 화상 회의 시스템은 영상 압축을 위해 전문화된 하드웨어 기기가 필요했으며,
클라이언트의 CPU를 너무 많이 쓰는 문제가 있었다.
MCU는 미디어 스트림 정보를 클라이언트에게 받아 믹싱하고 하나의 미디어 스트림을 클라이언트에게 보낸다.
MCU는 마치 두 참여자 사이에 있는 것처럼 행동하는데, 클라이언트가 유일하게 상호작용하는 객체가 된다.
클라이언트는 수많은 참여자들 사이에서도 하나의 스트림만 받는다. (모든 입력을 받아 하나로 합치는 방식)
MCU는 CPU의 사용률이 매우 높으며 SFU 방식에 비해 비싸다.
Hybrid Media Server
라우팅과 프로세싱을 한번에 처리 하는 개념이다. 각 미디어 서버 유형에 필요에 따라 적절하게 처리한다.
WebRTC 활용 분야
WebRTC는 주로 1:1, 1:N, N:N의 통신을 지원하는 서비스에서 활용된다.
1:N의 경우, 한 명의 스트리머가 다수의 사용자에게 영상을 보내는 서비스 등에서 활용된다.
N:N의 경우, 다수의 사용자가 함께 소통하는 상황에서 사용된다.
참고 자료
https://bloggeek.me/webrtc-media-server/
https://bloggeek.me/webrtcglossary/bwe/
https://tech.kakaoenterprise.com/121
'프로그래밍 > WebRTC' 카테고리의 다른 글
[WebRTC] SFU 서버 구현 (1) | 2023.09.19 |
---|---|
[WebRTC] 1:N Peer To Peer 연결 구현 (0) | 2023.09.16 |
[WebRTC] WebRTC 기본 개념과 Peer to Peer (0) | 2023.09.16 |
WebSocket과 Socket.io 차이 (0) | 2023.09.10 |
[WebRTC] Real time communication with WebRTC 3 (0) | 2022.06.10 |
댓글