An SFU (Selective Forwarding Unit) receives audio and video streams from every participant in a conference room and relays them to everyone else (endpoints send one and receive many). Compared to a mixer or MCU (Multipoint Control Unit), this design leads to a better performance, higher throughput and less latency. It's highly scalable and requires much less resources given that it does not transcode or mix media.

Since endpoints get the other participants media separately, they can have a personalized layout and choose which streams to render and how to display them.

Detailed information regarding the architecture of an SFU can be found at RFC 7667 “RTP Topologies” section 3.7.

Unlike other existing SFU implementations, mediasoup is not a standalone server but an unopinionated Node.js module which can be integrated into a larger application:

const mediasoup = require("mediasoup");

Thus internally, mediasoup can be splitted into two separete components:

Both components communicate to each other by means of inter-process communication. However, from the point of view of the developer, the application should just care about the JavaScript API exposed by mediasoup.

It's also noticeable the fact that mediasoup does not include or mandate a network signaling protocol (such as SIP or XMPP) but, instead, lets the application developer choose and implement the desired one.


Within your Node.js application:

$ npm install mediasoup --save

Prior to that, ensure your host satisfies the following requirements:

In Debian and Ubuntu install the build-essential package. It includes both make and gcc/g++.

Design goals