[Kotlin] WebRTC를 이용한 안드로이드 어플리케이션 내 멀티 음성 통화 기능 구현 (1) - 개념 및 요구 사항 정의

괄괄이·2024년 4월 25일
0

WebRTC with Kotlin

목록 보기
1/4

이번 프로젝트에서 음성 통화를 하며 함께 공동 작업을 하는 필기 App을 만들기로 했고, 그 중 음성 통화 기능 구현을 담당하게 되었다.


🔊 WebRTC?

WebRTC(Web Real-Time Communication)은 웹 애플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술

🔉 프로젝트 내 필요한 구현 정도는?

우리 프로젝트는 최대 6명의 인원이 참가할 수 있는 N:M 음성 통화 방이 필요하다. 사용자의 영상 정보는 필요 없으며 오디오 데이터를 실시간으로 전송해야 한다.

WebRTC 서버 구조 3가지

  1. Mesh(P2P) : 클라이언트끼리 peer 연결을 맺어 signaling 정보를 주고 받는다. 서버의 부하가 적지만 클라이언트의 수가 늘어나면 과부하가 급격하게 증가한다. 대개 4명 이하의 그룹에 효과적이다.

  2. MCU: 각 peer가 1개의 DownStream과 UpStream을 가진다. 각 peer가 데이터를 서버로 보내면 미디어 서버에서 가공하여 1개의 UpStream으로 보낸다. 세 방식 중 클라이언트이 부하가 가장 적지만 실시간성이 저해된다.

  3. SFU: 중앙 서버 방식으로 클라이언트 간의 연결이 아니라 서버와 클라이언트 간 peer를 연결한다. 클라이언트가 모든 다른 사람에게 데이터를 보낼 필요 없이 서버에만 데이터를 보낸다. UpStream이 1개고, N개의 DownStream이 존재해 부하가 조금 있고, 별도의 미디어 서버가 필요하다.

N:M(최대 6인) 통화 구현을 위해 SFU가 적합하다고 생각한다.


백엔드 팀원과 의논 후, SFU 서버를 백엔드에서 구축해주기로 했다. 그 전까지 P2P 구조를 통해 WebRTC 기능을 구현하고 코드를 탐색할 계획이다.

필요한 서버
1. SFU 미디어 서버: 실시간 통신에서 필요한 미디어 스트림만 클라이언트에 전송하고, 스트림/방 관리를 하는 서버 
2. Signalling 서버: Stun, Turn을 이용하게 해 줄 서버로 node.js나 JAVA SpringBoot를 이용한다 

SFU 서버의 구축은?

오픈 소스 라이브러리 MediaSoup 또는 Janus를 이용한다.

[MediaSoup]

[Janus]

최근 1년 사이 mediasoup가 더 많이 쓰이고 업데이트 되었다. 하지만 실제 github fork 수는 janus가 2K이상 많고, 둘 다 커뮤니티 규모가 비슷하게 큰 편이며 프로젝트 상 필요한 기능(음성 통화, 동시 편집을 위한 데이터 채널링)을 모두 제공한다.

0개의 댓글