I haven’t blogged here in some time, so I figured that since the topic is relevant this would be good a good opportunity to dust off the old blog (webrtc.is / sipthat.com) and post something we have been working on at SignalWire. I am quite passionate about WebRTC and real-time communications so it’s great to be helping bring it to life at SignalWire!
We all know and love <cough> SIP, so we decided we would enable the use of SIP over WebSockets at SignalWire. This new offer also enables functionality like WebRTC with SIP over WebSockets.
This means our customers can now use off the shelf JS libraries, like JSSIP to create basic web experiences for their users, powered by SignalWire. It used to be a bit of a PITA, to create services that provided users with seamless online communications. Now it’s a breeze, and when using SignalWire it’s also very affordable.
For now, we are enabling basic calling and video capabilities, the advanced functionality (including video conferencing) will come in conjunction with a future release of a SignalWire RELAY JS library.
Personally, I can’t wait to see what creative minds will build using this technology with SignalWire on the backend.
WebRTC doesn’t really connect people, but the way you think about it signaling is important to your WebRTC application.
WebRTC is… still just a little confusing…Tsahi, i’m reading the book recommended by Loreto & Romano but the examples are outdated. With regards to the SDP signal – if peer A is on a webRTC application, but peer B is surfing youtube – How does peer B get notified of an offer? It would have to go to peer B’s email address right? — because there is no way of knowing peer B’s IP address. Please help.
A few quick things before I dig deeper into this WebRTC connectivity thing:
How well do you know WebRTC? Check it out in my online WebRTC quiz.
I’ll try to use a kind of a bad comparison here to try to explain this.
Let’s say you are the proud owners of a Pilates studio. You’re the instructor there (#truestory – at least for my wife).
My wife gives Pilates lessons at different hours of the day. These are private lessons so it is rather flexible on both sides. But let me ask you this – how do people know when to come for a lesson?
This being Israel, they usually communicate with my wife via Whatsapp to decide together on the date and time. Usually, people stick to the day of week and time and start communicating only if they can’t make it, want to reschedule or just make sure the lesson is still taking place.
Back to WebRTC.
WebRTC is that Pilates studio. It does one thing – enables live media to flow from one browser to another. Sometimes also non-browsers, but let’s stick to the basics here.
How do the people who need to share or receive that live media connect to each other? That’s not what WebRTC does – it happens somewhere else. And that somewhere is the signaling mechanism that you pick for your own application. I am calling it a mechanism and not a protocol, since it is going to be a tad more confusing in a second.
Now let’s go back to WebRTC, signaling and connecting people and look at it from a point of view of different scenarios.Scheduled Meeting
We’ll start with a scheduled meeting. At any given point in time, I have a few of those coming up. Meetings with clients, partners and potential clients. Here’s one such calendar invitation:
This one happens to take place using Google Meet. Who’s calling who? No one really. I’ll just click that link in the invite when the time comes and magically find myself in the same conference with the other participants.
In most scheduled conferences, you just join a WebRTC link
Where do you get that link to use?
Some of these services allow inviting people from inside the meeting. That ends up being sent to them via email or an SMS as a link or just dialing their phone (without WebRTC).Ad-hoc “upgrade” of text chat to video conference
There are ad-hoc calls. These usually start from a chat message.
Often times, I’d rather text chat than do a voice or a video call. It has to do with the speed and asynchronous nature of text. Which means that I’ll be chatting with someone over whatever instant messaging service we select, and at some point, I might want to switch medium – move from text to something a bit more synchronous like video:
Like this example with Philipp – most of our conversations start in Hangouts (that’s where he is most reachable to me) and when needed, we’ll just jump on a call, without planning it first.
Who is calling whom here? Does it matter?
What happens here is that both of us are already “inside” the communications app, so we both have a direct link to the service. Passing that information from one side to the other is a no brainer at this point.
So how will that get signaled? However you see fit. Probably on top of a Websocket or over HTTPS.I am calling you on the “phone”
What if there’s nothing pre-planned, so it isn’t a scheduled meeting. And we haven’t really been on a text chat to warm things up towards a call. How do you reach me now?
How do you “dial”?
Puneet is one of our support/testing engineers at testRTC. While he will usually text me over slack to start a call, he might just try calling directly from time to time.
What happens then?
I am not in front of my laptop with the Slack app opened. My phone is on standby mode. How does it start ringing on me? What does WebRTC do to get my attention?
The phone starts dialing because it received a mobile push notification. I’ve got the Slack app installed, so it can receive push notifications. Slack invoked a push notification to wake up the app and make it “ring” for me.
The same can be done with web notifications. And there are probably other means to do similar things in IOT devices. The thing is – this is out of scope for WebRTC, but something that is doable with the signaling technologies available to you.Contact center agent answering calls
When a contact center adopts WebRTC to be able to migrate its agents from using desktop phones or installed softphone towards WebRTC, calls will end up being received in the browser.
This happens by integrating callbars inside CRMs or just by having the CRM implement the contact center part of the equation as well.
What happens then? How do calls get dialed? (the above is a screenshot taken from Talkdesk’s support site)
They go through PSTN towards a PBX. More often than not, that PBX will be based on Asterisk or FreeSWITCH, though other alternatives exist. PBXs usually base themselves around the SIP protocol, which will lead to two alternatives on the signaling protocol that will be used by WebRTC in the browser:
In both cases, the contact center agent is registered in advance. It is also marked as “available” in most contact center software logic – this means that incoming calls waiting in the call center queue can be routed to that agent. So it is sitting and waiting for incoming calls. In some ways, this is similar to the upgrade from text chat scenario.Connecting? WebRTC?
When it comes to actual users, WebRTC doesn’t get them “connected”. At least not from a signaling point of view.
What WebRTC does is negotiate the paths that the media will use throughout the session. That’s the “offer-answer” (or JSEP) messages that pass between one WebRTC entity to another. And even that isn’t sent by WebRTC itself – WebRTC creates the blob of data it wants to send and lets your application send it in any way you see fit.
Still confused? There’s a course for that – my online WebRTC training. The first module (out of eight modules) is free, so go learn about WebRTC.
WebRTC wins over competition because there is no competition – browsers offer only WebRTC as a technology for web developers.
It was raining and miserable this last Saturday. I had lost of ideas for articles to write for BlogGeek.me in my backlog, but none of them really inspired me to action. The 8yo went to his cousin. The wife had her own things to do. My 11yo daughter was bored to death. She comes to me and says: “Can we do a trip outside to the park? I need some fresh air.” How could I answer besides saying yes?
The rain stopped a bit, so we went outside. What she really wanted wasn’t fresh air, but a chaperone to the closest candy vending machine. They are having a game at school for Purim, where she needs to bring small presents and candies to another kid in her class without her knowing who is pampering her. She needed an extra candy.
How is this related to WebRTC? It isn’t.
When I asked her about her plans for this game, she mentioned the trinket she planned on giving today –
2 mechanical pencils.
And that’s definitely WebRTC related.
A quick conversation ensued between me and my daughter – are these 0.5 mm or 0.7 mm point type? My daughter went to explain that it might even be 0.9 mm.
So many alternatives.Competing standards
It got me thinking:
With analog video recording we had VHS and Betamax.
Paper size? A4 and Letter.
Power frequency? 50 Hz and 60 Hz.
With VoIP signaling we had H.323 and SIP. And also XMPP.
Audio and video codecs? A shopping mall of alternatives.
Web browser streaming? HLS and MPEG-DASH.
Inches and Meters. Left side vs right side driver in cars.
The list is endless.WebRTC standard
But browser based real time media communications?
There. Is. No. Other. Alternative.
We had that short romance around ORTC, which ended with ORTC dead and its main concepts just wrapped back into WebRTC.
What other technology would you use or could you use inside a browser to do a video call?
The other alternatives just don’t cure it (including what Zoom is presumably doing).
What does that mean exactly? It gives us a kind of a virtuous circle.
For the most part, there’s no question if you should select WebRTC these days. There’s also no question what are the alternatives (there usually are none). It isn’t a question if WebRTC is getting adopted, used, growing or popular.
When our window to the world is the browser, then WebRTC is what you use.
For mobile apps or other devices, the need for browsers or just having an ecosystem around the technology picked translates again to WebRTC.
Thinking of using real time media technology? That’s synonymous to WebRTC.
Want to learn more about WebRTC? Check out the first module of my online course – it is free.
I know I am. I am constantly surprised what people are doing with WebRTC.
Here’s something I hear a lot:
How do you make a call with WebRTC?
Well… you don’t. Not really. And in many scenarios – that term call, or dialing, or answering – has no real meaning.
Here’s a funny opposite for you:
Kids in front of old phones don’t know what to do. It isn’t “natural”. Guess what? Nothing is. The things that are natural to you are things you’ve learned, and are now used to. They are a set of rules in your upbringing.
If you come from a VoIP background, then WebRTC brings with it quite a challenge to your world. I know – I had 13 years of VoIP background before WebRTC was announced. Since that announcement, I’ve been surprised time and again by what people are doing with WebRTC. Especially people who shouldn’t be able to even use it because they don’t know VoIP enough.
Coming from VoIP? Interested in streaming? Broadcasting? Some other communication use cases? Tomorrow I am hosting a free webinar – Google Does Gaming: WebRTC Man-to-Machine Use Cases
When we all first started out in this adventure called WebRTC, what we’ve seen was video calling. It was all about face to face meetings. It took time to think about WebRTC in other settings and for other use cases.
And here we are. Years later, dealing with WebRTC in the aid of cloud gaming. Google used WebRTC in Project Stream, where they showcased playing the game Spartan through a web browser – the game itself was rendered in Google’s cloud.
Who would have thought WebRTC would be used for that?
Anyways, if you come from a VoIP background, here are some aspects of WebRTC you’ll need to unlearn and relearn – I am still grappling with them myself every once in awhile:Signaling? What’s “Signaling”?
With any other VoIP protocol out there, it seems like we’re starting off with signaling.
SIP? That’s signaling.
WebRTC? Nope. No signaling. Sorry.
What does that mean exactly? That you can use whatever signaling mechanism/protocol you see fit. That’s assuming you can get it to run inside a web browser or wherever it is your application needs to operate.
SIP, which is the most popular VoIP signaling protocol out there, is probably an overkill for a lot of WebRTC services. I tend to look at it as a hindrance when I see it in architectures – I often ask time and again why is it there to make sure there’s a real need other than saying someone needed signaling for his WebRTC application.You. Don’t. Answer. Calls.
There’s no such thing as a call while we’re at it.
I remember doing a live WebRTC training a couple of years back. I had to hammer out of the people the need to ask incessant questions about dial, answer, mute, hold and a bunch of other paradigms they thought are golden rules in communications.
If you feel that way too, then look at that video at the top of this article again. What made sense 20 years ago doesn’t hold water today.
WebRTC isn’t fixed in any specific concept of how “calls” are made. I prefer using the term session and deal with the initiation part of it on a case by case basis.
If there’s no need for dialing or answering – just don’t force it on your WebRTC solution.It isn’t only Google
Most days of the week, I like thinking of WebRTC as the source code that resides on webrtc.org. That’s the codebase Google is maintaining and putting inside its Chrome browser.
The thing is, many end up modifying it for their own needs. They:
There are some really interesting “mods” to the vinyl WebRTC implementations out there, usually held privately for internal use of companies. In many ways, this is a shortcut to building your own media engine from scratch.There’s more than one way
What I like about WebRTC is that usually, there’s a single way of doing things with it: everything is encrypted – you can’t override that; it defaults to multiplex and bundle its media connections; the list goes on.
How you use it is a totally different story.
Each SFU implementation is different than the other. There are different ways to record a session. Different ideas and approaches to broadcasting at low latency.
The “right” answer differs a lot not only based on the use case, but also on the business model, the developers available, the DNA of the company, etc.Wasteful can be just fine
There’s also a school of thought that never really existed with VoIP: the “good enough” approach – one where we’re just fine with not optimizing everything and leaving things it a kind of a mediocre stage that is good enough for what we’re trying to do. It may eat up to much bandwidth or tax on the CPU. Or just not be how things are done around here. But it works. Good enough.
Heck – the default WebRTC implementation does it on its own, deciding to waste 1.7Mbps for a VGA resolution encoding instead of limiting it to 800kbps or less. Such a waste of good resources.
I learned to love this approach (and then try to optimize it with my clients).How do you think about WebRTC?
What about you?
What mistakes you see people make when thinking about WebRTC that fits the web or VoIP better?
What things do you need to unlearn about WebRTC?
Coming from VoIP? Interested in streaming? Broadcasting? Some other communication use cases? Tomorrow I am hosting a free webinar – Google Does Gaming: WebRTC Man-to-Machine Use Cases
The post Are you blocked by the rules of your upbringing in your WebRTC application? appeared first on BlogGeek.me.
Thanks to work initiated by Google Project Zero, fuzzing has become a popular topic within WebRTC since late last year. It was clear WebRTC was lacking in this area. However, the community has shown its strength by giving this topic an immense amount of focus and resolving many issues. In a previous post, we showed how to break the Janus Server RTCP parser. The Meetecho team behind Janus did not take that lightly. They got to the bottom of what turned out to be quite a big project.
Some believe WebRTC isn’t ready. I think it is ready. But when will WebRTC 1.0 be available?
Ready or not, WebRTC is here. The thing is, we still don’t have a closed standard specification we can all print and take on a plane to read for our enjoyment. There are drafts – but nothing that is final.
And once final, does it mean that it is available?
There are 3 parts that needs to be addressed to answer this question. I’ll deal with only two of them (skipping the IETF one):
Want to learn more about WebRTC, the various components in its specification and what compute power you need for each WebRTC server? Try out my free video course:
Learn about WebRTC servers
Want to learn more about WebRTC, the various components in its specification and what compute power you need for each WebRTC server? Try out my free video course:WebRTC standardization
WebRTC as a standard is built out of two components:
Most of the industry is already viewing WebRTC as a done deal – so much so that the IETF already has an RFC for SIP over WebSocket. The only reason to have such an RFC is to be able to use SIP inside a browser, and the only way to use SIP inside a browser with media being sent or received would be by way of WebRTC. The people working at the IETF were so certain WebRTC will get an RFC of its own in 2014 already (5 years ago!).
Each of these organizations has its own set of rules, policies, governance and flow.
I’ve tried to keep the standardization of WebRTC at arm’s length. In the past I’ve been part of standardization processes related to H.323 and 3G-324M, going to ITU-T and 3GPP standardization meetings as well as acting as a co-chair of the 3G-324M activity group at the IMTC (dealing with interoperability). It is a tedious work that combines technology with politics. As fun as it is (at times at least), dealing with it as an employee of a company is different than doing it as a consultant. The value for me just wasn’t there.
For vendors? If you want to take a driver’s seat at this, and decide what gets more attention, then you should invest time in it.
But where are we with WebRTC then?W3C WebRTC status
I’ve asked Dominique Hazael-Massieux about WebRTC’s status. He works as a W3C Staff dealing with WebRTC. Here’s what I got –
When it comes to W3C, where the browser WebRTC APIs are being defined, WebRTC is considered to be at the CR stage.
CR means a Candidate Recommendation. We’ve moved from a Working Draft (WD) towards a Candidate Recommendation.
Next up would be PR – Proposed Recommendation, and from there, a Recommendation.
How do we move to the next step?
That first one is “easy”. Get the people writing the spec into a room. Have them agree. Then have someone write down the agreement on “paper”. Get everyone to read it. And agree again. Rinse and repeat. It’s never easy.
That second one of implementing in browsers? That’s also not easy. They have other things on their minds as well. And WebRTC is pretty darn complex to implement. But we’re getting there.
That third one of interoperability testing? With a test suite. That tests for the various features? This is downright suicidal. And daunting.
All that work needs to be done for “free”. There’s no direct money to be made out of it. But lost of hours needs to be spent by many people to get it done. We’re getting there, but we’re not there yet.WebRTC 1.0 browser implementation
And then there are the browser implementations.
The specification is as good as its implementations. People always complain when I suggest following the Chrome behavior in WebRTC as opposed to implementing against the specification. That’s where theory and expectations meets reality.
At the end of the day, your service will need to:
In the first case, Chrome wins on market share; Microsoft Edge will be migrating to Chromium. And for most use cases, Chrome is the first browser to target anyway.
In the second case, if you are using the code in webrtc.org for your app, then you are effectively basing your app on Chrome’s WebRTC implementation.
Better go with what’s available now than what will be ready some time in the future.
In the past, the changes we’ve seen in browser implementations of WebRTC revolved a lot around media optimizations and interoperability across browsers. What we are seeing now a lot more is changes in the API layer, where browsers are shifting towards the WebRTC 1.0 specification. This is necessary because:
These changes mean one sad thing though. You can be certain in one thing – during 2019, WebRTC implementations in browsers is going to break existing apps multiple times. This is due to the changes taking place. We are seeing migration from Plan B towards Unified Plan, modifications to the connection state machine, and an experimental implementation of mDNS. There’s more that I probably forgot and more ahead of us still.
The only certainty is that nothing is certain. You’ll need to continue investing in aligning with the browser implementations with each and every browser version release.When then?
The current intent is to be able to get to the PR stage for WebRTC somewhere in Q3 2019. Will it be postponed further? I don’t really know.
Interestingly, work has started in parallel about WebRTC NV – what comes next. I’ve covered the WebAssembly in WebRTC part of it in the past.
Want to learn more about WebRTC, the various components in its specification and what compute power you need for each WebRTC server? Try out my free video course:
Learn about WebRTC servers
WebRTC is a great piece of technology, assuming you can develop a coherent strategy on how you plan on using it.
There are two extremes happening in the enterprise communication space, and they are quite opposite in nature. On one hand, companies are striving towards more automation and this is coming to their contact centers by way of machine learning and bots “replacing” humans. On the other hand, many of us are striving for better and more meaningful communications. Be it for long distance relationships (personal as well as business ones) or by the use of machine learning (again) and context, to guide us through an interaction – being able to know beforehand the intents of people for example.
Enter WebRTC, which enables communications to take place anywhere – be it a mobile application, a physical device or a modern web browser. What WebRTC brings with it is better context of sessions and lower barrier of entry for enterprises to make use if this technology. Some enterprises use it to improve business agility or lower their operating costs. Others use it to create new businesses never before seen or to improve the communications with their customers or peers in the industry.
We are now 7-8 years since the announcement of WebRTC (depends on who’s doing the counting and from which date), but in many ways, a lot of enterprises (I don’t want to say most) have failed in to capture the value they initially envisioned from using WebRTC. In many cases, the lack of any thoughtful strategy created a rush towards initiatives that never really matured.
Through my work with many clients on their WebRTC initiatives along with discussions with many others on their projects and services – failed as well as successful ones, I’ve seen a few challenges that crop up consistently across such initiatives.#1 – Where to begin?
WebRTC is a versatile and powerful building block in your arsenal. This means that you can do a lot with it. That range of utility can be overwhelming, oftentimes leading to wasted resources. The other problem is that WebRTC can’t do everything, while the expectations of it are rather high. This leads to requirements and plans that are often not grounded in what can be done in reality or within the allocated budget and resources.
Deciding what to build using WebRTC requires an understanding of the capabilities and limitations of WebRTC coupled with a clear view of the communication problems you are trying to solve for your customers. There’s a lot of feature creep happening when it comes to WebRTC. I find myself asked about a simple video chat service for 2 people, but once you dig a layer deeper, you see requirements for group video calls, recording and even broadcasts as part of the project. Being able to see the full picture, and map it back into requirements and a roadmap comprised out of multiple phases is an important first step in any WebRTC initiative.
There are a few other things to keep in mind –Integration with existing infrastructure
Oftentimes, you’d be planning on adding WebRTC to an existing service. This can happen in many ways:
This requires extra care in how WebRTC gets introduced as it isn’t going into a green field where anything you pick immediately fits your needs.Cloud migration and transformation
WebRTC was born in the cloud era. Many of its deployments are cloud based.
Most of its uses in non-cloud environments are actually enabling guest access from the public cloud towards the internal communications infrastructure. In other cases, it just needs to integrate with on premise data centers for things like users database and policies.
This places an additional strain on enterprises who are just starting out their migration towards the cloud.Not your regular web application
WebRTC is different than other web technologies. It has a lot more moving parts to get to a minimal viable product, and then there’s that media quality issue to contend with. Its deployment needs to start as a global one for many of the use cases.
What are the server side components needed for WebRTC? Learn that in my free online mini video course.
Register now#2 – Who should I have on my team?
Putting a team of developers on a WebRTC initiative is a daunting task. There are multiple disciplines they need to come from and the myth of a full stack developer that can do it all gets stretched even further here, as that superhero needs to also know about media processing, WebRTC APIs, browser changes and standardization processes.
Here’s what i wrote a while back about WebRTC developers after discussing the topic with a few people who manage/hire them.
Some other aspects you’ll need to decide on:Internal vs External
Will you be relying on your existing engineering team or will you be outsourcing some/most of the project to an external vendor? Assuming you decide to go for an external vendor, who will maintain the service on an ongoing basis?Multidisciplinary
The team in question needs to be multidisciplinary, capable of handling anything from media processing, to mobile app development, to backend integration work and ongoing DevOps and maintenance.
There needs to be a skilled product manager and a system architect who understand WebRTC enough to know what is possible and what’s… less possible. What incurs risk and where quick wins can be found.Which new skills are needed?
Your teams. Do they have the necessary skills?
Here it goes to a lot more than just developers. There are product managers, testers, DevOps people, support staff.Do I need to enhance some in-house capabilities?
What skills are you missing? If you operate everything on premise and WebRTC is forcing you to start using cloud services, then this is an in-house capability you will need to start contending with.
The same goes for mobile application development, going global in how you deploy servers, etc.
Looking to beef up the WebRTC experience and skills of your team? Check out my WebRTC training (the first module is free).
Different companies have different DNA to them. That often dictates what their technology stack will look like and how they’d prefer to partner/hire.
There are three main aspects that need to be taken into account when picking a WebRTC technology stack:Open source / commercial
You might favor open source components and frameworks for your WebRTC service or you might be someone who prefers a commercial offering with a company focused on that product development.
Both alternatives can come with support contracts but companies seem to prefer one or the other.
Which alternative will it be for you?Hosted or on prem?
These two approaches means different technology stacks, levels of expertise and staffing on your end.
Are you planning on hosting this on your own, in your data centers, on bare metal or in the cloud? Or are you going to have someone else host the service for you? Which parts of it will be managed and which will be self managed?Acquisitions
WebRTC is still relatively new, with the vendors ecosystem dynamically shifting. There have been quite a few acquisitions in this space. These acquisitions sometimes removed solutions from the market, made them weaker or made them stronger.
When selecting a technology stack, the potential acquisition scenario of the vendors in question needs to be taken into consideration as well.Fit for the requirements
This one seems silly but it is highly relevant and important.
Are you sure the technology stack you’ve selected can do the things you want it to do?
I’ve seen too many cases where the framework used wasn’t up for the task. Things like taking signaling when media servers needs to be used, picking a CPaaS vendor when the scenario requires too much control of media processing, etc.
Just look at what WebRTC signaling alternatives people have these days.#4 – How do I know it is working?
You built it. Tested it in the lab. Did a call or two with your colleagues. Went home and showed it to a friend.
Does it scale? Will it work properly?
I had a customer recently who is developing a group video calling feature. He wanted to test the service with around 20 people in a single room. It wasn’t easy to find 20 people to run that one scenario. And when he did – things broke and needed fixing. So he had to find 20 people to run it again once a fix was put in place.
Testing is often neglected when it comes to WebRTC applications and it shouldn’t be. Take this one seriously. You can cobble up a testing environment on your own (there are even a few open source projects that can help you out here) or you can just use testRTC (I am a co-founder there) and start running tests within a couple of hours.#5 – What do I track?
Tracking websites is rather “easy” these days. Use Nagios, Cacti, Zabbix or any other open source tool that sounds like a disease. Or use something like New Relic or DataDog to do it managed in the cloud.
Problem is, these tools only cover the machines metrics and performance and they don’t really watch for the media and its quality (or even if a session got connected for that matter). There’s no end to end monitoring/tracking.
You will need to collect WebRTC related metrics from either the backend or the devices (or both). You’ll need to track it for quality.
You’ll need to monitor your service (we’re doing a webinar on WebRTC monitoring next more @ testRTC – register to join).How can I get help?
There are various ways in which you can get some help for what you are doing.
The best approach is probably to get some external assistance in what you are doing as part of your research and planning – even before you go outsourcing the whole project (if that’s the path you are going to take).
You can contact me for that, or go to other consultants. Some of the outsourcing vendors offer such consultancy service as well. Whatever you do – don’t go it alone. At least not in the planning stages.
The post The five make-or-break WebRTC challenges you need to address appeared first on BlogGeek.me.
Is QUIC in WebRTC a solution looking for a problem or a real requirement?
QUIC is the next evolution of browser transport protocols. I’ve written about it in 2015, when Google started experimenting with the idea of replacing SCTP with QUIC for data channels. Three and a half years later, and we still don’t really have QUIC in WebRTC – at least not until last month. Google decided to come out with a new RTCQUICTransport for WebRTC in Chrome and written a post about it on their Chrome Developers site.
UDP, TCP, SCTP & QUIC. How do these transport protocols compare?
Download my free Transport Comparison TableWhat is QUIC again?
I am not going to go into the technical details – I’ve done that in the past already, and there are other places for that. I want to focus here on the bigger picture.
If you look at the timeline of web transport protocols, it looks something like this:
We had TCP and UDP for some 40 years now. HTTP 1.1 is defunct, but runs most of the internet at the moment. HTTP/2 is growing nicely in adoption. According to W3Techs, we’re standing on ~33% adoption for HTTP/2 (Feb 2019):
HTTP/2 came to be after Google came out with SPDY, a “fix” for HTTP and got parts (most?) of it wrapped into HTTP/2 to get it standardized.
HTTP 1.0, 1.1 and HTTP/2 are all built on top of TCP. Signaling, which requires reliability and causality won’t work on top of UDP without adding these characteristics. After around 40 years, it is time for a refresh. Enter QUIC. It uses UDP and works in ways that are better than TCP for signaling purposes.
QUIC follows a similar path – Google created it to “fix” the ailments of HTTP over TCP. the end goal here is to turn it into HTTP/3.
Since QUIC is built on top of UDP, it can handle a lot more than just HTTP signaling. Which is why it is becoming an interesting topic for WebRTC –Where QUIC in WebRTC fits exactly?
This is the real question. My answer to it in 2015 was this:
There are two places where QUIC fits in WebRTC:
1. In the signaling, which is out of scope of WebRTC, but interesting, as it enables faster connection of the initial call (theoretically at least)
2. In the data channel, by replacing SCTP with QUIC wholesale
Google’s answer in their post on Chrome Developers blog?
A powerful low level data transport API can enable applications (like real time communications) to do new things on the web. You can build on top of the API, creating your own solutions, pushing the limits of what can be done with peer to peer connections, […] WebRTC’s NV effort is to move towards lower level APIs, and experimenting early with this is valuable.
The QUIC protocol is desirable for real time communications. It is built on top of UDP, has built in encryption, congestion control and is multiplexed without head of line blocking.
Hmm… somehow they lost me in that explanation somewhere. This is about real time communications. It is about doing stuff on top of UDP. And it is about low level APIs. Great. Why do I need it again? For voice and video I already have SRTP in WebRTC. The SCTP data channel works quite well. So where exactly do I need this great thing called QUIC in WebRTC?
I think there’s merit, but it is in totally different places.
QUIC is about having a single, modern, common transport protocol for the web.
Here’s what we do today with WebRTC in terms of transport protocols:
There’s this popular drawing from the High Performance Browser Networking book that shows this amalgamation of protocols:
So many transport protocols in a single standard. This makes implementations of the backend more complex, as they need to be able to understand all these transport protocols as well. One can say that this is already common enough and widely used already that it is a solution looking for a problem, but the developer in me can appreciate unifying all these functionality over a single transport protocol.
Here’s how life will look like with QUIC in WebRTC:
Putting it into an architecture diagram of my own, we get this:
Much simpler.What do we gain?
Theoretically, we can multiplex signaling, voice, video and low latency data in a single QUIC connection. That’s powerful:
This isn’t going to happen in a day. Getting there is going to be a journey of multiple years and people will complain and whine about it along the way. Similar to what is happening today with WebRTC – whenever something is modified or something new is added – things tend to break (either because APIs get deprecated, behavior changes or just pure bugs).
Moving to a QUIC based stack is a huge undertaking – for the WebRTC stack, browser vendors and all the related internet infrastructure vendors.
Connecting to other realms such as SIP? That’s going to get even harder, as we move away from the domain of SRTP towards QUIC, more translations and protocol interworking will be required.
The question then becomes – is it worth all the fuss? Are we gaining enough to make this effort worthwhile?Can you use QUIC in WebRTC now?
To some extent you can. Check out the recent post on QUIC @ webrtcHacks for that.
I will be adding a new dedicated lesson to my online WebRTC course about QUIC – my goal is to have the most up to date and relevant WebRTC training curriculum in the market, so keeping up with these changes comes with the territory.
Interested in WebRTC? Check out my WebRTC course.
I don’t really know, but there’s a lot in this innocent “WebRTC JS library” question that isn’t clear without digging a lot further.
Every now and again (= a week or two) I get a question asking me to help with the selection of this or that open source component, pick a CPaaS vendor for a project, find someone to outsource WebRTC work to or hire a stellar WebRTC developer.
Many of these emails are about shortcuts. Give us that silver bullet. Shortcuts seldomly work with WebRTC.
Last week, I had a question come in. A startup is looking for a “WebRTC JS library” to use. Something that does 1:1 voice chat rooms, stores user profiles, etc. It also needed to be inexpensive – Twilio is too expensive for them. And a free alternative was their main preference.
The problem I had with it, is that this simple question of which WebRTC JS library should I use didn’t align that well with the set of questions asked.
This article is about what components are needed for WebRTC deployments. If you’re looking to dig deeper into the media paths in WebRTC, then join my free webinar: Mesh, MCU or SFU
Let’s break down WebRTC to its main components as seen from a network architecture perspective:
Here’s a slide I’ve been using to explain where a device gets connected to in a typical WebRTC session –Signaling
Signaling is how the devices reach out to one another. They can’t do it directly, since they don’t have each other’s IP address, and even if they could, we need some kind of a “protocol” for them to do that.
Signaling in WebRTC is… non-existent. You need to bring your own signaling. This approach confuses some developers, and probably causes this lack of a good solution that fits no-one and everyone at the same time.
Today, you can use SIP, XMPP, MQTT or just proprietary protocols as your signaling for WebRTC traffic. Each such protocol will have its own set of frameworks, services and SDKs that you can use. Some will be free (open source) while others will be licensable software or SaaS based.NAT traversal
NAT traversal is about being able to actually get media flowing.
WebRTC is P2P (peer to peer), meaning you can, in some cases, send media directly across devices. This is something that is impossible otherwise with web browsers. WebRTC also have a preference on using UDP, since it offers better real time low latency characteristics. It is also the only web browser traffic that makes use of UDP, which means it is sometimes blocked as well.
NAT traversal is how WebRTC get past these pesky issues, and it requires additional servers to help it out to do so. Some of these servers (TURN) may end up relaying all traffic through it…
At the end of the day, you will need to deploy these servers or pay for someone to do it for you (no free meals here).Media
Recording. Group calling. The need to control media paths. Broadcasting. All these end up requiring media servers in the backend. Ones that can process media in one way or another.
The most common approaches today is to use SFUs and solve most of the world/media problems with them. These also offer some signaling protocol of their own – my preference is usually to short circuit these and redirect all this traffic through a different signaling/messaging path – especially for the more complex applications.
Again, they come in different shapes, sizes and types – open source ones and commercial ones. You usually won’t be able to pay for them separately as a hosted service and will need to go to a CPaaS vendor to get the whole set of solutions – if you’re looking for the hosted/managed path.Other
Payments, user authentication and identity, the website itself and a large number of other things you might be needing.
These are really out of scope of WebRTC, but sometimes are provided by the various vendors and frameworks out there.Back to that question
What were we dealing with to begin with here?
looking for a “WebRTC JS library” to use. Something that does 1:1 voice chat rooms, stores user profiles, etc. It also needed to be inexpensive – Twilio is too expensive for them. And a free alternative was their main preference.
Here’s how I’d break this one down to try and understand what was asked:
When I get such jumbled questions, it feels like there’s a bit of a misunderstanding of what WebRTC is and about how the ecosystem of vendors and services has evolved around it.Want to learn more about WebRTC?
There are several things to do at this point if you need to grok WebRTC:
Fresh from the oven – an update to my first ever report – WebRTC for Business People. Download it for free.
It was time. Two years have passed since my last update to this report. In WebRTC-land, things deteriorate and become unusable quite fast. We now have WebRTC in all modern browsers (at least theoretically and to some scenarios) and Microsoft decided to place Edge on top of Chromium. On the vendor stories things have changed and shifted as well.
This, and the need to do something to start off 2019, I decided to write an update to the report. This time, with the assistance of Frozen Mountain who sponsored this update.
Besides the usual updates of reading the report and making sure it is as close to where we are with WebRTC today as possible (and adding more references and links while at it), I’ve also updated the use cases section. I consider this part the most important one in the report.
I removed a few of the stories and added others, ending up with a total of 28 vendor stories. While the groups of these vendor stories haven’t changed, the direction I’ve taken in some of them did.
Here’s what you’ll find in there:Tooling
The tooling section is usually the hardest one. With over 100 vendors in this space, I wanted to make a few distinct picks, each from a different angle of tooling. I decided this time around to also feature testRTC, a company where I am a co-founder (I am biased on this one, so sorry).Customer Services and Support
In the customer services space I wanted to make a change to reflect the growing adoption of “see what I see” type of contact center services, also known as “remote assistance” or similar names. To that end, I’ve featured Indeca4D who are making use of mixed reality in their solution.Enterprise Communications
In the enterprise communications space, it was time to put a UCaaS vendor – something overdue from the last round I guess. I picked Vonage for this one. They are unique also because they offer CPaaS (=Tooling) and contact center services.Webinars
For the webinars section, I decided to add AnyMeeting. I’ve used other platforms in the past, and after getting to know their platform somewhat more, I decided to start using it for my webinars in 2019. The first webinar will take place next week (feel free to register here).Healthcare
In Healthcare I’ve replaced one of the stories there for the story of GuruMD. One of the trends in this space is the creation of marketplaces and tools that independent doctors and clinics can start using with their patients or for attracting new clients.Education
For Education, I’ve added Soliya. I wanted to somehow emphasize that education is probably one of the most varied domains where you see WebRTC. Almost every vendor there is looking at education from a different angle, leading to different requirements and final product offerings.Social
Social… remained the same. The stories got a bit of a refresh where needed, but stayed mostly the same. I felt that Facebook, Houseparty, Snap and YouNow are relevant today as they were two years ago.Streaming and Content Delivery
In streaming and content delivery, I’ve replaced two vendors, deciding to showcase Google Project Stream and Limelight. Both bringing some strong validation to where WebRTC is headed and how it fits into these non-video calling domains.Download the report
If WebRTC interests you, then you should definitely read this report –
Tell me what you think about it.