CoSMo and Meetecho have been working together for some time as the #webrtc A-Team. So far the contributions described in different blog posts have mainly been on the server-side, with Double-Encryption, VP9 SVC, or more recently better bandwidth management support. This time, we are going to speak about several client software options to connect to Janus Instances that have been just been made available.
Janus WebRTC Server
The Janus Webrtc server, especially equipped with its “video room” plugin, is very popular in the ecosystem. Janus does not reach the capacity of Jitsi Video Bridge for Traditional Video Conferencing use cases. However, the versatility of the server is impressive:
– through its multiple plugins, it can add different behaviours and logic, from SFU to MCU, Gateway, recording, …
– it does not impose any signalling on your application, and it actually implements support for quite a few signalling transports protocols (REST, ws, QMTT, …) out of the box,
– thanks to a C code base, it scales down! like, really! you can have a full server running on a Raspberry Pie, and many other IoT options. NTT Communication has integrated Janus not their IoT SDK!
Client / Server – the WebRTC A-Team Genesys
Very early on, it appeared that Janus was lacking some love on the client side. Clients that would be drawn to Janus because of its versatility, would expect the same kind of versatility on the client side. Hello, we would like to have a client
– that supports double encryption.
– that supports IE explorer on windows 7.
– that supports VP9 SVC, or AV1.
– that supports gaming capture cards with resolutions of 4k @ 60fps.
… and so on and so forth.
All those requests have in common that they require modifications of the C++ internals of libwebrtc, of which CoSMo is not only a recognised expert, but also one of the very very few around. They also have in common to only be possible in native clients or modified browsers. Finally the more clients types you add, the more difficult testing and validating them against each other became. That is, until CoSMo released KITE.
Collaboration was obviously the right move. The A-Team was born.
New clients options for Janus Video Room
Lots of reader of this blog might not know Qt. Qt is a fantastic UI library written fully in C++, and distributed into an acceptably permissive library (L-GPL). For those who want a single language family (Assembly / C / Obj-C / C++ ) for all their code, this is a rationale choice.
Qt was one of those library at the cutting edge of C++ and many features they implemented ended up in the C++ standard, just like Boost. Actually, libwebrtc is using the exact same concept (signal/slot) in an underlying library called sigslot. Unfortunately, it’s so close a copy that it makes integrating Qt with libwebrtc complicated, unless you use the pimpl design pattern which was introduced by … Qt, but that’s a discussion for another time.
Qt has the advantage to compile across Desktop and Mobile applications, with the provided Qt Creator software. It also has a great visual GUI editor.
But the main advantage of Qt, originally developed by Nokia for their phone, is to run on most embedded devices and IoT devices. There again, a perfect fit for Janus.
More details can be found on last year IIT-RTC’s tutorial page.
If you need support or developpement on Qt with webrtc in general or Janus in particular, contact us.
OBS-Studio is what 99% of the people streaming on youtube, twitch, Microsoft’s Mixer, DailyMotion, and many other flash-based streaming services use.
We released a version that also supports webrtc (media, encryption, RTP), and demonstrate it by adding support to stream to a Janus Video Room plugin. In addition to webrtc support, it required adding web socket support for signalling transport, and Janus Video Room signalling API support.
More details can be found on the project page.
If you need support or developpement on OBS-Studio with webrtc in general or Janus in particular, contact us.
No need to present electron. It’s one of the most used alternative to wrap an HTML5 app into a native app. It also allows to shield one against the very fast update cycles of chrome, or maintain modified versions of chrome or node.js to differentiate.
Highfive for example has been enjoying a version of libwebrtc with H264 simulcast for more than a year and a half. While they have provided a patch to google, it is still in review after more than a year, and hadn’t;t they been using electron, they would still be waiting.
Slack mentioned that they went to electron for their native app after finding it too hard to manage libwebrtc standalone. Indeed electron pre-compile libwebrtc and chrome into something they call libchromiumcontent, that is downloaded on the fly for you. If you do not have any modification of libwebrtc, this is indeed faster. For CoSMo, that last point is less desirable. First, compiling and maintaining libwebrtc is not a problem for us, we do that daily. Then, we differentiate by adding features to libwebrtc (double encryption, new codecs, simulcast for H264, ….). Or simply to have the critical-webrtc-bug-free chrome 61 in Electron 1.8.2 which would otherwise use chrome 59:
We have M61 internally, we're good 🙂 A little bit sad that @Symphony did not want to sponsor the effort and release it publicly, but not a blocker for us. pic.twitter.com/iWf3YW6i9d
— Dr. Alex. Gouaillard (@agouaillard) February 28, 2018
If you need support or developpement on Electron with webrtc in general or Janus in particular, contact us.
We hope that our contributions on the client side will help the Janus community to grow, and beyond that, help more people using webrtc in their audio and video applications.
Appendix – CoSMo and #WebRTC Servers
CoSMo has its own WebRTC media Server toolkit, called Meedoze with corresponding SFU and MCU implementations. We are also experts in Jitsi Video Bridge based solutions, used in production today by companies like Symphony. We routinely redefine the limits of what is possible with WebRTC, and publish corresponding results both in scientific peer-reviewed publication and at standard committees.
The above Qt library and client, as well as Electron builds exist in at least three flavours: one that connects to janus video room, one that connects to JVB, and one that connects to Meedoze-based Media Servers. OBS-Studio as a roll down menu that let you choose which service or server you want to connect to.
You will be able to hear more about it at CommConUK in June 2018.