If you are visiting this blog, hope that you are already familiar with WebRTC. This would be more into the use cases of WebRTC. Especially our experience with open source WebRTC libraries and tools. We'll discuss setting up, bringing them to production, pros and cons.

This guide would be useful if you are,

  1. Not willing to use proprietary libraries or third party APIs for your WebRTC application
  2. Want to build your own WebRTC infrastructure
  3. Heavily consuming cloud infrastructure

Meetrix.IO provides professional services for webRTC. If you are looking for a service regarding any of the following libraries, please shoot an email to hello@meetrix.io

Use Cases

These are some use cases that we have experienced with and this guide is mainly written with that experience.

  1. Online Tutoring
  2. Online Interviewing
  3. Video Conferencing with SIP integration
  4. Tele-Medicine
  5. Remote Expert Support
  6. Real-Time Object Recognition

Comparison

Here is the list of the tools and libraries that we are going to discuss and a comparison about their features.

  Mode Web UI Mobile APP JS Library Mobile SDK Serverside Recording Horizontal Scalability (out of the box)
Jitsi SFU yes yes yes yes yes yes
Janus SFU x x yes yes yes x
Kurento SFU/MCU yes yes yes yes yes x
Mediasoup SFU x x yes x yes x
Medooze SFU/MCU x x yes yes yes x

Jitsi

Jitsi is a mature, open-source and complete web-based conferencing system. Jitsi consists of Jitsi Video Bridge (JVB), Jitsi Conference Focus(Jicofo) and Prosody as the default XMPP signalling and message passing component. Backend is written in Java and the front-end is written in react. Jitsi also has native apps built with react-bative and high level SDKs for Android and IOS. Jitsi Video Bridge (JVB) , which is a Selective Forwarding Unit (SFU), is the media server component and the core of Jitsi Meet.

You can easily setup a demo Jitsi Meet on AWS even with a t2 micro instance (with 1Gig Memory and 1 VCPU).

Considering the built in UI, horizontal scalability and the amazing community behind Jitsi, if you are looking for an out of the box video conferencing solution, Jitsi is the way to go. If you want to build a custom video conferencing solution using Jitsi, that can be achieved using lib-jitsi-meet low level JavaScript library or using Jitsi Videobridge API. But if you are planning to customise a lot, you might want to consider other solutions as well.

Kurento

Kurento is one of the popular and well-designed media servers that can be configured either as an MCU or SFU. Although the project went silent after the Kurento Team was acquired by Twilo, still it is still one of our favourites. Since MCU mixes up the video/audio streams of the participants to create a composite video stream (if you configure Kurento as an MCU), you have to make sure you have enough computing power when the number of participants increases. When configured to act as an MCU, each participant will be uploading a single video stream, and will be receiving a single mixed video stream from Kurento Media Server. Despite the CPU requirement, it has the advantage of low bandwidth consumption. Kurento Media Server is written in C++ and it exposes a control API. There are a bunch of SDKs and sample apps built by the Kurento Team for Java , NodeJs and JavaScript. But some of these repositories are not well documented. One of the most interesting things with Kurento is it's modular architecture. For example you can apply different filters and plugins (say OpenCV plugins) for video streams.

Mediasoup

Mediasoup is a relatively new media server that gained traction recently. The coolest thing about MediaSoup is it's ability to be used as a NodeJS package or a Rust crate. This has been developed by a well-known developer in WebRTC echosystem who also developed JSSIP. Mediasoup is written in C++ and exposes a low-level Node API to control the media layer. It supports TypeDefs as well. API is well documented, there are enough examples and the community is active and helpful. Restream and Gather are some of the commercial users of Mediasoup.

Medooze

Medooze is a C++ media server that can be used in NodeJS and GoLang. It is quite similar to MediaSoup, but the ability to be configured as a MCU differentiates it from Mediasoup. Medooze has been acquired by Cosmos who is another key player in WebRTC. Initially, some of the APIs were not well documented and this could have been the reason for it not being popular among developers. But, recently it has become a rising start.

Updated:

Leave a Comment