Kurento or Jitsi; Kurento vs Jitsi – is the the ultimate head to head comparison for open source media servers in WebRTC?
Yes and no. And if you want an easy answer of “Kurento is the way to go” or “Jitsi will solve all of your headaches” then you’ve come to the wrong place. As with everything else here, the answer depends a lot on what it is you are trying to achieve.
Since this is something that get raised quite often these days by the people I chat with, I decided to share my views here. To do that, the best way I know is to start by explaining how I compartmentalized these two projects in my mind:
The acquisition of the Jitsi Videobridge serves Atlassian in two ways:
- Integrating Jitsi Videobridge into HipChat while owning the technology (it took the better part of the last 18 months)
- Showing some open source love – they did change the license of Jitsi from LGPL to APL
Here’s the intro of Jitsi from its github page:
Jitsi Videobridge is an XMPP server component that allows for multiuser video communication. Unlike the expensive dedicated hardware videobridges, Jitsi Videobridge does not mix the video channels into a composite video stream, but only relays the received video channels to all call participants. Therefore, while it does need to run on a server with good network bandwidth, CPU horsepower is not that critical for performance.
I emphasized the important parts for you. Here’s what they mean:
- XMPP server component – a decision was made as to the signaling of Jitsi. It was made years ago, where the idea was to “compete” head-to-head with Google Hangouts. So the choice was made to use XMPP signaling. This means that if you need/want/desire anything else, you are in for a world of pain – doable, but not fun
- does not mix the video channels – it doesn’t look into the media at all or can process raw video in any way
- only relays the received video – it is an SFU
Put simply – Jitsi is an SFU with XMPP signaling.
If this is what you’re looking for then this baby is for you. If you don’t want/need an SFU or have other signaling protocol, better start elsewhere.
You can find outsourcing vendors who are happy to use Jitsi and have it customized or integrated to your use case.
Kurento is a kind of an media server framework. This too is an open source one, but one that is maintained by Kurento Technologies.
With Kurento you can essentially build whatever you want when it comes to backend media processing: SFU, MCU, recording, transcoding, gateway, etc.
This is an advantage and a disadvantage.
An advantage because it means you can practically use it for any type of use case you have.
A disadvantage because there’s more work to be done with it than something that is single purpose and focused.
Kurento has its own set of vendors who are happy to support, customize and integrate it for you, one of which are the actual authors and maintainers of the Kurento code base.
Which one’s for you? Kurento or Jitsi?
Both frameworks are very popular, with each having at the very least 10’s of independent installations and integrations done on top of them and running in production services.
Kurento or Jitsi? Kurento or Jitsi? Not always an easy choice, but here’s where I draw the line:
If what you need is a pure SFU with XMPP on top, then go with Jitsi. Or find some other “out of the box” SFU that you like.
If what you need is more complex, or necessitates more integration points, then you are probably better off using Kurento.
What about Janus?
Janus is… somewhat tougher to explain.
Their website states that it is a “general purpose WebRTC Gateway”. So in my mind it will mostly fit into the role of a WebRTC-SIP gateway.
That said, I’ve seen more than a single vendor using it in totally other ways – anything from an SFU to an IOT gateway.
I need to see more evidence of use cases where production services end up using it for multiparty as opposed to a gateway component to suggest it as a solid alternative.
Oh – and there are other frameworks out there as well – open source or commercial.
Where can I learn more?
Multiparty and server components are a small part of what is needed when going about building a WebRTC infrastructure for a communication service.
In the past few months, I’ve noticed a growing requests in challenges and misunderstandings of how and what WebRTC really is. People tend to focus on the obvious side of the browser APIs that WebRTC has, and forget to think about the backend infrastructure for it – something that is just as important, if not more.
It is why I’ve decided to launch an online WebRTC Architecture course that tackles these types of questions.