If you are visiting this blog, hope that you are already familiar with WebRTC. This would be more in to the use cases of WebRTC. Especially our experience with open source WebRTC libraries and tools. We'll discuss about 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
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 MCU 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 with Jitsi Video Bridge (JVB), Jitsi Conference Focus(Jicofo) and Prosody as default XMPP signaling 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 planing to customize 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 has been acquired by Twilo, still it's one of our favorites. 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 of 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 bunch of SDKs and samples apps built by 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 trackion recently. The coolest thing about MediaSoup is it's ability to being used as s NodeJS package or a Rust crate. This has been developed by a well-known developers in WebRTC echosystem who also developed JSSIP. Mediasoup is written in C++ and exposes a low-leve 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's quite similar to MediaSoup, but the abitlity to be configured as a MCU diffrentiates it from Mediasoup. Medooze has been aquired by Cosmos who is anothe key player in WebRTC. Initially, some of the APIs were not well documented and this could have been the reason for it to not being popular among developrs. But, recently it has become a rising start.

Updated:

Leave a Comment