Unnamed videoconferencing SFU

(Unnamed SFU) is a videoconferencing server that is very easy to deploy (just copy a few files and run the binary) and that requires moderate server resources. It is suitable for lectures and conferences (where a single speaker streams audio and video to hundreds or thousands of users), and for multi-party discussions (where a few dozen speakers stream audio and video in a full mesh).

Try it out

You are welcome to check out our videoconferencing server.

Installation

Get the source code by doing

git clone https://www.irif.fr/~jch/software/sfu.git
then check the included README.

Features

Server features

The server is reasonably complete:

The following server features are planned but haven't been implemented yet:

I'm less sure about the following features:

Client features

The frontend is now quite usable thanks to the work of Alain Takoudjou :

If you don't like our frontend, it should be easy to roll your own. Human-readable outline. API documentation.

Server scalability

The server is used in production in our department. In typical usage, it is limited by the CPU — memory and network throughput are not usually a problem.

For one-to-many communication (lectures), it currently handles at least 150 participants per core. For many-to-many communication (meetings), the behaviour is quadratic (the server load grows as the square of the number of participants) — expect to be able to handle on the order of 16 participants on one core, 30 on four cores (more if some participants don't switch their camera on).

Security model

(Unnamed SFU) assumes that the server is trusted: all media is decrypted by the server and reencrypted before it is sent to the clients. This is, as far as I know, unavoidable with DTLS-SRTP, the security mechanism used by WebRTC. (Yes, I know about insertable streams.)

On the other hand, since the client is not trusted, any bugs in the client code should not create security issues. Thus, it is reasonable to build user-friendly clients using the unscrutable Javascript frameworks that web developers tend to like.

Note however that I am neither a security specialist nor a competent system administator, and I may have gotten something wrong.

Common questions and known issues

How do I display my slides?

Just pick your favourite PDF reader, scale it to a reasonable size, and share its window using the share screen button. I use µPDF. You may share multiple windows simultaneously (e.g. both a PDF with your slides and a drawing program).

How do I record my lecture?

Make sure allow-recording is set in your group configuration. Log-in as an operator, then say /record before you start your lecture. Don't forget to say /unrecord at the end. You will find your recordings under https://server.example.com/recordings/groupname/.

How do I check whether my microphone works?

Just open the same group in two browser windows. Choose Present in one but not the other. Make sure you are using headphones.

Sound quality is poort

If you sound like you're under water, you are putting too much load on the echo suppressor. This is a problem on the sender side. Please use headphones, or at least reduce your speakers' volume.

If your voice occasionally sounds robotic, then you're suffering from more packet loss than the loss concealement algorithm can handle. This could be a problem on the sender side, on the receiver side, or both. Please use a wired connection, or at least avoid having a bearing wall between you and your access point.

How do I use two cameras simultaneously?

Open the same group in a two browser windows. Select your second camera in one of the two windows, disable the microphone, and choose Receive: nothing.

What does the Blackboard mode do?

It increases the resolution and attempts to preserve detail at the cost of framerate. Your blackboard will be legible, but your movements might become choppy.

What does the Studio mode do?

It attempts to preserve audio quality at the cost of disabling noise and echo suppression. It also attempts to reduce audio latency at the cost of slightly higher network load. Use it with headphones, in a quiet environment, and avoid touching the microphone (or the laptop itself, if the microphone is built-in).

Activity detection doesn't work on Firefox

Activity detection relies on the totalAudioEnergy statistic, which is not implemented in Firefox. Sorry.