News from Industry

Microsoft Teams, Direct Routing and SBCs (pt.1)

webrtc.is - Tue, 05/26/2020 - 00:08

My journey creating a scalable SBC as a Service for Microsoft Teams Direct Routing is over at Snapsonic.com.

Surviving WebRTC CPU requirements in large group calls

bloggeek - Mon, 05/25/2020 - 12:30

Enabling large group video calls in WebRTC is possible, but requires effort. WebRTC CPU consumption requires optimizations and that means making use of a lot of different techniques.

Cramming more users in a single WebRTC call is something I’ve been addressing here for quite some time.

The pandemic around us gave rise to the use and adoption of video conferencing everywhere. Even if this does slow down eventually, we’ve fast forwarded a few years at the very least in how people are going to use this technology.

It all started with a Gallery View

What’s interesting to see is how requirements and feature sets have changed throughout the years when it comes to video conferencing. When I first joined RADVISION, the leading screen layout of a video conference was something like this:

It had multiple names at the time, though today we refer to it mainly as gallery view (because, well… that’s how Zoom calls it).

Somehow, everyone was razor focused on this. Cramming as many people as possible into a single screen. Some of it is because we didn’t know better as an industry at the time. The rest is because video conferencing was a thing done between meeting rooms with large displays.

It also fit rather well with the centralized nature of the MCU, who ruled video conferencing.

Enter Speaker View

At some point in time, we all shifted towards the speaker view (name again, courtesy of Zoom):

There were a few vendors who implemented this, but I think Google Hangouts made it popular. It was the only layout they had available (up until last month), and it was well suited for the SFU technology they used. It also made a lot of sense since Hangouts took place in laptops and desktops and not inside meeting rooms.

With an SFU, we reduce the CPU load of the server by offloading that work to the user devices. At the same time, we increase our demand from the devices.

Hello 2020

Then 2020 happened.

With it came social distancing, quarantines and boredom. For companies this meant that there was a need for townhall meetings for an office, done on a regular interval, just to keep employees engaged. Larger meetings between room meetings because even larger still as everyone started joining them from home.

The context of many calls went from trying to get things done to get connected and providing the shared goals and values that are easier to achieve within the office space. This in turn, got us back to the gallery view.

Oh… and it also made 20+ user meetings a lot more common.

3 reasons why WebRTC is a CPU hog

The starting point is challenging with WebRTC CPU use when it comes to video calling. WebRTC has 3 things going against it at the get go already:

#1 – Video takes up a lot of pixels

1080p@30fps is challenging. And 720p isn’t a walk in the park either.

The amount of pixels to process to encode 1080p?

62 million pixels every second… I can’t count that fast

You need to encode and decode all that, and if you have multiple users in the same call, the number of pixels is going to grow – at least if you’re naive in your solution’s implementation.

What does this all boils down to? WebRTC CPU use will go over the roof, especially as more users are added into that group video call of yours.

#2 – Hardware acceleration isn’t always available

Without hardware acceleration, WebRTC CPU use will be high. Hardware acceleration will alleviate the pain somewhat.

Deciding to use H.264?

  • Certain optimizations won’t be available for you in group calling scenarios
  • And on devices without direct access to H.264 (some Android devices), you’ll need to use software implementations. It also means dealing with royalty payments on that software implementation

Going with VP8?

  • Hardware acceleration for it isn’t available everywhere
  • Or more accurately, there’s almost no hardware acceleration available for it

What about VP9?

  • Takes up more CPU than H.264 or VP8
  • You won’t find it in Safari
  • Not many are using it, which is a challenge as well
  • Hardware acceleration also a challenge

So all these pixels? Software needs to handle them in many (or all) cases.

#3 – It is general purpose

WebRTC is general purpose. It is a set of APIs in HTML that browsers implement.

These browsers have no clue about your use case, so they are not optimizing for it. They optimize for the greater good of humanity (and for Google’s own use cases when it comes to Chrome).

Implementing a large scale video conference scenario can be done in a lot of different ways. The architecture you pick will greatly affect quality but also the approach you’ll need to take towards optimization. This selection isn’t something that a browser is aware of or even the infrastructure you decide to use if we go with a CPaaS vendor.

And it all boils down to this simple graph:

Complexity vs group size in WebRTC conference calls

The bigger the meeting size, the more WebRTC CPU becomes a challenge and the harder you need to work to optimize your implementation for it.

Why now?

I’ve been helping out a client last month. He said something interesting –

“We probably had this issue and users complained. Now we have 100x the users, so we hear their complaints a lot more”

We are using video more than ever. It isn’t a “nice to have” kind of a thing – it is the main dish. And as such, we are finding out that WebRTC CPU (which people always complained about) is becoming a real issue. Especially in larger meetings.

Even Google are investing more effort in it than they used to:

@googlechrome 83 is now in beta with interesting changes to the video compositor. It should free up some CPU cycles when using @webrtc apps such as @whereby @confrere_video and #GoogleMeet

— Serge Lachapelle (@slac) April 17, 2020 3 areas to focus on to improve performance in group video conferences

Here are 3 areas you should invest time in to reduce the CPU use of your group video application:

#1 – Layout vs simulcast

Simulcast is great – if used correctly.

It allows the SFU to send different levels of quality to different users in a conference.

How is that decision made?

  • Based on available bandwidth in the downlink towards each participant
  • The performance of the device (no need to shove too much down a device’s throat and choke him with more data that it can decode)
  • The actual frame resolution of where that video should appear
  • How much is that video important for the overall session

Think about it. And see where you can shave off on the bitrates. The lower the total bitrate a device needs to deal with when it has to encode or decode – the lower the CPU use will be.

#2 – Not everyone’s talking

Large conferences have certain dynamics. Not everyone is going to speak his mind. A few will be dominant, some will voice an opinion here and there and the rest will listen in.

Can you mute the participants not speaking? Is there an elegant way for you to do it in your application without sacrificing the user experience?

There are different ways to handle this. Anything from a dominant speaker, through the use of DTX towards automatic muting and unmuting of certain users.

#3 – UI implementation

How you implemented your UI will affect performance.

The way you use CSS, HTML and your JS code will eat up the CPU without even dealing with audio or video processing.

Look at things like the events you process. Try not to run too much logic that ends up changing UI elements every 100 milliseconds of time or less on each media track – you’re going to have a lot of these taking place.

My eBook on the topic is now available

If you are interested in how to further optimize for video conference sizes, then I just published an eBook about it called Optimizing Group Calling in WebRTC. It includes a lot more details and suggestions on the above 3 areas of focus as well as a bunch of other optimization techniques that I am sure you’ll find very useful.

The post Surviving WebRTC CPU requirements in large group calls appeared first on BlogGeek.me.

How to know if an open source WebRTC media server is kept up to date?

bloggeek - Mon, 05/18/2020 - 12:00

If you are going to start a WebRTC project that requires a media server, you better be sure you know how frequently as well as when was the last time the code got updated.

A WebRTC media server is a type of server that is required to build applications that offer group calling capabilities among other things. There are other types of WebRTC servers that are needed, but this is not the place or time to discuss them.

Rising interest in WebRTC media servers

Here’s a discussion I had multiple times in the last month: People asking about this or that WebRTC media server or project, wanting to know if they should adopt it for their own application.

This rise stems from the increased interest in video conferencing due to the pandemic. Video has shown its usefulness in the biggest possible way. We’re all stuck at home, and the only way to communicate is by “calling”. Video adds context and meaning to voice only calling so it is becoming widespread.

In some cases, as in India, the government decided to put out funding for a video conferencing challenge, where vendors are invited to build applications for the local market. In others, remote-something is becoming a thing where the existing generic solutions don’t cut it (there are many such verticals).

As it so happens, a lot of teams are now trying to figure out which open source WebRTC media server they should pick and use.

There’s an article I wrote almost 3 years ago on 10 Tips for Choosing the Right WebRTC Open Source Media Server Framework. I took the time today to update it as well as the selection worksheet in it.

One thing that developers seem to miss is how easy it is to understand the freshness of the code – how up to date a WebRTC media server code really is.

So here we go.

How do the most popular WebRTC media servers compare to each other?

What I like doing is using the insights feature in github. It gives a nice initial perspective of a project besides the popularity metrics of watches, starts and forks (they are nice, but just to get me interested – not it making an opinion).

For that purpose, I like looking at the Pulse, Contributors and Code frequency metrics provided by github.

Doing such a check is useless without context. And context is built by looking at alternatives. In this case,  I decided to look at some of the most popular WebRTC media server alternatives out there: Janus, Jitsi, Kurento and mediasoup

Why these 4? Because they are mentioned in almost every conversation I have about open source WebRTC media servers.

Some of these projects are built out of multiple github repositories. For the purpose of this comparison, I tried looking at the main repo holding the media server itself. Here’s the ones I’ve used for each:

Pulse

The github pulse lists recent activity of the project. I’ve looked at a period of 1 month here on all 4 projects to get the following picture:

JanusJitsiKurentomediasoupAuthors141014Total commits7635842Files65569514Additions3,1522,0912922,670Deletions3631,8622141,993

A few thoughts:

  • Jitsi and mediasoup seem to be doing a lot of code optimizations based on the ratio between additions and deletions
  • Janus had a lot of additions versus deletions, so a lot of new code this past month?
  • All projects are skewed towards a single developer at their core. Jitsi skewed towards two main developers
  • Kurento is way behind the others
  • mediasoup seem to have a smaller community of active contributors around it (it is the youngest of these projects)
Contributors

The github contributors view gives us a nice time perspective of these projects, with a focus on who are the main contributors over time.

A few thoughts:

  • Activity in Janus has been stable over time, but leans heavily on a single developer, Lorenzo Miniero
  • For Jitsi, activity is leaning on 3 developers, 2 of whom have been with the project for a very long time
  • Kurento’s activity fell since the acquisition by Twilio and never really recuperated. Most activity since then can be attributed to Juan Navarro
  • mediasoup’s activity has a kind of a cyclic nature to it that is hard to explain from outside. Most of the work there can be attributed to Iñaki Baz Castillo
Code Frequency

This chart on github shows the additions and deletions made to a project throughout its lifetime.

For the image below I tried aligning the projects as well as I could on the 10k  range, which might have distorted them a bit, but should place them nicely in the context of each other. Notice that I couldn’t do that for mediasoup – see my thoughts below. Also note that the X axis of the timescale in each is different, but that wasn’t interesting for me for this comparison.

A few thoughts:

  • Janus and Jitsi show healthy code contributions throughout their existence. I attribute the spikes outside the chart area I’ve selected as on time efforts or just mistakes. Over time, they show stability
  • Kurento’s activity has seen better days
  • mediasoup is interesting. It shows bouts of activity, mainly due to heavy use of branching across its version releases
  • These projects are rather small in nature. If you search github for popular projects outside the WebRTC space, you’ll see a lot higher levels of activity
Why do we want an up to date WebRTC media server?

This looks like an obvious question, but it really isn’t.

To check this out, lets look at another popular project that I suggest people to use when they need a SIP over Websocket implementation in JavaScript: JsSIP

Does this make JsSIP a dead project? Or is it just that there’s nothing much to add besides code fixes here and there?

(Interestingly, SIP.js shows totally different behavior)

When it comes to WebRTC, the same cannot be said. WebRTC is “work in progress” at its core. Browsers deprecate and introduce new features with each release, new codecs are introduced and the slew of use cases using WebRTC is still growing strong. This means that to keep pace with these changes, WebRTC media servers need to be updated as well. Otherwise, they wither and die, with time being unable to offer the level of quality and connectivity developers and users expect.

What other criteria should you be looking for?

Freshness of code is only one criteria, but there are many more. The first one should probably be does this media server fit my requirements? Not all media servers are built equal or for the same purpose, and deciding which one is most suitable is important as well.

Other criteria include usage, maintainability, support, documentation, etc.

You can find the full list in my article about it – 10 Tips for Choosing the Right WebRTC Open Source Media Server Framework

And if this is of real interest to you, then you should look at your selection process itself. For that, I can suggest my free media server selection KPI sheet.

Oh, and once you’re there, think about scaling as well. I have an existing eBook about best practices in scaling WebRTC applications, and an upcoming eBook on Optimizing Group Video Calling in WebRTC (available for pre-purchase).

The post How to know if an open source WebRTC media server is kept up to date? appeared first on BlogGeek.me.

AV1 vs HEVC: Are the WebRTC codec wars back?

bloggeek - Mon, 04/27/2020 - 12:30

AV1 is coming to WebRTC sooner rather than later. Apparently so is HEVC. It is an AV1 vs HEVC game now, but sadly, these codecs are unavailable to the “rest of us”.

WebRTC codec wars were something we’ve seen in the past. During the early days of WebRTC there have been ongoing discussions if the mandatory video codec in WebRTC should be VP8 or H.264. The outcome was to have both of them mandatory to implement in browsers.

Fast forward to today, and life is simply. We have ubiquity and support across all browsers that have WebRTC in them, which is great.

We are now gearing up for the next fight. This one isn’t going to be between VP9 and HEVC, but rather between AV1 and HEVC.

Why now?

COVID-19 is causing all communication vendors to fast forward and accelerate their roadmaps by 6-18 months. Those that don’t are going to be left behind on the other side of this pandemic.

COVID-19 is fast forwarding all roadmaps and plans related to WebRTC, including codec improvements

This isn’t an attempt to scare anyone or to FUD people into doing things. It is just the way things are.

If you want to see how serious things are, just check what’s going on around you:

  • Zoom is rolling out new features on almost a daily basis. They are plugging in their security gaps faster than most vendors can plan their roadmap, let alone develop anything
  • Google is releasing features on Duo and Meet to drastically improve them. A lot of it hinges on machine learning but also on the latest coding technologies (more on that later, when we get to AV1 again)
  • Most UCaaS vendors have launched their own video meeting service in the past 6 months. A lot of them in the last month. Many now offering it for free
  • Many vendors in the video space from all verticals are seeing a 10x or more increase in use
  • There’s a race towards filling different gaps when comparing these meeting services versus Zoom

The AV1 vs HEVC angles here are VERY interesting.

HEVC requires royalties and is a licensing mess.

AV1 is so new it hasn’t even had an opportunity to cool down a bit after being taken out of the oven. Frankly? It is still half baked and requires a bit more cookin’ – and yet… it is now being rolled out in Google Duo.

The thing is, that 6 months back, video was nice to have. A feature that needs to be ticked in a long requirements list.

Today? Video first. All the rest comes later.

Zoom’s stock price and market cap is the best indicator of that change.

A brief history of WebRTC video codecs

In less than 10 years, we’ve witnessed 3 codec generations in WebRTC:

  1. VP8 / H.264
  2. VP9 / HEVC
  3. AV1
Each video codec generation improves over the last one, addressing different market requirements

With each generation of codec introduced, CPU and memory requirements grow along with the complexity of the codec and the resulting quality for a given bitrate increases.

VP8/H.264

I’ve been working with H.264 since 200x. Probably somewhere in 2005. It was brand new at the time and was about to replace H.263 and all of its extensions.

Fast forward to around 2010, when you started it being deployed in almost all video conferencing room systems.

VP8 came to our lives along with WebRTC, in around 2012. It is comparable to VP8.

There are reasons to pick H.264 over VP8. And while hardware acceleration is more readily available in H.264 than VP8, it does pose challenges.

Both are probably at their peak right now when it comes to video calling:

  • They are ubiquitous
  • Readily available
  • Understood and known, with vibrant ecosystems
  • They can run on most CPUs

This is the tipping point, where a new video codec is being sought after.

If you are using it today, you should be just fine. If you seriously want to be at the forefront of technology, right on the bleeding edge (and you will bleed – time, money and blood), then read on to your next alternatives.

And if you need to decide between VP8 and H.264, check out this free video course: H.264 or VP8?

VP9

It should have been a VP9 vs HEVC thing and not an AV1 vs HEVC thing.

The next best thing in video codec was supposed to be VP9. VP9 is the replacement to HEVC. HEVC is what comes next after H.264, and the intent was always for VP9 to be the alternative to HEVC.

VP9 gives you either less bitrate for the same quality or more quality for the same bitrate than VP8

As things go, VP9 advantages are just what you’d expect in a new codec generation:

  • Compression efficiency
  • Higher complexity
  • Scarcity of hardware acceleration (an issue still)

What VP9 was supposed to bring to the world is SVC – scalability. With VP9 SVC we were supposed to improve resiliency of video as well as the ability to scale large group video calls better than ever before.

Need a boost and have a very good grasp at who is in a call before everyone joins? VP9 might be a good alternative for you.

AV1
  • AV1 is the new kid on the block. An impossible dream coming true: vendors working together in a new Alliance of Open Media, working on a royalty free video codec. Something that was never heard of a few years ago and now feels like the new norm
  • Starting with 7 founding members, this changed the dynamics of the WebRTC codec wars. Instead of having Google with VP9 on one side of the ring and the rest of the world on the other side with HEVC, it brought a team of large players to the royalty free side, standing behind the AV1 video codec
  • Today, the alliance includes 48 members, including all browser vendors and most chipset vendors
The Alliance of Open Media is the who’s who of the video industry
  • The focus in terms of comparisons are now AV1 vs HEVC

I’ve written at length about AV1 when the specification got released. You can learn about AV1 there.

There are those who believe AV1 is ready and have been ready for quite some time. Reality says otherwise. It isn’t for the faint of heart at this point. More on that – below.

Adventurous? Go AV1!

Where in the world is WebRTC VP9 video call?

VP9 shipped in Chrome 48 for WebRTC. That was January 2016. 4 years later and it is safe to say that not many are using VP9 in WebRTC.

Adoption of VP9 is slow

The two main places where VP9 is making sense?

  1. Google. Google Meet for example has been using VP9 for quite some time in its own calls
  2. Peer-to-peer calls. Just because it is easy to achieve

Once AV1 was announced, the debate began if one should even try and adopt VP9 or wait for AV1 instead. The majority are waiting for AV1. Laziness at its best (and what I would have selected as well if you’re wondering).

The other reason for delaying and skipping a generation is investment in VP9. Since everyone’s looking at AV1, VP9 is left with less eyeballs and developers improving it. Add to that the slow release of SVC support to it in Chrome and the fact that Safari still doesn’t support VP9 and you can understand the reluctance of going this route.

Apple’s appetite for HEVC in WebRTC

The big Apple is insatiable. Apple has been banking on HEVC for many years now, and where HEVC & WebRTC fits in Apple has been a topic here in the past as well.

Apple is banking on both royalty bearing (HEVC) and royalty free (AV1) video codecs

On Apple’s release notes for Safari Technology Preview 104 there’s a bullet point that shows where things are headed:

Added initial support for WebRTC HEVC

I wonder whatever for?

  • Apple is a founding member of the Alliance of Open Media, so it is banking on AV1 as the future video codec
  • In iOS 11 (2017), Apple introduced HEVC to its devices. That was done with the addition of hardware acceleration
  • Android devices usually don’t have HEVC hardware support, and licensing being as tough and expensive as it is, this is a continued differentiator for Apple
  • Google will be reluctant to add HEVC to Chrome. So would Mozilla. Not sure what Microsoft’s stance would be on this one
  • Apple isn’t playing an AV1 vs HEVC game, but rather an AV1 and HEVC game, and they are alone in that at the moment
  • Apple isn’t especially strong or dominant in the WebRTC space. Safari is the worst browser these days in terms of WebRTC support, with users already used to switching to Chrome on Mac. What would adding HEVC to WebRTC Safari add? Especially when there are so many other, more basic things to fix and improve in Safari WebRTC support…

To me, this is the biggest conundrum at the moment. A piece of this puzzle is missing. What would make developers use HEVC if it is only available in Safari and nowhere else? This isn’t the app store. It is the web.

Time will tell.

WebRTC AV1 support in Google Duo

I said it before and I’ll iterate it again. AV1 is too new. Too early to be adopted in WebRTC or real time communications. And yet… Google just announced supporting AV1 in Google Duo:

[…] in the coming week, we’re rolling out a new video codec technology to improve video call quality and reliability, even on very low bandwidth connections.

They made sure to add a nice moving GIF so you can see the difference between “a video codec” and AV1 in the same bitrate.

Is that other codec VP8? VP9? H.264? HEVC? Maybe H.261…

Are they using it for all Duo calls? In all devices? In all network conditions?

The only thing I could find is that this rolls out to Android with iOS 2 weeks behind in the roll out. There are more things left unsaid.

Some thoughts here
  • AV1 doesn’t have hardware acceleration on smartphones. Maybe on 1 or 2 very new ones (I doubt it), and even then, the hardware would still be buggy as hell – especially for real time video, which is different than just camera recording or playing YouTube videos
  • This means that going to HD resolutions with AV1 on smartphones is going to be brutal to CPU, battery life and device temperature. This isn’t where AV1 support in DUO is going
  • This leaves us with the low bitrate scenario – probably anything from VGA or lower. Maybe even a quarter of that (QVGA)
  • It is where AV1 is going to shine in 2020 and into 2021
Why AV1?

We’re all stuck at home burning the networks. The large streaming vendors are lowering resolutions (and bitrates) for their default players in certain countries. This reduces the CPU load, making room for improving quality on lower bitrates. And that leads to the ability (and need) of better video codecs.

Why not VP9?

Google Duo most probably already makes use of VP9. Maybe even HEVC on iOS devices due to hardware acceleration benefits. When it comes to 1:1 sessions, there’s no real reason to stick to a single video codec for all sessions.

With Apple working publicly now on HEVC in WebRTC, it put pressure on Google, and getting AV1 into Duo in order to bolster their side in the AV1 vs HEVC debate became a pressing matter. Google Duo’s 1:1 call scenarios were the most suitable candidate for Google to make that stand.

Enter AV1

When a new video codec generation was introduced, the thinking was simple: “we are expecting it to support a higher resolution, at a higher bitrate, with a higher CPU consumption”

  • Higher resolution, because let’s face it – QVGA sucked in 1995 and we were still using it in 2000 in video conferencing. So each generation had to get 4 times the pixels the previous one was capable of dealing with
  • Higher bitrate, because at 4 times the pixels we couldn’t really get 25% the size, so there was an expectation of needing more bandwidth for the content we wanted to use
  • Higher CPU consumption, because we were adding more work to the encoder and decoder

In 2020, things are changing.

Sometimes, all you need is a better fit into smaller spaces (like low bitrate) Bigger is no longer better with video codecs

I have 4K resolution on my desktop and laptop. 1080p on my phone and TV. I am happy with 720p content most of the time. I hate fonts on a 4K screen that aren’t enlarged (the damn characters are just too small to read).

What is the value of higher resolution? HDR content? 8K? 360? VR? If all I need is just plain video, no higher resolution is required. We’re all content most of the time with 720p resolutions for business meetings anyway.

Resolution requirements for most content types and use cases are not going to get higher any time soon.

We are probably at peak resolution already.

So we are free to think of next gen video codecs as ones that help consume lower bitrates.

There’s a distinction here. While any new video codec generation consumes lower bitrates for the same resolution/quality, the main purpose of these new video codecs was almost always in increasing the resolution as well.

AV1 on mobile makes perfect sense here. Especially for low resolutions – since we can have some CPU to spare for that scenario.

A quick FAQ on the latest WebRTC video codecs Is HEVC (H.265) supported in WebRTC?

No. Not officially.
Apple is adding support for it in Safari, but no other browser has added support for it or indicated plans to add support for it

Can I use HEVC in WebRTC?

Yes, but not in browsers.
Apple will introduce HEVC in Safari, but no other vendor will. If you build your own native application for either PC or mobile you can add HEVC as another supported codec and use it in your application.

Should I start investing in adding AV1 to my WebRTC application?

That depends. If you want to add AV1, you need to make sure your use case fits well, as well as the devices you expect your users to have.
You will also need to put a considerable investment of time and money to make it happen.
My suggestion for most vendors would be to wait with AV1 support.

Why isn’t VP9 used in WebRTC much?

That is a good question with no good answer.
I believe it is a matter of timing. When the time came to adopt VP9, AV1 was already announced and on its way, so vendors preferred to wait and jump directly to AV1 instead of going for VP9.
VP9 doesn’t enjoy much hardware acceleration, which also makes it CPU intensive, requiring companies to tweak, fine tune and optimize their systems to use it. That kind of work is something many prefer not to do.

WebRTC and the future of video codecs

We’re at war again. The video codec war of WebRTC. And this time, each vendor needs to pick a strategy to play.

Is there a single video codec today that will answer all of your WebRTC needs?

We’ve got multiple codecs in our warchest: VP8, H.264, VP9, AV1 and sometimes even HEVC now.

Which one will we be using?

Which ones will we be using?

Here, scenarios matter. Different scenarios will call for totally different video codec selection to optimize for quality, CPU use, performance, bitrate, cost, etc.

In 1:1 sessions, you may want to keep your options open – use the best one dynamically just by making a decision as the session is set up.

For group calls, will you be using a single, static video codec? Or allow for multiple ones? Will you have multiple codecs in a single group session? Are you going to have an SFU tweaked and tuned for that? Will you pick the best video codec for a session and then dynamically switch over as the nature of the session changes (=someone joins and leaves who has certain limitations)?

What about consumers? What kind of video codec selection strategies are going to be prevalent there? How are they going to be different than the ones we see in enterprise solutions? What will be the difference for mobile first or application based versus web based solutions?

WebRTC differentiation: the next battlefield lines are being drawn WebRTC differentiation is back in focus

We live in interesting times.

Codec selection has never been more interesting or important.

While WebRTC offers 2 codecs (H.264 & VP8), most browsers support VP9 and now we’re seeing browser vendors either adding HEVC or using AV1 in their own apps.

If media quality is at the core of your service (think carefully about your answer to this question), then rethinking your video codec selection strategy might be in order.

It is going to require research and investment. But this is where the future lies for video codecs in WebRTC.

The post AV1 vs HEVC: Are the WebRTC codec wars back? appeared first on BlogGeek.me.

Open Source Cloud Gaming with WebRTC

webrtchacks - Thu, 04/16/2020 - 05:13

Software as a Service, Infrastructure as a Service, Platform as a Service, Communications Platform as a Service, Video Conferencing as a Service, but what about Gaming as a Service? There have been a few attempts at Cloud Gaming, most notably Google’s recently launched Stadia. Stadia is no stranger to WebRTC, but can others leverage WebRTC […]

The post Open Source Cloud Gaming with WebRTC appeared first on webrtcHacks.

WebRTC Server: What is it exactly?

bloggeek - Mon, 04/13/2020 - 12:30

When someone says WebRTC Server – what does he really mean? There are 4 different WebRTC servers that you need to know about: application, signaling, NAT traversal and media.

WebRTC is a communications standard that enables us to build a variety of applications. The most common ones will be voice or video calling services (1:1 or group calls). You can use it for broadcasts, live streaming, private/secure messaging, etc.

To get it working requires using a multitude of “WebRTC servers” – machines that reside in the cloud (or at least remotely enough and reachable) and provide functionality that is necessary to get WebRTC sessions connected properly.

What I’d like to do here is explain what types of WebRTC servers exist, what they are used for and when will you be needing them. There are 4 types of servers detailed in this article:

There are 4 types of WebRTC servers you need to know about
  1. WebRTC application servers – essentially the website hosting the service
  2. WebRTC signaling servers – how clients find each other and connect to each other
  3. NAT traversal servers for WebRTC – servers used to assist in connecting through NATs and firewalls
  4. WebRTC media servers – media processing servers for group calling, recording, broadcasting and other more complex features

More of the audio-visual type? I’ve recorded a quick free 3-part video course on WebRTC servers.

Enroll to free WebRTC servers course

WebRTC application servers WebRTC application servers are like any other web application servers out there

Not exactly a WebRTC server, but you can’t really have a service without it

Think of it as the server that serves you the web page when you open the application’s website itself. It hosts the HTML, CSS and JS files. A few (or many) images. Some of it might not even be served directly from the application server but rather from a CDN for the static files.

What’s so interesting about WebRTC application servers? Nothing at all. They are just there and are needed, just like in any other web application out there.

WebRTC signaling servers WebRTC signaling servers are in charge of connecting users to one another

Signaling servers for WebRTC are sometimes embedded or collocated/co-hosted with the application servers, but more often than not they are built and managed separately from the application itself.

While WebRTC handles the media, it leaves the signaling to “someone else” to take care of. WebRTC will generate SDP – these are fragments of messages that the application needs to pass between the users. Passing these messages is the main concern of a signaling server.

A WebRTC signaling server passes signaling messages between the users to establish a session

There are 4 main signaling protocols that are used today with WebRTC, each lending itself to different signaling servers that will be used in the application:

  1. SIP – The dominant telecom VoIP protocol out there. When used with WebRTC, it is done as SIP over WebSocket. CPaaS and telecom vendors end up using it with WebRTC, mostly because they already had it in use in their infrastructure
  2. XMPP – A presence and messaging protocol. Some of the CPaaS vendors picked this one for their signaling protocol
  3. MQTT – Messaging protocol used mainly for IOT (Internet of Things). First time I’ve seen it used with WebRTC was Facebook Messenger, which makes it a very popular/common/widespread signaling server for WebRTC
  4. Proprietary – the most common approach of all, where people just implement or pick an alternative that just works for them

SIP, XMPP and MQTT all have existing servers that can be deployed with WebRTC. 

The proprietary option takes many shapes and sizes. Node.js is quite a common server alternative used for WebRTC signaling (just make sure not to pick an outdated alternative – that’s quite a common mistake in WebRTC).

If you are going towards the proprietary route:

NAT traversal servers for WebRTC NAT traversal is important to get more sessions connected properly in WebRTC

To work well, WebRTC requires NAT traversal servers. These WebRTC servers are in charge of making sure you can send media from one browser to another.

There are two types of NAT servers needed: STUN and TURN. TURN servers always implement STUN as well, so in all likelihood you’re looking at a single server here.

STUN is used to answer the question “what is my public IP address?” and then share the answer with the other user in the session, so he can try and use that address to send media directly.

TRUN is used to relay the media through it (so it costs more in bandwidth costs), and is used when you can’t really reach the other user directly.

A few quick thoughts here:

  • You need both STUN and TURN to make WebRTC work. You can skip STUN if the other end is a media server. You will need TURN even if your other end of the session is a media server on a public IP address
  • Don’t use free STUN servers in your production environment. And don’t never ever use “free” TURN servers
  • If you deploy your own servers, you will need to place the TURN servers as close as possible to your users, which means handling TURN geolocation
  • TURN servers don’t have access to the media. Ever. They don’t pose a privacy issue if they are configured properly, and they can’t be used by you or anyone else to record the conversations
  • Prefer using paid managed TURN servers instead of hosting your own if you can
  • Make sure you configure NAT traversal sensibly. Here’s a free 3-part video course on effectively connecting WebRTC sessions
WebRTC media servers WebRTC media servers makes it possible to support more complex scenarios

WebRTC media servers are servers that act as WebRTC clients but run on the server side. They are termination points for the media where we’d like to take action. Popular tasks done on WebRTC media servers include:

  • Group calling
  • Recording
  • Broadcast and live streaming
  • Gateway to other networks/protocols
  • Server-side machine learning
  • Cloud rendering (gaming or 3D)

The adventurous and strong hearted will go and develop their own WebRTC media server. Most would pick a commercial service or an open source one. For the latter, check out these tips for choosing WebRTC open source media server framework.

In many cases, the thing developers are looking for is support for group calling, something that almost always requires a media server. In that case, you need to decide if you’d go with the classing (and now somewhat old) MCU mixing model or with the more accepted and modern SFU routing model. You will also need to think a lot about the sizing of your WebRTC media server.

For recording WebRTC sessions, you can either do that on the client side or the server side. In both cases you’ll be needing a server, but what that server is and how it works will be very different in each case.

If it is broadcasting you’re after, then you need to think about the broadcast size of your WebRTC session.

A quick FAQ on WebRTC servers Can I run WebRTC without any server?

Not really. You will need somehow to know who to communicate with and in many cases, you will need to somehow negotiate IP addresses and even route data through a server to connect your session properly.

Will WebRTC servers spy on me and my data?

That depends on the service you are using, as different implementations will put their focus on different features.

In general, signaling and NAT traversal servers in WebRTC don’t have access to the actual data. Media servers often have (and need) access to the actual data.

Can I host WebRTC servers on AWS?

Yes. You can host your WebRTC servers on AWS. Many popular WebRTC services are hosted today on AWS, Google Cloud, Microsoft Azure and Digital Ocean servers. I am sure other hosting providers and data center vendors work as well.

Can I run WebRTC on my PHP WordPress site?

WebRTC can be added to any WordPress, PHP or other website. In such a case, the PHP WordPress server will serve as the application server and you will need to add into the mix the other WebRTC servers: signaling server, NAT traversal server and sometimes media servers.

Know your WebRTC servers

No matter how or what it is you are developing with WebRTC, you should know what WebRTC servers are and what they are used for.

If you want to expand your knowledge and understanding of WebRTC, check out my WebRTC training courses.

The post WebRTC Server: What is it exactly? appeared first on BlogGeek.me.

True End-to-End Encryption with WebRTC Insertable Streams

webrtchacks - Mon, 04/13/2020 - 04:36

A couple of weeks ago, the Chrome team announced an interesting Intent to Experiment on the blink-dev list about an API to do some custom processing on top of WebRTC. The intent comes with an explainer document written by Harald Alvestrand which shows the basic API usage. As I mentioned in my last post, this is the […]

The post True End-to-End Encryption with WebRTC Insertable Streams appeared first on webrtcHacks.

Accelerated Computer Vision inside a WebRTC Media Server with Intel OWT

webrtchacks - Fri, 04/03/2020 - 14:18

WebRTC has made getting and sending real time video streams (mostly) easy. The next step is doing something with them, and machine learning lets us have some fun with those streams. Last month I showed how to run Computer Vision (CV) locally in the browser. As I mentioned there, local is nice, but sometimes more performance […]

The post Accelerated Computer Vision inside a WebRTC Media Server with Intel OWT appeared first on webrtcHacks.

Does your video call have End-to-End Encryption? Probably not..

webrtchacks - Thu, 04/02/2020 - 02:05

Time for another opinionated post. This time on… end-to-end encryption (e2ee). Zoom apparently claims it supports e2ee while it can not satisfy that promise. Is WebRTC any better? Zoom does not have End to End Encryption Let’s get to the bottom of things fast: Boo Zoom! I reviewed how Zoom’s implements their web client last […]

The post Does your video call have End-to-End Encryption? Probably not.. appeared first on webrtcHacks.

A new WebRTC codelab training

bloggeek - Mon, 03/30/2020 - 12:00

I am launching a new WebRTC codelab course, created together with Philipp Hancke. This goes into the intricacies of WebRTC signaling and best practices.

The State of online WebRTC resources

Where should you start with WebRTC? There’s not enough information about it and at the same time too much information about it. Most of it is old and outdated. Needle in a haystack.

Up to date WebRTC code is hard to come by

Sift through discuss-webrtc, stackoverflow and the W3C WebRTC mailing list? All great. But there’s no explanation besides pieces of code. It lacks context.

Read the spec and work your way from there? If you don’t fall asleep, you might just find that browsers aren’t exactly spec compliant yet anyways.

Books? None from 2020. None from 2019. Less than 10 in total. A handful.

How about online courses? There are a few on udemy and pluralsight, but they are also old and broken by now.

My own Advanced WebRTC Architecture course? While great, I purposefully haven’t gone through the APIs of WebRTC, understanding they change so frequently.

A codelab then? Sure. find one that works and explains signaling properly.

The way I see it, there are 3 types of WebRTC codelabs today:

  1. The outdated ones
  2. The broken ones
  3. The ones that sell you a managed streaming service
Enter Philipp Hancke

I’ve been working with Philipp here and there in the last couple of years. He is fun to work with and knows everything there is to know about WebRTC and the intricacies of its APIs along with the status of browsers.

Here’s a bit about him:

I don’t quite recall how, but we got to the point a couple of months back that it would make sense to create a solid WebRTC codelab that covers the signaling aspects of WebRTC. Simply because there is nothing out there that does the trick properly.

WebRTC: The missing codelab

Fast forward to today, we have a codelab course for you:

The codelab has 4 parts to it:

  1. Github repo and course introduction module, both publicly available
  2. Codelab walkthrough. Over 2 hours of recorded lessons covering the source code and explaining all you need to know to grok it
  3. Exercises. We’ve started creating useful exercises on the codelab. These include the challenge, the solution and the explanation. Along with the additional code for the solution and best practices
  4. Resources library. If you are new to WebRTC, this will come handy in closing some gaps for you. They are lessons from my other courses that fit nicely here

We’ve made sure the lessons aren’t boring by making them interactive. I’ll be there with Philipp, taking the part of the student asking questions. The intent is to try and get into his head, understand his thought processes. What do you gain out of it? You will understand why things are implemented that way and not only how.

Interested?

Head to the WebRTC developer courses – there’s a 20% discount until the end of April.

If you are uncertain, then you are invited to join this week’s WebRTC Live webinar where I’ll be talking with Arin Sime about the codelab. Alternatively, just go through the introduction module and make a decision.

If you know that this is for you, then there’s a 50% discount if you enroll in March (that’s in the next 2 days) by using FASTMOVER as your coupon code on checkout (for any of the WebRTC course bundles).

If you’ve enrolled in my All Included course in 2020, then you are already automatically enrolled to the codelab. If you enrolled throughout 2019, then you are eligible for a 50% discount during April.

The post A new WebRTC codelab training appeared first on BlogGeek.me.

Stop touching your face using a browser and TensorFlow.js

webrtchacks - Thu, 03/19/2020 - 12:55

Don’t touch your face! To prevent the spread of disease, health bodies recommend not touching your face with unwashed hands. This is easier said than done if you are sitting in front of a computer for hours.  I wondered, is this a problem that can be solved with a browser? We have a number of […]

The post Stop touching your face using a browser and TensorFlow.js appeared first on webrtcHacks.

Who are the WebRTC Market Global Key Players?

bloggeek - Mon, 03/02/2020 - 12:00

The WebRTC market global key players may be different than you think. They include the browser vendors, a few CPaaS vendors, dominant “creators” of WebRTC sessions and… open source projects.

The title for this post came from one of the many lead generating headlines I see for reports that mention companies that no longer exist in our market. It is sad in a way: The same market report released every year, with the main difference between the last one being X+1 where X denotes a year mentioned in the report.

(if you are about to purchase a market report on WebRTC – make sure the companies mentioned there actually do something meaningful in WebRTC – check against the companies listed here – or just ask me)

My intent here is to actually ask the question – Who are the WebRTC Market Global Key Players? – and then also answer it.

I’d like to segment the key players in WebRTC into 4 main groups:

  1. Browser vendors
  2. CPaaS vendors
  3. Customer facing services
  4. Open source projects
1. Browser vendors

There are exactly 4 browser vendors that are interesting. The rest? Less so.

I will list them here in the order of their importance to WebRTC.

Google Chrome

This one is obvious. Google is the main driving force behind WebRTC. They aren’t alone in being there, but they are the dominant browser player in market share AND they host the most popular implementation of WebRTC (that would be libwebrtc).

In many ways, Google decides where WebRTC is headed. It does that in 3 different angles:

1. libwebrtc and Chromium

Maintaining the most popular WebRTC implementation (did I say that already?).

So much so that all browser vendors use this implementation in one way or another (either directly or indirectly by copying the pieces of it that they want/need).

I’ve added here also Chromium. This is the open source components of the Chrome browser and it is used in MANY important projects:

  • Microsoft now operates Edge (its new browser) on top of Chromium
  • Electron, which is quite popular in packaging web apps as installable apps is built on top of Chromium
  • Many of the “other” browsers out there are implemented on top of Chromium
2. Chrome

THE market leader in browsers.

Taken from StatCounter (and yes. It also includes mobile)

Need I say more on how that influences WebRTC adoption and implementation?

3. Google Apps

We used to have only Hangouts using WebRTC at Google.

Now we’ve got a lot more.

The shortlist I am aware of include:

  • Google Hangouts / Google Meet
  • Google Duo
  • Google Stadia
  • Chrome Remote Desktop
  • YouTube Live

For these, Google has their own agenda with their own WebRTC roadmap. This means that the requirements that fall into any of these services end up either directly as part of the open source WebRTC implementation distributed by Google – or Chrome alone.

Apple Safari

Apple has been quiet about WebRTC. That’s true about Apple and a lot of other technologies as well.

That said, Safari now supports WebRTC in Mac and iOS for a couple of years now (there are those who missed that fact).

While Apple has no other direct involvement around WebRTC, all developers and entrepreneurs are affected by their decisions about WebRTC. A lot more than in any other case.

Point in case is WebRTC iPhone support:

  • You can build your own native app with WebRTC on an iPhone. This was always true
  • You can run a web app using WebRTC on an iPhone inside Safari
  • You can’t run a web app using WebRTC on an iPhone in any other iOS browsers – just because WebKit on iOS still doesn’t support WebRTC properly
Microsoft Edge

While Edge didn’t enjoy any growth or market share, this may soon change.

Microsoft decided a bit over a year ago to stop investing its resources and focus on building a browser engine, and instead took Chromium “as is”, building their Edge browser on top of it.

Somehow, I am assuming (hopefully) that this change also means that more Microsoft engineers are involved in the inner workings of Chromium itself, optimizing it to run on Windows and elsewhere for their own scenarios.

Apple is more important than Microsoft when it comes to WebRTC simply due to the current state of market share of their browsers.

Mozilla Firefox

Firefox is the 4th important browser and decision maker in the table of WebRTC.

It isn’t as important as the rest since its only “contribution” to the game is Firefox itself whereas the other browser vendors here come with operating systems and applications of their own as well.

Nevertheless, it is way more important than all other browsers not mentioned here combined.

2. CPaaS vendors CPaaS vendors offer the tools for others to embed WebRTC communications

CPaaS vendors enable others to build their applications without delving into the communication technology stack too much. In many cases, that includes support for WebRTC as well.

To me, they are key players within this industry, and I want to mention those that are the most important when it comes to WebRTC adoption.

Twilio

Twilio is the leader in CPaaS. It is also one of the dominant players when it comes to WebRTC in CPaaS.

When it comes to voice calls via WebRTC done through CPaaS, Twilio are probably the largest player. Twilio has a lot of visibility to issues and requirements related to voice use cases, especially ones related to call centers.

Twilio is also growing in their video use of WebRTC.

Vonage

Vonage is the owner of TokBox, now part of its API platform.

As one of the leading video API platforms using WebRTC, TokBox is important. As with Twilio, this stems from their visibility to issues and requirements, but in this case, related to video use cases.

Others?

There are other interesting CPaaS vendors in the WebRTC space, but none of them are dominant enough. 

The ones worth mentioning in this context?

3. Customer facing services

Customer facing services are the end products. What users interact with when it comes to WebRTC. This title won’t get a vendor to be a global key player unless there’s a real reason…

Facebook

Facebook is huge. Doesn’t matter if you look at Messenger, WhatsApp or Instagram.

Messenger uses WebRTC.

Instagram uses WebRTC for its live chat.

WhatsApp doesn’t use WebRTC directly, but there’s ongoing effort to consolidate the infrastructure of all these messaging platforms at Facebook. Will we be seeing 2 billion WhatsApp users able to conduct voice and video calls by way WebRTC in 2020?

Then there’s the Portal device.

Anyways, the sheer size of Facebook, along with their work with WebRTC places them as a market leader in WebRTC use. And due to their size, they are also largely alone here.

No one else

There are vendors that contribute large WebRTC traffic. But other than Facebook, I am not sure who else to include here.

Maybe Discord.

Probably Amazon. Due to multiple products and that minor thing called AWS.

I decided not to put any of the enterprise vendors. I think they should matter more, but got a feeling that they don’t at the moment.

4. Open source projects Open source projects are at the heart of the WebRTC ecosystem

These are sometimes neglected when discussing market leaders, which is rather sad. A lot of the development and WebRTC traffic out there ends up going through some of these open source projects, which is why I’ve added them here.

It is apparent that some projects should have a seat at the table. When Kurento got acquired by Twilio, there was a year when many of the discussions I had was about finding a suitable replacement for them.

If WebRTC open source projects fail to make progress, upgrade or just die, they affect those using them. The popular open source projects matter. A lot. They are at the heart of the WebRTC ecosystem.

Janus

I’ve decided to put Janus first because:

  1. Wherever it is used, there is use of WebRTC
  2. It is very versatile and flexible. I see it in a lot of different use cases
  3. It is quite popular
Jitsi

Jitsi is now owned by 8×8 after switching hands.

It is still run as an independent open source project and is widely deployed.

FreeSWITCH

FreeSWITCH comes from the telephony world.

Not in all of the deployments of FreeSWITCH out there WebRTC is used, but when companies need to connect telephony to WebRTC, they often go with FreeSWITCH for that.

Since FreeSWITCH is so common in so many of these instances, they are important for the WebRTC ecosystem

Kurento (to some extent)

To some extent, Kurento still matters.

Kurento is a shadow of its former glory prior to the acquisition. It isn’t part of Twilio – Twilio acqui-hired the developers, but not the name. Kurento lives on, but different.

It is being developed alongside OpenVidu, but the progress made to both seems somehow slower than the other open source projects mentioned here.

I am not sure they are a key player anymore.

Others?

There are other important projects that can/should make the title of key players in WebRTC. The 3 that immediately come to mind are mediasoup, PION and Asterisk.

Why haven’t I added them? Because their popularity is lower than the others.

For mediasoup and PION it is just that they are newer. They are growing, so I believe they will become key players if they continue in the current adaption trajectory.

For Asterisk, it is because they are used in a similar fashion to FreeSWITCH. I just don’t see them as much in the conversations around WebRTC that I have.

What does it mean to be a “WebRTC Market Global Key Player”?

This is where I started the article, and I think it bears thinking about.

When one coins a company as a “WebRTC Market Global Key Player” what does that mean exactly?

For me that means that they have the ability and potential to affect what happens with WebRTC moving forward.

While the standardization work is done in the W3C, a lot of the work happens elsewhere. In what Google places into Chrome as experiments and later as features. In what Apple decides to implement or not implement in Apple. In what CPaaS vendors deliver to their many customers and the feedback they get. In the companies that build large scale products and in the open source projects that make up a large portion of these products.

There are steps one can take to become a more dominant player. To be able to join the conversation and affect where WebRTC is headed. While I’ve conversed with many who want to become dominant players, only a few have the courage and the willingness to invest the time and resources needed.

Want to know who the global key players are? Don’t read it in a copy+paste research paper that is poorly updated…

The post Who are the WebRTC Market Global Key Players? appeared first on BlogGeek.me.

Private Home Surveillance with the WebRTC DataChannel (Ivelin Ivanov)

webrtchacks - Tue, 02/25/2020 - 13:35

When most people think of WebRTC they think of video communications. Similarly, home surveillance is usually associated with video streaming. That’s why I was surprised to hear about a home security project that leverages WebRTC not for video streaming, but for the DataChannel. WebRTC’s DataChannel might not demo as well as a video call, but […]

The post Private Home Surveillance with the WebRTC DataChannel (Ivelin Ivanov) appeared first on webrtcHacks.

How can your WebRTC application keep pace with browser releases?

bloggeek - Mon, 02/17/2020 - 13:00

If you are developing with WebRTC, then there is special care you need to take to browser releases, as these can break your app. Here’s how I’d go about dealing with this problem.

Twice in the past week I’ve been asked about backward compatibility with WebRTC. It is a loaded topic – one that lends itself to this kind of a metaphor about developing with WebRTC:

When you’re developing with WebRTC (and I daresay when you’re a developer in the Google WebRTC team), it feels like replacing a wheel while driving the car on a highway.

Browsers release cycle

Browser release cycles are… short. And complicated.

  • Chrome and Firefox get updated roughly every 6 weeks or so
  • Safari twice a year at the moment
  • And Edge just got on Chromium, and we need time to see on what release cadence will Microsoft select for it – at the speed of Google Chrome, faster or slower?

And that’s the simple part of the whole story – it comprises only the right column of this diagram from 2017:

Hand drawn guide about different versions of Browsers.

Because no one told me Canary is not about an actual bird. pic.twitter.com/amerBhf8tp

— Mariko Kosaka (@kosamari) January 10, 2017

Browsers auto-update. They do that at fast release cycles that are shorter than 2 months between large releases (unless they are Safari), and they often ship and push security or stability releases in-between these main releases when needed.

Browser update cadence will either stay the same in 2020 or become even shorter.

WebRTC’s pace of change

When I think about the experience with WebRTC in the past few years, it boils down to something like this:

For end users it is a real joy. Most don’t even know they are using WebRTC, but they just do.

Developers, on the other hand, are on a rollercoaster ride that they’d rather not be on. Constant changes are making the experience challenging.

To be fair – this is a lot better that previous alternatives we had

There are 3 different ways in which WebRTC is constantly changing:

  1. WebRTC browser implementation vs WebRTC specification. We are dealing with a protocol specification that is still not complete. And browsers are making changes to close the gap between what they’ve got implemented to what the specification says. These changes are sometimes not backward compatible
  2. Introduction of new capabilities. mDNS is a good recent example. Deprecation of DTLS 1.0 is another. Then there’s the playout delay addition for Google Stadia (and others). Somehow, there’s something that just must be added that might break interoperability and is introduced to improve security or connectivity
  3. Optimizations. Constant changes in the implementation to improve performance. Here you can place rewriting the echo canceller, revamping the whole threading model for audio and switching from receiver-side bandwidth estimation to sender-side one

These aren’t just introduction of new features and capabilities. They almost always include changes in the behavior of WebRTC itself.

Don’t expect the pace of change of WebRTC to slow in 2020.

WebRTC server-side challenges

If your app runs in the cloud and in front of browsers then your life is relatively simple. Using tools such as adapter.js along with some good sense of using the beta and even dev channels of the various browsers you will be fine for the most part.

Things get complicated once you start using media servers.

Most media servers today are open source. The teams maintaining them are rather small and they have a lot on their plate. The commercial ones don’t fare much better here either.

Now imagine. The Google WebRTC team cranks out features, bug fixes and optimizations. Their main focus is their own needs, along with what goes in the spec and interoperability with other browsers. They wouldn’t be able to slow down or explain everything that goes on to everyone out there even if they wanted to.

Take this small example – DTLS 1.0 deprecation:

  • DTLS is used by WebRTC to negotiate the shared secret of the SRTP media channel
  • DTLS 1.0 is considered insecure
  • DTLS 1.2 was already implemented as the default mechanism in WebRTC, but the Chrome implementation of WebRTC allowed a downgrade to DTLS 1.0 during the negotiation of a session
  • In February 2019, Google announced it will remove DTLS 1.0 support in Chrome M74
  • In April 2019, another announcement was issued. This time about the deprecation taking place in Chrome 81. Why? “based on the feedback it is clear that some in the community need more time to update their systems, and so we have reverted this change from Chrome 74”
  • Fast forward to February 2019, and now it seems that Chrome M80 will show a deprecation notice and removal will take place in Chrome M82

Why all these changes? Vendors not fixing their media servers. For a span of a full year.

Here’s what will happen when Chrome M82 rolls out: some services will break.

Google is in the right here.

Server vendors need to keep up with the pace.

And this is an “easy” one. That gets announced and noticed.

Other changes like bandwidth estimation algorithms, different support mechanisms for simulcast, and many others need to be taken care of. These are important for the media quality of the sessions.

WebRTC media servers have their hands full in keeping up with the pace. Pick one that is lively and well maintained

Beyond pace of change, you will need to deal with scaling. If that’s what you’re after, then my ebook on Best Practices in Scaling WebRTC Applications is the thing you need.

Purchase WebRTC Scaling Best Practices Mobile applications and IOT devices

Up next – applications.

With browsers, we’re both at the mercy of browser vendors but we’re also “saved” by their effort and work. This causes us to sweat when it comes to developing media servers that work well with browsers. But what about mobile applications then?

Since they are acting just like WebRTC clients in browsers would, we need to update them to keep them functioning and working in front of the browsers. Why? Because some of the changes browser vendors introduce are breaking changes while others are about important optimizations.

If you are using Google’s libwebrtc then check out my best practices of using it. You’ll find I suggest upgrading multiple times a year but not at Google’s pace. The reasoning behind this approach is to balance your sanity versus how far away you are from the latest release. A kind of risk management effort.

On mobile, a WebRTC application must be updated a couple of times a year just to keep working in front of web browsers

On-premise deployments and WebRTC

On-premise brings with it its own challenges, especially today. It used to be that on-premise was easy and cloud was challenging but the wheel has turned.

WebRTC is just another headache here.

If you run an on-premise operation that relies on web browsers for access, then you’re in for a treat with WebRTC. You’ll need to be able to frequently update your software. A lot more frequent than the “never” alternative that is so common in this space.

With on-premise you’ll need to rethink your strategy for updates and upgrades. Automate it somehow. Have it done without “human intervention”. Not only because of WebRTC mind you – it will be more about security patches. But WebRTC requires it as well.

With on-premise, WebRTC will force you to adopt cloud-development paradigms

Figure out (plan and execute) your own pace with WebRTC

How are you going to keep the pace of change of browsers and WebRTC?

This is something you need to ask yourself and answer.

A few suggestions if I may:

  • Have mechanisms for automatic updates of your clients and servers
  • Put versioning information and decisions into your client applications (to know when to force an update and when to just suggest one)
  • Subscribe and read the messages and PSAa on discuss-webrtc
  • Have your developers work also on beta and dev channels of the browsers they use

Obviously, there are more things you can and should do. I am here to help with it – just contact me.

The post How can your WebRTC application keep pace with browser releases? appeared first on BlogGeek.me.

Not a Guide to SDP Munging

webrtchacks - Tue, 02/11/2020 - 13:33

SDP has been a frequent topic, both here on webrtcHacks as well as in the discussion about the standard itself. Modifying the SDP in arcane ways is referred to as SDP munging. This post gives an introduction into what SDP munging is, why its done and why it should not be done. This is not […]

The post Not a Guide to SDP Munging appeared first on webrtcHacks.

6 questions to ask about your WebRTC training 🙋

bloggeek - Mon, 02/10/2020 - 13:00

Finding a good WebRTC course is tricky. Finding a training program that teaches you more than the basics about WebRTC isn’t simple. Here are a few questions to guide you in finding that course you want.

First off – I am biased. I have created a WebRTC training and have been running it successfully for a couple of years now, teaching IT workers about WebRTC. I’ll try to be as objective as possible in this article. The main thing I ask of you? Do your own research, and feel free to use my questions below as a guide to your quest after the best WebRTC training course.

Without much ado, here are the 6 questions you need to ask yourself about the WebRTC training you are planning to enroll to:

1. What was the last date the WebRTC course was updated?

This is probably the most important question to ask.

WebRTC is a moving target. Ever changing.

There are 3 separate axes that need to be tackled when learning WebRTC:

  1. Standard
  2. Browsers
  3. Ecosystem

The standard is still changing. WebRTC 1.0 will hopefully be completed this year. The changes are minor, but they still occur. And once they are over, we will start talking about WebRTC NV – the Next Version of WebRTC. Which will inject new learnings around WebRTC.

Browsers are changing. Especially Chrome. But not only. They have their own implementations of WebRTC, slightly different than the standard. And they are crawling ever so slowly towards being spec-compliant. On top of that, they have their own features, nuances and experiments going on; of things that might or might not end up as part of WebRTC.

The Ecosystem around WebRTC is what you should really be interested in. Not many developers use WebRTC directly. Most use third party open source or commercial frameworks so they see less of the WebRTC API surface itself. Selecting which framework to use, and how they are going to affect your architecture and future growth is the hard part.

All this boils down to this:

If the WebRTC training you are going to enroll in is more than 6-12 months old, it isn’t going to help you that much.

2. Does it cover more than the WebRTC API surface?

WebRTC is multidisciplinary. It spans across different concepts, and is a lot more than just the APIs the browser publishes.

How is the course you’re planning to take tackling that?

While many of the WebRTC courses focus on the API surface, they fail to understand the reality of WebRTC: Most WebRTC developers don’t interact directly with WebRTC APIs, but rather use third parties – either in the form of open source or commercial frameworks for signaling and media servers; or in the form of full managed services (think TokBox or Twilio). In such cases, it is critical for the students to understand and grok WebRTC from a perspective of the whole architecture and less so in what each and every API in WebRTC does (something that may change from one Chrome release to another).

Things you’ll need covered in order to write a decent application that is production ready:

  • WebRTC APIs
  • NAT traversal (STUN, TURN, ICE)
  • Signaling and transport
  • Codecs – both voice and video, and not only spelling them out
  • Media processing – things like echo cancellation, noise suppression, packet loss, simulcast, etc.
  • Media architectures – mesh, routing and mixing

Then there’s the part of how you boil it down to an actual solution. What components to use and why.

WebRTC has a set of building blocks, but you need to know which ones to use to fit the specific model you want to operate.

An interesting tidbit to check – does the training include aspects of group sessions or broadcasting? These require a look beyond the basics of WebRTC API calls.

Make sure the WebRTC course you take isn’t too focused on the APIs and isn’t too focused on the standard specification.

3. Is the instructor who created that WebRTC training available for questions?

Assume that WebRTC is going to be challenging to grok.

And with an online course you are mostly on your own. Unless there’s a bigger framework at play.

Here are a few things that can help you out:

  • Someone to ask. Does he course offer someone you can ask questions?
  • Do you ask them over an online form? An esoteric email address?
  • Is there a chat widget you can use to reach out to the instructor whenever you need?
  • What about office hours? Can you join live to a session and ask questions in person, and with your own voice?
  • Does the course offer a place for students to share their experience? Like a forum. Or a place where updates about WebRTC are published? (and we know things get updated pretty regularly there)

And one last thing – do you even know who the instructor is?

An important part in learning WebRTC is the ability to ask questions interactively. Make sure that is part of the training you enroll in.

4. How long is the course?

An hour? Two hours? Four hours?

More doesn’t always mean better, but with WebRTC here’s the thing – there’s quite a lot of ground to cover. And there are three ways to do that:

  1. Run fast, skimming over the material; the student will fill out the rest by searching the internet later
  2. Focus on the basics, leave a lot of the meaty, important parts out of the course; the student can figure it out on his own
  3. Put the time into it, making sure to cover as much as possible in the course itself

That third option means that a WebRTC course, at least a decent one, should take more than a full day of training – well above 10 hours of information.

If you want to really learn WebRTC, make sure the course you take has enough hours in it to give you the knowledge you need.

5. What are students saying about the course?

Do people like the course? Do they feel it got them what they needed?

Look at the testimonials of the WebRTC courses: you will immediately notice the frustration of students with the freshness of the courses – most of them are 3-5 years old. This makes them useless. Interestingly, students are less worried about the price (these are cheap courses) – they are a lot more worried about the time they wasted.

Check what companies are sending their employees to take that course. Are they just sampling it out, or sending multiple employees? What do these employees have to say about the course after taking it?

You will be able to find many answers to the other questions here just by reading the reviews of students.

If you are going to invest your time on an online WebRTC training, make sure to read testimonials and reviews about that training.

6. Is the course suitable for your purpose?

Just need to understand in broad strokes what WebRTC is and what it does? Are you after a deep understanding of WebRTC and how to develop or test it properly? What about offering support or ops for a WebRTC application?

Each of these has a different set of needs. Each needs a view of WebRTC from a different angle.

Which angle do you need and how well does it align with the angle of that course you are looking at?

Make sure the WebRTC course is aligned (as much as possible) with the type of work you’re expected to do.

Looking for a WebRTC course? Ask yourself: What should a good online WebRTC training include?

A good WebRTC training should include information about WebRTC APIs, STUN/TURN servers, media servers (SFU, MCU), signaling servers and the state of the ecosystem and browser support.
A course focusing only on the WebRTC API or showing how a specific simple “hello world” application works won’t suffice.

How do I know if a WebRTC course is good?

Ask yourself the following questions about the course to understand if it is for you:
* What was the last date the WebRTC course was updated?
* Does it cover more than the WebRTC API surface?
* Is the instructor who created that WebRTC training available for questions?
* How long is the course?
* What are students saying about the course?
* Is the course suitable for your purpose?

Are there different WebRTC courses?

Yes. Some courses are targeted more towards developers while others focus on ops and support.
If you are looking for a WebRTC course, be sure to check that the course is aligned with your job description.

Pick the right WebRTC training for you

There are several WebRTC training courses out there. Be sure to sift through them and find the one that is most suitable for you.

Interested? check out my own WebRTC courses:

  • WebRTC basics – a free beginners course for those needing a bird’s eye view of WebRTC
  • Advanced WebRTC – for those who deal with development – engineers, testers, architects and product managers
  • Supporting WebRTC – a course focused on those in support positions


The post 6 questions to ask about your WebRTC training 🙋 appeared first on BlogGeek.me.

Remote Work in 2020

webrtc.is - Wed, 01/29/2020 - 01:37
The state of remote work and distributed workforce strategies The reality of commercial office space in 2020

Most business owners will agree that it’s become much harder to justify paying the increasingly exorbitant lease rates for office space in most major cities in North America. Even Canada isn’t exempt.

Once a haven for US companies looking to hire cheaper Canadian labor, Vancouver now has the lowest commercial vacancy rate. To add insult to injury, it also has the highest price of gasoline in North America.

CBRE’s Canada Q2 Quarterly Statistics Report said that downtown Vancouver’s office vacancy rate was 2.6 percent in 2019’s second quarter, down from 4.7 percent one year previously, making it the hottest commercial office space market in North America on par with Toronto, beating out 3rd place San Francisco, where the vacancy rate is 3.6 percent.

Coworking Growth

Growth in commercial office space worldwide is also being spurred by coworking. We now see coworking facilities in a large number of major cities across the globe, although the number of new coworking space openings does appear to be slowing down when compared to the previous year.

Our projections show that in 2019 growth will be slower than the previous year, although the industry continues to grow at a strong pace. While most of the industry growth can be attributed to new spaces, a large portion is owed to existing spaces diversifying their services or acquiring businesses, and expanding into smaller, niche markets that generally have stronger, more close-knit communities. — Coworking resources

Coworking is obviously not free. It does reduce the overhead and headache of having to manage your own office (lease, insurance, maintenance, etc) but if and organization made use of coworking facilities full-time, it could likely be more expensive than a comparable stand-alone office space, per square foot.

It doesn’t take a genius to see that not only are office spaces getting harder to find, but they are also the most expensive they ever have been. For staff, who are interested in raising a family, getting them to this expensive office is also costly. This sounds like a lose-lose proposition, why are we doing this again?

Coworking + remote work | FTW!

Unsurprisingly, IT organizations and software organizations that have no real need for dedicated physical locations appear to be shuttering offices and opting for coworking + remote work models.

Automattic, Gitlab, Shopify (just to name a few) have successfully made this transition, in fact, some of these companies were purposefully built as distributed companies from the get-go.

Various reports and studies have been done which seem to indicate that everyone wants to work from home. In a recent study, Buffer published the State of Remote Work where 2,500 remote workers surfaced some interesting statistics:

  • 99% of all respondents said they wanted to work remotely, in some capacity.
  • Younger generations are 28% more likely to utilize remote work than older generations. — Upwork, 2019
  • 73% of all teams will have remote employees by 2028, because of the influx of Gen Zers in the coming years. — Upwork, 2019

Zapier has also published a report(*) on the subject and the findings are quite similar in that it points to knowledge workers’ desire to work remotely:

  • 95 percent of U.S. knowledge workers want to work remotely, and 74 percent would be willing to quit a job to do so.
  • 26 percent of knowledge workers have quit a job because the company did not offer the option to work remotely/flexible work schedule
  • Remote work is a highly desired perk. Nearly 3 in 5 knowledge workers (57 percent) say the option to work remotely is one of the perks they’d most prefer to be offered by an employer.
    (That’s more than free daily lunch (42 percent) and unlimited vacation time (39 percent). Only one quarter (25 percent) cited recreational activities, like ping pong or foosball.)
  • Almost a third of Millennial knowledge workers (31 percent), and more than a quarter of Gen X work (27 percent) remotely full-time. Only 11 percent of Baby Boomers do.

Microsoft (Japan) is also researching work routines and recently published findings on a 4 day work week experiment, which increased productivity by up to 39.9%. This could very well increase even more if they adopted a virtual coworking model for the other 4 days.

Concerns

Now that we have set the stage for what looks to be an unstoppable trend, let’s take a look at why this is not a no-brainer.

I interviewed a few companies (ranging from small to large) and asked them what their position was with remote work in mind. Some business owners and team members expressed concerns.

  • Security & Legacy Tech —If a company has previously built out systems it could be quite expensive and time-consuming to move to a secure cloud model. This move might require a large investment to get to a similar level of security that they already have, especially if the desire is to not use VPNs or IP tunnels. Even if the company is ok with VPNs, now IT has to manage that new asset, which doesn’t come for free.
  • FOMO — The fear of missing out, is a big one for team members. Many employees that have not worked remotely before quickly develop a sense of FOMO (fear of missing out). If conversations were missed, it causes a feeling of exclusion and can impact productivity and morale.
  • Comradeship — Developing a positive team spirit is hard to do if team members never spend face time with each other. Humans are social animals, if we remove this face-to-face time, culture tends to be rather flaccid.
  • Distractions — Some professionals have not enjoyed very much success when working from home. Some remote workers state there are too many distractions and they do not have a quiet place they can go to escape these distractions in their home. Speaking from experience, this is especially true for working parents.
  • Time Zones — Spanning timezones where workers are on the opposite side of the continent or planet requires good planning and diligent project management, especially if the teams are larger. This can be a daunting task for a shop that has never done it before. Teamwork may take a hit if those in the remote time zones are few and far between, as they might not be communicating with each other or with domestic teams as regularly as you would like.
https://buffer.com/state-of-remote-work-2019

Some of these concerns are legitimate and it could be they will not be overcome with even the best remote work processes.

Case in point — In 2012, Marissa Mayer was hired as CEO of Yahoo! and was charged to return the former powerhouse to its glory days. Among the many things she had to fix were company culture and productivity. According to sources closer to Yahoo!, it was made clear that many of those working at the company were not getting their jobs done when working from home. A review of VPN logins and source repository access logs surfaced a gap in the lack of work being accomplished while Yahoo! staff were working from home.

In 2013, an internal letter was issued, the company mandated that remote work was to be all but banned. Here is an excerpt from that letter…

To become the absolute best place to work, communication and collaboration will be important, so we need to be working side-by-side. That is why it is critical that we are all present in our offices. Some of the best decisions and insights come from hallway and cafeteria discussions, meeting new people, and impromptu team meetings. Speed and quality are often sacrificed when we work from home. We need to be one Yahoo!, and that starts with physically being together.

Some of Mayer’s staff, the press, and many other groups let her have it, no one seemed to be impressed. It could be said that Mayer had little choice. She had to do whatever she could to turn the company around and for her, that meant taking some drastic measures. In a Forbes post, Yahoo! commented further…

“This isn’t a broad industry view on working from home — this is about what’s right for Yahoo, right now.”

At first blush, it would seem this was more about timing and the position Yahoo! found themselves in at the time. They did what they thought needed to be done to influence behavior.

This seems like an extreme case, but the same sentiment can be found in other IT and SaaS organizations worldwide. In fact, some of these companies are the creators of communications software and services we use for remote work every day. In fact, they openly promote the “work from anywhere” mantra in their own product marketing. It might seem a little hypocritical, but it is happening for many of the same reasons we have shown.

Remote Work — Benefits

Now that we have heard the concerns, let’s talk about the potential upside. Here are some high-level benefits:

  • Reduction in Overhead — This one is rather obvious, but it goes further than just nixing the lease cost for the office space. If there is no office, there is now no longer a requirement for furniture, desks, lunchrooms, bike rooms, office snacks, bought lunches, office insurance and much more. Depending on the size of your business, savings could be significant.
  • Sans Commute — Most staffers love the idea of working from home, especially if they have been successful in doing it at previous jobs. This means spending less time on the road, more time working and less time away from their family. It also means cash savings as they no longer have to pay for transit passes, gas, insurance or parking for their vehicles.

One in four knowledge workers find their commute to be among the most stressful parts of their job.*

  • Choose your Location — Since location matters less in a delocated organization, team members are generally encouraged to live wherever they want, as long as they can get good Internet, power and work effectively with their peers. They are no longer tied to living in expensive larger cities where the cost of living precludes them from buying a home. This should also contribute to happier team members in general.

Obviously, these benefits can contribute to a more attractive and economical approach to building a business, as long as you can overcome the concerns.

Taking the plunge

If you are still with me and undeterred, you are not alone. Personally, I have been working remotely 100% for several years in various roles with teams all over the world. I have learned a few things along the way. Here are the cliff notes.

Remote Work Guide: A good place to start is by creating a “remote work guide” document that embodies some or all of the elements listed here along with your own spin on things. Your teams may not have experienced working remotely before, they will need some guidance and direction, this is also where we set expectations eg. working hours, always-on video, etc. It could be an addendum to your existing company handbook or a completely new document, keep in mind it will grow with your company. (Note: Many miss this step and it’s likely the single most important contributing factor to a successful remote work strategy for your company or organization.)

Small Teams: You are going to need some time to plan your rollout and decide which processes and tools are going to work best for your various teams. When your teams are first getting started, parcel off smaller project teams that are tech-savvy and preferably have experience using online collaboration tools. Their experience will pave the way for everyone else. Once you have a good process that seems to be working, you can roll it out in stages for everyone else.

Always-on Video Conferencing: This may sound a bit creepy but it can actually be quite effective in preserving team spirit, fending off FOMO and helping with the isolation that some feel when working remotely. It can be done in pairs, teams or even using a water cooler approach where team members drop in and out during the day. You can even use it to bridge branch offices, like a window into each remote office. Let’s be honest, organizations are going to see a bit more opposition when introducing this concept, it will need to be actively managed. As the business leader, you will need to actively work with team members to encourage participation (eg. by leading a weekly all-hands meeting or asking them to join or lead regular video calls, etc). If managed properly this idea can be a great communications centerpiece.

Weekly all-hands Video Conference: This is less about remote work and just good business practice. I have seen this work well in traditional and remote businesses, but few business leaders do it. Weekly highlights are shared by the CEO with support from other leaders in the organization. A master slide deck is prepared in Google Slides, with input from various departments. Friday afternoons are a good time as it ends the week on a high note (and serious note if things need attention) and helps start the next week off with a positive sentiment.

Coworking Passes: In addition to virtual coworking, it’s a good idea to include at least one or two days a week of onsite coworking for those that feel they need to get out of the house and be around other professionals. This has been widely adopted by some of the larger distributed organizations. Going completely virtual can be a bit of a shock to the system, this helps ease the transition and keeps everyone feeling like they are still human.

Offsite Team Events: With the reduction or elimination of in-person face time, team-building exercises now become more important. Organize quarterly or semi-annual gatherings at your favorite coworking establishment or pick a fun recreational location. If your company is large enough, you can divide these meets into geographical pods. Schedule at least one all-hands meeting per year with some fun events to ensure everyone feels like they are part of the organization. Do yourself a favor and don’t leave this to the last minute, you will have a poor turnout, piss people off and defeat the purpose.

Collaboration, Productivity & Automation Tools

There are literally dozens of team collaboration tools you can use to empower your remote workers. Try as many as you can. Select tools that are intuitive and self-explanatory, this will cut down on the learning curve. Make sure the vendors you select provide mobile support so your teams can be connected via phone or tablet.

Here are some that I have used and have found work well for remote teams, in no particular order:

  • Cloud business phone system with SMS:
    Google Voice, Dialpad or roll your own by using CPaaS & WebRTC eg. SignalWire — (btw, I work here).
  • Cloud storage, word processing, spreadsheets, slide decks:
    Google G-suite, Microsoft Office 365
  • Text-based team collaboration
    Slack
  • Software source repo and issue tracker
    Jira & Github
  • Task Management
    Trello, Wrike
  • Video & Web conferencing
    Zoom, Hangouts
  • Support
    Zendesk
  • Sales CRM
    Salesforce
  • Product Management
    Product Board, Trello
  • CRM and Marketing Management
    Hubspot
  • Automation
    Zapier
Virtual Coworking

As this remote work thing matures, we will see more purpose-built applications that aim to bring our teams closer together, virtually.

We are already seeing some activity in this space with the recent capital raise by Tandem, which has a sidecar collaboration application that works pretty well with Slack.

Tandem — virtual coworking app

Another is Sococo, which looks more like a virtual workspace with web conferencing. They take an interesting approach to how they visualize the virtual office and how team members work together. I actually think this is an intuitive idea, although it does feel a wee bit recreational. To be fair, I have not used the service.

Sococo — virtual workspace

It is expected these solutions that personalize and aid remote teams in working better together will certainly evolve. It is still unclear if customers would opt-in for purpose-built applications or just use several disparate applications to do the same job, time will tell.

The next post will speak to the future of remote work. We will be touching on AI & bots, VR & AR in the remote work realm, some of which are being used today and some are not far off at all.

If you work in a distributed company, I’d like to hear from you. What tools do you use today and how are they working for you? How often do you use video/web conferencing as part of your daily routine? If you prefer sharing your comments or questions privately, feel free to shoot me a text message or call anytime: (877) 897–1952 (Note: All calls will be recorded).

None of the ideas expressed in this post are shared, supported, or endorsed in any manner by my employer.

How to pick the right WebRTC mobile SDK build for your application

bloggeek - Mon, 01/27/2020 - 13:00

Most developers should just use libwebrtc that Google supplies for their WebRTC mobile SDK. Which exact release to pick and at what pace to update is a more nuanced decision one needs to make.

* I’ll be using SDK and library as well as mobile WebRTC SDK and mobile WebRTC library interchangably in this article, so bear with me

In the release notes of WebRTC M80 (=the changes made to WebRTC in the upcoming Chrome 80), Google added an interesting deprecation announcement:

Deprecating binary mobile libraries

The webrtc.org open source repository contains platform implementations for Windows, Mac, iOS and Android. These are primarily utilized for automated testing. Browsers and other applications that embed WebRTC often have developed their own highly optimized platform code with custom capture/render components matching the applications architecture.

We have decided to discontinue the distribution of precompiled libraries for Android and iOS. The script for creating the AAR library can be found here, the build script for iOS is located here.

Lets try to decrypt this deprecation and explain it, and then see what developers should be doing (and are doing already).

Official WebRTC precompiled libraries for Android and iOS

To understand this announcement we first need to understand what’s this WebRTC precompiled mobile libraries is exactly.

From the start, it was possible to use WebRTC on mobile. Google introduced WebRTC in Android Chrome in July 2013, less than a year after Chrome 23 was released on desktop with WebRTC support. Since that moment and on the codebase for libwebrtc (Google’s implementation of WebRTC) included support for mobile.

Up until 2016, Google never did offer any compiled binaries. Developers had to figure out the build process and handle it on their own. Several github repositories held compiled WebRTC source code for mobile and were somewhat popular.

In November 2016, Google introduced the official WebRTC precompiled libraries for Android and iOS, which they have maintained up until today.

Most of the vendors out there who are building applications or even SDKs (think CPaaS vendors such as Twilio or Nexmo) make use of libwebrtc as well for their basis of the VoIP stack implementation they run for their own clients. This was true BEFORE Google announced official WebRTC precompiled mobile SDKs and it will continue to be the case even now after Google discontinues the distribution of these mobile SDKs.

How did we get here?

Discontinuing to distribute the WebRTC mobile libraries

First off, it is important to state and understand: Google uses the same WebRTC codebase that goes into Chrome also in the Google Meet and Google Duo mobile applications running on Android and iOS.

There is no plan or incentive for Google to stop maintaining the libwebrtc codebase for mobile operating systems.

That being said, Google just stopped distribution of its WebRTC mobile libraries.

Why?

Because for all intents and purposes they were useless.

All vendors I know who run their products in production for mobile either use a third party SDK (open source or commercial) or have their own custom build of libwebrtc.

This is the case partially because the precompiled binaries from Google are somewhat useless. Here’s the official CocoaPod for Google’s WebRTC project:

The version mentioned here is 1.1.29400. What exactly does this relate to?

  • The WebRTC implementation just got an internal milestone at Google for supporting 1.0 of the specification (at around the same time of the last release of this CocoaPod)
  • WebRTC releases are versioned based on the Chrome release they belong to, and we’re now at 79, readying ourselves for 80
  • Nowhere on this page or elsewhere is an indication when are these binaries created or from which branch of the code. There seems to be no easy way (or no way at all) to align them with the browser releases of the same codebase
  • There is no explanation or release notes for any of these libraries. How do you know what was fixed, modified, deprecated or added?

This made the binaries useless without giving them any real chance in life, which led to their discontinuation.

The Google WebRTC team had two alternatives here:

  1. Fix the broken part of these releases, mainly by synchronizing them with real releases of WebRTC and maintaining clear release notes for them
  2. Discontinuing this effort as it causes more headaches than it was worth at its current state

They chose discontinuation. Probably because of what I’ll be sharing with you next.

What WebRTC mobile SDK should you use now?

This is the real question. It is the one developers had to deal with before, during and now after the age of Google’s official precompiled mobile libraries for WebRTC.

There are two routes to take here for any developer who needs a WebRTC SDK (I am ignoring those using higher level abstractions such as SDKs provided by CPaaS vendors):

  1. Use Google’s libwebrtc project, compile and maintain it on your own
  2. Go with another third party library

Between these two alternatives, the majority of the developers are choosing option (1). Why? Because let’s face it – no other library today offers the same feature richness, quality and interoperability with what runs in the browser that everyone uses.

There are a multitude of alternatives to Google’s libwebrtc, but they are all lacking in at least one way (probably more):

  • Commercial and cost $$$ to use
  • Don’t implement any codecs. You are expected to “bring your own”
  • Lack proper support for effective bandwidth estimation
  • Don’t offer acoustic echo cancellation
  • Not implementing peripherals support for media acquisition and/or playback (microphone, speakers, camera and display)
  • Interoperability with Chrome’s WebRTC. All the time. Including support for the latest features being added to it

I am sure I’ve left a few more gaps in that list.

Ask yourself why is Edge now based on Chromium and using Google’s WebRTC almost verbatim, or why Apple is relying on Google’s libwertc in a lot of its own implementation of WebRTC in Safari.

That said, there are very good reasons for using libraries other than Google’s libwebrtc:

  • Not needing a lot of what libwebrtc offers (if you need just the data channel for example)
  • Requiring specialized features, such as playback from file or other sources into a WebRTC session
  • Needing to run on “exotic” devices or operating systems (i.e – not classic iOS or Android mobile devices)

For the majority of the developers out there, libwebrtc is the right SDK to use on mobile.

Best practices in using Google’s libwebrtc mobile SDK

If you are going to use libwebrtc, what is it that you should be doing then?

Here are the best practices I’ve seen of companies using libwebrtc mobile SDK in production:

  1. Have your own codebase for libwebrtc that you compile and integrate into your application
  2. Don’t automatically upgrade to the latest libwebrtc release when that gets pushed out to a Chrome release. Doing that means releasing your application every 6-8 weeks, which is a brutal release cycle for most vendors
  3. Plan and aim for 2-4 upgrades of your libwebrtc SDK in your mobile application. Any less and you’re in danger of breaking interoperability with Chrome or at the very least missing out on optimizations, improvements and new features
  4. Think of libwebrtc as a starting point. You will have your own minor fixes and optimizations to it. Make sure they are well documented so that a future upgrade of the library doesn’t become too complex and risky a task
  5. Revisit these fixes and optimizations you are making once a year. Some of them might not be needed any longer, and carrying them further might take too much effort or hurt performance
  6. Try to contribute fixes you’ve made back to libwebrtc. This will be a long and frustrating process, but I suggest going through with it
  7. Roll out slowly. Have it tested internally, then with a small % of your audience and then with everyone
  8. Make sure you can rollback…
FAQ about WebRTC mobile SDK library Which library SDK should I use for WebRTC on iOS and Android?

Use Google’s libwebrtc implementation. This is by far the most comprehensive and popular library for client-side WebRTC implementations. Other alternatives exist, but you need to understand what you sign up for when you opt for using them.

What version of Google’s WebRTC should I use for my mobile application?

The best practice here is to pick something that is new but not too new. Pick on of the latest releases that is considered to be stable. Don’t upgrade immediately to the latest release as that is time consuming. Make it a point of upgrading your libwebrtc 2-4 times a year.

Are there client-side WebRTC libraries other than the one Google publishes?

Yes there are. PION and GStreamer come to mind in the open source scene. I’d seriously consider the reasons for not using Google’s libwebrtc in favor of anything else though, mainly due to its feature richness and immediate interoperability with Chrome and all other browsers.

Reduce your risks with WebRTC

Looking to lower their risks and increase their time to market with that WebRTC project you’re working on?

I can help you with this; when it comes to WebRTC and communication technologies, I help my clients get the answers they need and make sure their project doesn’t get delayed.

Contact me if you are interested.

The post How to pick the right WebRTC mobile SDK build for your application appeared first on BlogGeek.me.

Pages

Subscribe to OpenTelecom.IT aggregator

Using the greatness of Parallax

Phosfluorescently utilize future-proof scenarios whereas timely leadership skills. Seamlessly administrate maintainable quality vectors whereas proactive mindshare.

Dramatically plagiarize visionary internal or "organic" sources via process-centric. Compellingly exploit worldwide communities for high standards in growth strategies.

Get free trial

Wow, this most certainly is a great a theme.

John Smith
Company name

Yet more available pages

Responsive grid

Donec sed odio dui. Nulla vitae elit libero, a pharetra augue. Nullam id dolor id nibh ultricies vehicula ut id elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.

More »

Typography

Donec sed odio dui. Nulla vitae elit libero, a pharetra augue. Nullam id dolor id nibh ultricies vehicula ut id elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.

More »

Startup Growth Lite is a free theme, contributed to the Drupal Community by More than Themes.