WebRTC를 이용하는 [ConCoder] 프로젝트에서 Mesh 대신 SFU 서버 구조를 적용하기 위해 WebRTC 라이브러리인 OpenVidu를 공부하였다.
OpenVidu를 공부하면서 동작 구조나 특징에 대해 정리해보고자 한다.
Session
을 생성Session
은 참가자들이 들어올 수 있는 가상의 방을 의미Session
에 참가하는 사람이 생길때마다 Connection
(슬롯)을 하나 생성한다.Connection
은 Token
을 가지고 있다.Token
을 클라이언트에게 전달한다.Token
을 사용하여 Session
에 연결한다.Session
에 연결한 뒤, 참가자는 WebRTC를 통해 Stream
을 publish 및 subscribe할 수 있다.OpenVidu CE(무료)는 미디어 라우팅을 위한 미디어 서버로 Kurento만 사용할 수 있고, OpenVidu Enterprise(유료)부터 미디어 서버로 무엇을 사용할지 Kurento와 Mediasoup 중에서 선택할 수 있다.
평균적으로 Mediasoup가 Kurento보다 가볍고 빠르다고 한다.
대신 kurento는 오디오와 비디오에 필터를 거는 등 미디어의 가공이 가능하다.
단순히 무작정 OpenVidu를 적용하여 SFU 구조를 개발하는 것은 좋지 않다고 본다.
본 프로젝트(ConCoder)에 적용하기 위해서는 현재 개발 상황을 정리해보고, 어떤 trade-off 관계가 있는지 파악할 필요가 있다. 그리고 가치 판단하에 더 이득이 있는 방향으로 개발 진행 계획을 세워야 한다.
우리는 다음과 같은 Discussion topic이 있었고, SFU 서버 구조 적용이 그만한 가치가 있는 일인지부터 토론해보았다. (OpenVidu 공부를 하면서 생각보다 비용이 많이 발생할 것으로 판단되었기 때문)
토의 결과 '일단 OpenVidu로 빠르게 기능 구현 후, 품질 향상을 위한 Mediasoup 개발은 추후 진행'하기로 결정하였다.