2020 marks the point of WebRTC unbundling. It seems like the new initiatives are the beginning of the end of WebRTC as we know it as we enter the era of differentiation.
Life is interesting with WebRTC. One moment, it is the only way to get real time media towards a web browser. And the next, there are other alternatives. Though no one is quite announcing them the way they should.
We’re at the cusp of getting WebRTC 1.0 officially released. Seriously this time. For real. I think. Well… maybe.Towards differentiation
If I were to chart our path through this crazy world of WebRTC, it would look something like this:2020 marks the beginning of the differentiation stage for WebRTC
Towards the end of 2019, and at greater force during the pandemic, we’ve seen how the future of WebRTC looks like. It is all about differentiation.
Up until now, all vendors had access to the same WebRTC stack, as it is implemented by Google (and the other browser vendors), with the exact same capabilities in the browser.
I’ve alluded to it in my article about Google’s private WebRTC roadmap. Since then, many additional signals came from Google marking this as the way forward.
Today, there are 2 separate WebRTC stacks – the one available to all, and the one used internally by Google in native applications. While this is something everyone can do, Google is now leveraging this option to its fullest.
The interesting thing that is happening is taking place somewhat elsewhere though. WebRTC is now being unbundled so that Google (and others) don’t need to maintain two separate versions, but rather can have their own “differentiation” implemented on top of “WebRTC”.Unbundling WebRTC
At this point, you’re probably asking yourselves what does that mean exactly. Before we continue, I suggest you watch the last 15 minutes from web.dev LIVE Day Two:
That’s where Google is showing off the progress made in Chrome and what the future holds.
The whole framing of this session feels “off”. Google here is contemplating how they can bring a solution that can fit Zoom, that when 99% of all vendors have figured out already how to be in the browser – by using WebRTC.
The solution here is to unbundle WebRTC into 3 separate components:The components set to unbundle WebRTC
- WebTransport – enables sending bidirectional low latency UDP-like traffic between a client and a “web server”, which in our context is a media server
- WebCodecs – gives the browser the ability to encode and decode audio and video independently of WebRTC
- WebAssembly – a browser accelerator for running code and an enabler for machine learning
While these can all be used for new and exciting use cases (think Google Stadia, with a simpler implementation), they can also be used to implement something akin to what WebRTC does (without the peer-to-peer capability).
WebTransport replaces SRTP. WebCodecs does the encoding/decoding. WebAssembly does all the differentiation and some of the heavy lifting left (things like bandwidth estimation). Echo cancellation and other audio algorithms… not sure where they end up with – maybe inside WebCodecs or implemented using WebAssembly.What comes after the unbundling of WebRTC?
This isn’t just a thought. It is an active effort taking place at Google and in standardization bodies. The discussion today is about enabling new use cases, but the more important discussion is about what that means to the future of WebRTC.
As we unbundle WebRTC, do we need it anymore?
With Google, as they have switched gears towards differentiation already, it is not that hard to see how they shift away from WebRTC in their own applications:Google Stadia Does Stadia has a reason to use WebRTC?
Google Stadia is all about cloud gaming. WebRTC is currently used there because it was the closest and only solution Google had for low latency live streaming towards a web browser.
What does Google Stadia need from WebRTC?
- The ability to decode video in real time in the browser
- Send back user actions from the remote control towards the cloud at low latency
That’s a small portion of what WebRTC can do, and using it as the monolith that it is is probably hurting Google’s ability to optimize the performance further.
Sending back user actions were already implemented in Stadia on top of QUIC and not SCTP. That’s because Google has greater control over QUIC’s implementation than it does over SCTP. They are probably already using an early implementation of WebTransport, which is built on top of QUIC in Stadia.
The decoding part? Easier to just do over WebTransport as well and be done with it instead of messing around with the intricacies of setting up WebRTC peer connections and maintaining them.
For Stadia, unbundling WebRTC will result moving away from WebRTC to a WebTransport+WebCodecs combo is the natural choice.Google Duo & Google Meet Meet & Duo. Will moving away from WebRTC improve their competitiveness?
For Duo and Meet things are a bit less apparent.
They are built on top of WebRTC and use it to its fullest. Both have been optimized during this pandemic to squeeze every ounce of potential out of what WebRTC can do.
But is it enough?Differentiation in WebRTC
Google has been adding layers of differentiation and features on top and inside of WebRTC recently to fit their requirements as the pandemic hit. Suddenly, video became important enough and Zoom’s IPO and its huge rise in popularity made sure that management attention inside Google shifted towards these two products.
This caused an acceleration of the roadmap and the introduction of new features – most of them to catch up and close the gap with Zoom’s capabilities.
These features ranged from simple performance optimizations, through beefing up security (Google Duo doing E2EE now), towards machine learning stuff:
- Proprietary packet loss concealment algorithm in native Duo app
- Cloud based noise suppression for Meet
- Upcoming background replacement for Meet
Can Google innovate and move faster if they used the unbundled variant? Instead of using WebRTC, just make use of WebTransport+WebCodecs+WebAssembly?
What advantages would they derive out of such a move?
- Faster time to market on some features, as there’s no need to haggle with standardization organizations on how to introduce them (E2EE requires the introduction of Insertable Streams to WebRTC)
- Google Meet is predominantly server based, so the P2P capability of WebRTC isn’t really necessary. Removing it would reduce the complexity of the implementation
- More places to add machine learning in a differentiated way, instead of offering it to everyone. Like the new WaveNetEQ packet loss concealment was added outside of WebRTC and only in native apps, it could theoretically now be implemented without the need to maintain two separate implementations
If I were Google, I’d be planning ahead to migrate away from WebRTC to this newer alternative in the next 3-5 years. It won’t happen in a day, but it certainly makes sense to do.Can/should Google maintain two versions of WebRTC?
Today, for all intent and purpose, Google maintains two separate versions of WebRTC.
The first is the one we all know and love. It is the version found in webrtc.org and the one that is compiled into Chrome.
The other one is the one Google uses and promotes, where it invests in differentiation through the use of machine learning. This is where their WaveNetEQ can be found.
Do you think Google will be putting engineers to improve the packet loss concealment algorithm in the WebRTC code in Chrome or would it put these engineers to improve its WaveNetEQ packet loss concealment algorithm? Which one would further its goal, assuming they don’t have the manpower to do both? (and they don’t)
I can easily see a mid-term future where Google invests a lot less in WebRTC inside Chrome and shifts focus towards WebTransport+WebCodecs with their own proprietary media engine implementation on top of it powered by WebAssembly.
Will that happen tomorrow? No.
Should you be concerned and even prepare for such an outcome? That depends, but for many the answer should be Yes.The end of a level playing field and back to survival of the fittest
WebRTC brought us to an interested world. It leveled the playing field for anyone to adopt and use real-time voice and video communication technologies with a relatively small investment. It got us as far as where we are today, but it might not take us any further.Recent changes marks the shift from a level playing field in WebRTC towards survival of the fittest
For this to be sustainable, browser vendors need to further invest in the quality of their WebRTC implementations and make that investment open for general use. Here’s the problem:Apple (Safari)
Doesn’t really invest in anything of consequence in WebRTC.
- They seem to care more about having an HEVC implementation than in getting their audio to work properly in mobile Safari in WebRTC
- To date, they have taken the libwebrtc implementation from Google and ported to work inside Safari, making token adjustments to their own media pipelines
- I am not aware of any specific improvements Apple made in Safari’s WebRTC implementation to quality via the media algorithms used by libwebrtc itself
Apple cares more about FaceTime than all of that WebRTC nonsense anyways…Mozilla (Firefox)
Actually have a decent implementation.
- While Firefox uses libwebrtc as the baseline, they replaced components of it with their own
- This includes media capturer and renderer for audio and video
- They have invested a lot in improving the audio pipeline in Firefox, which affects quality in WebRTC
Their latest Edge release is Chromium based.
- They aren’t doing much at the moment in the WebRTC part of it is far as I am aware
- They could improve the media pipeline implementation of Chromium (and by extension Edge) for Windows 10
- Do they have an incentive?
- Would they contribute such a thing back to Google or keep it in their Edge implementation?
- Would Google take it if Microsoft gave it to them?
And then there’s Microsoft Teams, which offers a sub par experience in the browser than it does in the native application. All of the investment of Teams is going towards improving quality and user experience in the app. The web is just an afterthought at the momentGoogle (Chrome)
Believe WebRTC is good enough.
- There are some optimizations and improvements that are now finding their way into WebRTC in the browser
- But a lot of what is done now is kept out of the web and the open source community. WaveNetEQ is but an example of things to come
- It is their right to do that, but does this further the goal of WebRTC as a whole and the community around it?
Now that we’re heading towards differentiation, the larger vendors are going to invest in gutting WebRTC and improving it while keeping that effort to themselves.
No more level playing field.Prepare for the future of WebRTC
What I’ve outlined above is a potential future of WebRTC. One that is becoming more and more possible in my mind.
There’s a lot you can do today to take WebRTC and optimize around it. Making your application more scalable. Offering better media quality as well as use experience. Growing call sizes to hundreds or participants or more.
Investing in these areas is going to be important moving forward.
I’ve recently created a workshop covering the present and future of WebRTC, along with techniques and best practices employed by vendors in this space. If you want to learn more, you may want to take that workshop.
The post WebRTC unbundling: the beginning of the end for WebRTC? appeared first on BlogGeek.me.
WebRTC IP addresses and port ranges can be a bit tricky for those unfamiliar enough with VoIP. I’d like to shed some light about this topic.
A recent back and forth discussion that I had with one of the people taking my online WebRTC course made it clear to me that there are still things I take for granted because I come with a VoIP heritage to what it is I am doing today. Which is why this article here.
Connecting a WebRTC session takes multiple network connections and messages taking place over different types of transport protocols. There are two reasons why that decision was made for WebRTC:
- There was a desire to have it run peer to peer, directly exchanging real time media between two browsers. This requires a different look at how to handle network entities such as NATs and firewalls
- Real time media is different from other data sent over the internet in browsers. The transport and signaling protocols already available were just not good enough to preserve high quality and low latency
Lets see how connections get made over the internet and how WebRTC makes use of that.A quick explainer to internet connections
We will start by looking at the building blocks of digital communications – TCP and UDP.
The table below summarizes a bit the differences between the two:TCP and UDP are two extremes of how transport protocols can be expressed TCP connections
TCP is a reliable transport protocol. As such, it has a built-in retransmission mechanisms that is meant to make sure whatever is sent is received on the other end and in the same order of sending.
To do that properly, a TCP connection needs to be created. A TCP connection is a set of 4 values:
Source IP:Source port + Destination IP:Destination Port
How does one establish a TCP connection?
On your local machine you “bind” one of the local IP addresses of the machine to a local port number. That IP and port needs to be available and not taken for something else already. Then you need to try and connect to the destination IP:port.
Let’s say I want to connect to google.com.
For me, google.com resolves to the IP address 18.104.22.168. Assuming I want to connect to port 80 (a “randomly” picked port), I’d do the following: Bind a local IP:port (arbitrary local port), and connect it to 22.214.171.124:80.
Knowing the IP:port on source and destination of the connection means knowing the connection – there cannot be two such connections. Once you bind a local port to connect it to a remote address over TCP, that port cannot be reused until the connection is closed and done with.
If I want to open another TCP connection from my machine to the same address, I will need to bind yet another port on my local address and connect it to the destination IP:port,
Obviously, there are some caveats and edge cases I am ignoring here, but for our needs, the above is enough of an explanation.UDP “connections”
Since UDP is connectionless, there’s no real connection with UDP. No context whatsoever.
To send a message over UDP, I need again the quad of values:
Source IP:Source port + Destination IP:Destination Port
But this time, there’s no real connection. What happens here is that I open a local IP:port, and whenever I want to send out a message, I just tell it the destination IP:port and be done with it.WebRTC signaling connections and addresses
WebRTC signaling is just like any other web application connection.
In order to send and receive the SDP blobs to make the connection, I need to be able to communicate between the browsers and that is done using traditional networking means available in the browser: either HTTP or WebSocket. Both (ignoring HTTP/3) are implemented on top of TCP.
What does that mean?
- When my browser connects to the signaling server, it connects to an HTTPS or a Secure Websocket address (because… security)
- The destination address will be whatever the DNS will resolve for the name of the server I connect to; and for the most part, this connection will be done towards port 443
- The local address will be whatever local address I have on my machine
- The local port will be an arbitrary local port that the operating system will allocate
The end result?The signaling server has a static IP and port, while the client is “dynamic” in nature
Local ports are arbitrary (and ephemeral). Destination port is 443 (or whatever advertised by the server).WebRTC media connections and addresses
Media in WebRTC gets connected via SRTP. Most of the time, that would happen over UDP, which is what we will focus on in this section.
In naive SRTP implementations from before the WebRTC era, each video call usually used 4 separate connections:
- RTP for sending voice data
- RTCP for sending the control of the voice data
- RTP for sending video data
- RTCP for sending the control of the video data
What happens though is this –
- You create a peer connection
- Then you add media tracks to it, effectively instructing it on what it is about to send or receive (or at least what you want it to send or receive)
- WebRTC will then allocate and bind local IP addresses and ports to handle that traffic. As with outgoing TCP connections, the local ports are going to be arbitrary and ephemeral
- The allocated IP:port addresses are now going to be used in the SDP being negotiated. These will be used as the local candidates
Since these addresses and ports are local, there’s high probability that they will be blocked by firewalls for incoming traffic.
Media servers work in the exact same way. In most cases, the addresses that they will use will be public IP addresses, but the ports will be arbitrary. That’s because media servers usually prefer handling each incoming device separately, by receiving its traffic on a dedicated socket connected to a specific port.STUN “connections” and addresses
Since we’re all behind NATs with our private IP addresses, we need to know our public IP address so we can connect to others directly (peer-to-peer).
To do that, STUN is used. WebRTC will take the media local IP:port it created (in that section above), and use it to “connect” over UDP to a STUN server.
This is in concept somewhat similar to how our signaling works – the local IP address has an arbitrary port, while the remote IP:port is known – and configured in advance in our peer connection iceServers. My advice? Have that port be 443.
Why do we do all that with STUN? So that we create a pinhole through the NAT which will allocate for us a public IP address (and port). The STUN server will respond back with the IP address and port it saw, and we will publish that so that the other side will attempt reaching out to us on that public IP:port pair. If the NAT allows such binding, then we will have our session established.The STUN server has a static IP and port, while the client (and NAT) operate with “dynamic” IP addresses and ports
The above shows how Google’s STUN server works from my machine in AppRTC:
- My private address was 192.168.1.100:57086
- The STUN address in the iceServers was 126.96.36.199:19302 (the 19302 is the static port Google decided to use – go figure)
- My public IP address as was allocated by the NAT was 188.8.131.52:57086 (it managed to maintain and mirror my internal arbitrary port, which might not always be the case). This is the address that will get shared with the other participant of the session
With TURN, the server is relaying our media towards the other user. For that to happen, my browser needed to:
- Connect to a TURN server
- Ask the TURN server to allocate an address for the relay (and let me know what that address is)
- Use that address for incoming and outgoing traffic for the remote participant of the session
The above shows how Google’s TURN server works from my machine in AppRTC:
- My private IP for this session was 192.168.1.100:57086 (it was a different port, but I was too lazy to look it up, so bear with me)
- The STUN address in the iceServers was 184.108.40.206:19305 (as with STUN, the 19305 is the static port Google decided to use – still not sure why)
- The TURN server replied back with an allocation address of 220.127.116.11:28798. This was then placed as my ICE candidate. If the remote participant were to send media towards that address, the TURN server would forward that data to me
UDP, TCP and TLS work similarly in TURN when it comes to address and port allocation. What is important to notice here is how the TURN server opens up and allocates ports on the its public IP address whenever someone tries to connect through it.Understanding port ranges in WebRTC configurations
WebRTC makes use of a range of addresses, ports and transport protocols. Far more than anything else that we run in our browsers. As such, it can be quite complex to grasp. There is order and logic in this chaos – this isn’t something inflicted on you because someone wanted to be mean.
In WebRTC the addresses and ports that get allocated by the end devices (=browsers), media servers and TURN servers are dynamic. This means that in many cases we have to deal with port ranges.
Go to any voice or video conferencing service running over the Internet. Search for their address and port configuration. They all have that information in their knowledgebase. A list of addresses and ports you need to open in your firewalls, written nicely on a page so that the IT guy will be able to copy it to his firewall rules.
Should these ranges be large? As in 49,152 to 65,535? Should this range be squeezed down maybe?
I’ve seen vendors creating a port range of 10 or 100 ports. That’s usually too little to run in scale when the time comes. I’d go with a range of 10,000 ports or more. I’d probably also try first to estimate the capacity of the machine in question and figure out if more ports might be needed to maintain the sessions per second I am planning on supporting (allocated TCP ports take some time to clear up).
Is this “wholesale” port range a real security threat or just an imaginary one? How do you go about explaining the need to customers who like their networks all clamped down and closed?
If you are looking to learn more about WebRTC, check out my WebRTC training courses. In the near future, I will start working on a new course about TURN installation and configuration – if you are interested in early access – do let me know.
The post WebRTC ports: Understanding IP addresses and port ranges in WebRTC appeared first on BlogGeek.me.
WebRTC TURN servers are an essential piece of almost any WebRTC deployment. If you aren’t using them, then make sure you have a VERY good reason.
Connecting a WebRTC session is an orchestrated effort done with the assistance of multiple WebRTC servers. The NAT traversal servers in WebRTC are in charge of making sure the media gets properly connected. These servers are STUN and TURN.3 ways to connect WebRTC sessions
When connecting a session between two browsers (peer-to-peer) in WebRTC, there are 3 different alternatives that might happen.Connect directly, across the local network Connecting WebRTC over a local network
If both devices are on the local network, then there’s no special effort needed to be done to get them connected to each other. If one device has the local IP address of the other device, then they can communicate with each other directly.
Most of the time and for most use cases, this is NOT going to be the case.Connect directly, over the internet, with public IP addresses Connecting WebRTC directly using public IP address obtained via STUN
When the devices aren’t inside the same local network, then the way to reach each other can only be done through public IP addresses. Since our devices don’t know their public IP addresses, they need to ask for it first.
This is where STUN comes in. It enables the devices to ask a STUN server “what is my public IP address?”
Assuming all is well, and there are no other blocking factors, then the public IP address is enough to get the devices to connect to each other. Common lore indicates that around 80% of all connections can be resolved by either using the local IP address or by use of STUN and public IP addresses.Route the media through a WebRTC TURN server Connecting WebRTC by using TURN to relay the media
Knowing the public IP address is great, but it might not be enough.
There are multiple reasons for this, one of them being that the NAT and firewall devices in use are not allowing such direct traffic to take place. In such cases, we route the data through an intermediary public server called TURN.
Since we are routing the data, it is an expensive endeavor compared to the other approaches – it has bandwidth costs associated with it and it is why you Google won’t ever offer a free TURN server.Transport protocols and WebRTC TURN servers
TURN comes in 3 different flavors in WebRTC (6 if you want to be more accurate).How testRTC checks and explains connectivity alternatives of TURN servers in qualityRTC
You can relay your WebRTC data over TURN by going either over IPv4 or IPv6, where IPv4 is the more popular choice.
Then there’s the choice of connecting over UDP, TCP or TLS.
UDP would work best here because WebRTC knows best when and how to manage network congestion and if to use retransmissions. Since it doesn’t always work, it might require the use of TCP or even TLS.
Which type of a connection would you end up with? You won’t really know until the connection gets established, so you’ll need to have all your options opened.When is a TURN server needed in WebRTC?
That’s easy. Whenever there can’t be a direct connection between the two devices.
For peer to peer, you will need to install and run a TURN server.Try direct, then TURN/UDP, then TURN/TCP and finally TURN/TLS
The illustration above shows our “priorities” in how we’d like a session to connect in a peer to peer scenario.
If you are connecting your devices to a media server (be it an SFU for group calling or any other type of a server), you’ll still need a TURN server.
Why? Because some firewalls block certain types of traffic. Many just block UDP. Some may even block TCP.
With a typical WebRTC media server, my suggestion is to configure TURN/TCP and TURN/TLS transports and remove the TURN/UDP option – since you have direct access to the public IP address of the media server, there’s no point in using TURN/UDP.Try direct to server, then TURN/TCP and finally TURN/TLS
The illustration above shows our “priorities” in how we’d like a session to connect with a media server.What about ICE-TCP?
There’s a mechanism called ICE-TCP that can be used in WebRTC. In essence, it enables a media server to provide in the SDP a ICE candidate using a TCP transport. This means the media server will actively wait on a TCP port for an incoming connection from the device.
It used to be a Chrome feature, but now it is available in all web browsers that support WebRTC.
This makes the use of TURN/TCP unnecessary, but will still leave us with the need of TURN/TLS.Try direct UDP to server, then direct ICE-TCP to server and finally TURN/TLS
The illustration above shows our “priorities” in how we’d like a session to connect with ICE-TCP turned on.The elusive (mis)configuration of TURN servers in WebRTC
Configuring TURN servers in WebRTC isn’t an easy task. The reason isn’t that this is rocket science. It is more due to the fact that checking a configuration to ensure it works properly isn’t that simple.
We are used to testing things locally. Right?
Here’s the challenge – in WebRTC, trying it on your machine, or with your machine and the one next to it – will ALWAYS WORK. Why? Because they connect directly, across the local network. This means TURN isn’t even necessary or used in such a case. So you never test that path in your code/configuration.
What can you do about it?
- Be aware of this
- Use the sample provided by Google for Trickle ICE testing. It won’t check everything, but it will validate that you’ve at least installed and configured the TURN server semi-properly
- Block UDP on the machine in your local network and then try to connect a session to another machine on your local network. Make sure it went over TURN/TCP relay (check webrtc-internals dump for that)
The above things can be done locally and repeatedly, so start there. Once you get this to work, move towards the internet to check it there.Quick facts Do you need a TURN server if you connect your sessions to a WebRTC media server?
Yes. WebRTC media servers don’t support TLS type of transport. Sometimes they do support TCP via ICE-TCP. For the cases where calls can’t connect in other ways, you will need to use TURN/TCP or TURN/TLS.Do media servers need to have WebRTC TURN server configuration?
Usually not. In most cases you will be installing media servers with direct internet access on a public IP address. This means that having TURN configured only on the WebRTC client side is enough.How do you test a TURN server configuration for your application?
An easy way is to block UDP traffic and see if your WebRTC client can still connect. Another one is to use Google’s Trickle ICE sample.
The post WebRTC TURN: Why you NEED it and when you DON’T need it appeared first on BlogGeek.me.
Once a month, I will be publishing along with Philipp Hancke a WebRTC fiddle of the month as a free lesson in my WebRTC Codelab. This continues an old tradition of Mozilla’s Jan-Ivar, the fiddle ot the week.
Time for a new experiment. If all goes well, we will be making it a monthly thing.
Somehow, a week or two ago, we came to the conclusion that it would be nice to do a short video explainer of something that people are trying to figure out with WebRTC.
To make this happen, we decide together what to do the short lesson about, then Philipp Hancke writes a jsFiddle piece of code to implement it. And then we sit and record the explanation of it, creating a new free lesson in our joint WebRTC Codelab course.What does each WebRTC fiddle of the month include?
Each WebRTC fiddle of the month has these 3 resources:
- A short video explaining the problem and how we solved it
- The link to the jsFiddle code
- Transcription of the video
Creating the WebRTC Codelab was fun. We’re thinking of recording a new course at some point, but until we wrap our heads around that one, we’ve decided to continue recording some more lessons.
Seems like we work good together, so finding yet another excuse to do something made enough sense.
Oh, and if you happen to decide that you need to learn more about WebRTC, and end up enrolling to our course, then that’s a definite winTwo requests I have for you #1 – Check our first “fiddle of the month”
Our first explainer fiddle is about creating a peer connection that includes screen sharing and an audio microphone stream wrapped nicely together. You might get zoom-fatigue (or the WebRTC equivalent of that term), but you almost always want to talk when trying to screen share and collaborate.
Go watch our fiddle – Sharing screen + microphone together
Future WebRTC fiddles won’t be announced here, but only on social media and in the WebRTC Weekly (so subscribe to it). These fiddles will all be available in the WebRTC fiddle of the month section of the WebRTC Codelab course.#2 – Suggest some more ideas for such fiddles
Got ideas or requests for fiddles?
I can’t promise we will record your request, but I can promise you we will seriously think about it once we sit down to decide what to record.
2020 offers an interesting viewpoint to WebRTC browser support. Where exactly is it available in desktop and mobile, and what can you do about it as a developer?
This is almost a yearly article that I now write, each time with a slightly different focus to it. We’re now halfway into 2020, and things are changing fast.
Here’s a quote that I am seeing a lot this year:
Sometimes this quote is quite literally true. pic.twitter.com/SkVooF9Fez— The Long Now Foundation (@longnow) January 1, 2020
It rings true for the last few weeks when it comes to WebRTC, but somehow, in the domain of WebRTC browser support, we’re still standing in place.
My most up to date slide on WebRTC browser support?
We will get back to it in detail a bit later.
For now I’d like to look at the “Can I use” website, filtered for WebRTC. It gives a good starting point (although somewhat misleading). I will use that as the basis of looking at WebRTC on desktop and mobile.WebRTC support on desktop
On the desktop today, all modern web browsers support WebRTC.
This has been the case for quite some time now. I’ve announced that this means that WebRTC is ready towards the end of 2018.
Because the consumption model in the desktop today is done through web applications, while on mobile, it is predominantly based on native applications. So the moment all desktop browsers are nicely represented and supported, things look bright.
This isn’t to say that there aren’t challenges with WebRTC browser support – obviously there are.
I can list a few of them here out of the top of my head:
- No support in Internet Explorer (and there won’t be any for this dying browser)
- Edge still has its old version and the new Chromium based one. They behave differently, with the new Chromium one acting just like Chrome for anything WebRTC related
- Safari still suffers from its need to differentiate by not doing what other browsers are doing. It has no VP9 support, and it is still somewhat buggier than the rest of the crowd
- Things like hardware acceleration support and proper rendering, antivirus CPU issues and CPU consumption in general still plague the main implementation (=Chrome) today
When it comes to mobile, support for WebRTC is a bit more complicated.WebRTC iOS Safari support Is WebRTC really available on iOS Safari?
iOS Safari has been supporting WebRTC since Safari 11.
We’re now in Safari 13.5 and things are still rather grim when it comes to true support of WebRTC.
iOS Safari WebRTC is such a broken mess that my going suggestion to clients unfortunately is to not support it and redirect users to a native app installation. I had to manually go through all open WebRTC bugs in webkit to figure out how to explain this to my clients and help them in reaching that conclusion and even conveying that to their customers.
There are nasty bugs in iOS Safari that have been opened since 2019 or earlier relating to media handling of WebRTC. These aren’t just edge cases, but rather things you’ll have users bump into in regular use. Some of them have finally been fixed in the latest 13.5.5 beta earlier this month.
Oh – and if you plan on using any OTHER browser on iOS then WebRTC won’t be supported there. Why? Because Apple hasn’t made WebRTC available in its Webkit Webview on iOS and they aren’t allowing anyone to build a mobile iOS browser that doesn’t use Webkit as its rendering engine. So much for freedom and choice.
Up until now, there was no serious way to run a WebRTC web application in iOS Safari in production at scale. Hopefully, this is now mostly solved…Android browsers support for WebRTC How well is WebRTC supported in the fragmented Android world?
Android has its own set of headaches when it comes to WebRTC. That’s because there’s no single Android out there, but rather a slew of them.
Here’s what we can glean from a close look at that “can I use” list above.
- Android Browser, Chrome for Android and Firefox for Android are the gold standard. If these are what your browsers “bump” into, then you’re in good shape
- Opera… it depends. Opera Mobile is just fine. Opera Mini doesn’t support WebRTC
- UC Browser for Android has no WebRTC support
- Samsung Internet, quite the popular option you may run into, has WebRTC, but requires a webkit prefix. What does this mean? That it probably runs an old version of the WebRTC implementation, never a good thing with WebRTC
- QQ Browser and Baidu Browser, both the China alternatives to Chrome also have WebRTC support but also with a webkit prefix. Support there would also be tricky for web applications without some serious regression testing
While WebRTC is nicely supported in Android, it is going to be hard sometimes to decide what that support exactly means. Knowing that is a mix of understanding the device and the browser the web application is being executed on top.Where do we go from here?
If you read everything until here, then understand this: WebRTC is a work in progress.
It is the best (and only) alternative you have for real time communications that works in the browser without any installation. It works well enough for large companies to release applications (web and native) that attract massive user bases.
As with many other technologies, starting to use it is simple. Getting it to a professional level requires a lot more investment and commitment.
Next week I’ll be starting off my “future of WebRTC” workshop. This workshop is going to cover many aspects of the changing landscape of WebRTC. I’ll be touching issues of infrastructure, optimization and differentiation. All with a view of the current best practices as well as the latest trends.
There are 2-3 more seats available in the workshop. If you are interested in joining, check here.
VP9 is the best unused codec today that can improve video quality and media experience in your WebRTC application. Lets see who is this codec good for.
Last year there were 3 video codecs available in browsers for WebRTC: VP8, H.264 and VP9. Now there seem to be 5, with the addition of HEVC and AV1. Let’s put some sense into what is really going on, and where does each of these fit, focusing on VP9.WebRTC video codec support by browser All modern web browsers today support WebRTC
In the good old days, WebRTC video codec support was “simple”. The industry was bickering and fighting between VP8 or H.264 until resolving the matter by mandating both VP8 and H.264 codec support in web browsers.
Then Google went ahead, adding VP9 into the mix. Mozilla went along with it and added it to Firefox.
After that, we’ve got to the point where the Alliance of Open Media was created with AV1 as its video codec, prepping us nicely into the next codec war we’re going to face – the upcoming AV1 codec versus HEVC – both of which are now available (or eminently available, or soon to be available) in web browsers with WebRTC.
I’ve created this simple table for you to understand in which web browser which video codec is available for WebRTC:
To make things simple, if you need to launch something in 2020, then the video codecs available to you are:
- H.264 and VP8 on ALL browsers
- VP9 on all browsers other than Safari
Which leads us to the next question…HEVC & AV1. Should you join the experiment? Be sure you want to be part of WebRTC’s future video codec(s) experiment(s)
Let’s check the new video codecs that are sprouting in WebRTC to understand where we stand with them.HEVC
It seems that Apple is adding HEVC to Safari. It is available to some extent in the Safari Technology Preview, so developers can tinker with it without knowing when it will be publicly available in Safari. And there is no indication or an inkling of an indication that other browser vendors are going to join – Google won’t. Mozilla definitely won’t. Microsoft just might, but that would mean forking away a bit from Chromium which is now the engine inside their Edge browser – not the right focus in my mind for Microsoft here.
HEVC is like VP9 in the same way that H.264 is like VP8:
- You need to deal with patent royalties when using HEVC (which are a litigation mess in the making)
- VP9 has less hardware acceleration available than HEVC
The only difference is that HEVC doesn’t exist in any browser yet and will only be available on Safari while H.264 is available in all browsers.
To understand where we’re at with H.264 vs VP8 we only need to read the stats shared by Google in their recent semi-celebration for 10 years of WebM and WebRTC:
“These technologies have succeeded together, as today over 90% of encoded WebRTC video in Chrome uses VP8 or VP9.”
The bolded marking is my own doing – and just so we’re clear:
- This is Chrome only
- It shows H.264 has less than 10% “market share” in Chrome WebRTC
- It also insinuates that VP9 doesn’t have a large “market share”, otherwise, a ballpark figure would have been provided. More on that later
- This is why I think HEVC doesn’t really stand a chance against VP9 in the context of WebRTC
Now with AV1 coming up and the huge backing behind it, the HEVC track is all but dead. At least for the majority of WebRTC developers.
If you want to use HEVC in WebRTC, then you limit yourself to future Safari releases and native applications (where you modify the WebRTC codebase to add HEVC). Don’t expect it to work in any other web browserAV1
AV1 is the best next thing in video coding. The best invention since sliced bread. The best unlikely cooperation amongst industry co-opetitors moving away from royalty bearing video codecs towards an open video codec.
It is supposed to be better than both VP9 and HEVC from a compression standpoint.
And it is supposed to be a coombaya experience where everyone is supporting it. The members list of the Alliance of Open Media foundation behind it is impressive. It includes all browser vendors and many chipset vendors. How can you go wrong here?
The only problem for me is adoption time. It takes a long time to get a video codec to market.CodecYear startedAgeH.264200317VP8200812HEVC20137VP920137AV120191Video codec maturity
To get a video codec to market properly time is needed. From specification, to implementation, to modifying the implementation to work for real time communications, to optimizing the implementation to work reasonably on available CPUs.
In Chrome it doesn’t officially exist. It is there behind a flag, making sure users can’t really enjoy it and web developers don’t have meaningful enough access to it.
Getting a codec that came out of the oven a year or two ago to production is risky business.
If you need this article to learn about codecs, then AV1 should NOT be in your roadmap in 2020. You better wait this one out a little bitWho is using VP9 codec today?
Not Google it. Google.
They use VP9 in Google Meet. That’s a large traffic source using VP9, but it says a lot about the adoption of VP9 so far.
There are also a few instances where VP9 is used in streaming or live streaming use cases. Nothing major though.Adoption challenges of using VP9 codec Photo by Mathias Jensen on Unsplash
Why so low an adoption after being out on the market for 7 years?
I can only guess…
- It takes time. 7 years just isn’t enough when we’re still all figuring out WebRTC
- VP8 and H.264 is good enough for almost everyone
- VP9 requires more CPU than VP8 or H.264, and there are complaints about CPU use in WebRTC with these codecs already, so VP9 won’t help alleviate that problem – only worsen it
- Not enough hardware acceleration for VP9. There are more hardware decoders for VP9 today than they used to, but not much in the way of encoders. It does exist on Intel however, which is great
- Not enough knowledge and understanding on how to utilize VP9, so no one’s really trying it properly
- The popular open source media servers are all configured for VP8 or H.264 by default even if they do support VP9. And no one changes default settings. I would also assume and expect these open source platform to not optimize for VP9 anyways – not enough uptake yet
- The Alliance of Open Media and its success to put out such a strong cadre of supporters. By doing that, many large vendors in the industry are making the decision to “wait it out” with VP9 and skip this video codec generation directly to AV1
I’ve written about the role of VP9 in WebRTC before.
The premise of VP9 is improving encoding compression over VP8.Compression rate
That comes at a cost of expending more CPU, giving us the option to balance between using network and CPU resources.VP9 gives you either less bitrate for the same quality or more quality for the same bitrate than VP8
When looking at the higher end of the bitrate equation, one may prefer using VP8 or H.264 – we have enough network resources so we couldn’t really care on that front while saving on CPU might be beneficial
On the lower end of the bitrate equation, we’d want to squeeze every bit we have running on the network on higher quality. And then using VP9 might make more sense: since the bitrate is limited, we can spare more CPU on that and use VP9.
Sad thing is we can’t really know this in advance, at least not always.Scalability
Implementing a workable large scale video group call with WebRTC isn’t trivial. There are a lot of aspects to deal with both from a network perspective as well as from a CPU perspective.
The name of the game in this case is optimization, and this comes by having more flexibility in the tools you can use for optimizing the hell out of your video experience.
The flexibility here comes from VP9 SVC implementation in WebRTC:
- With H.264 and VP8 you can use simulcast – sending multiple video streams in multiple bitrates for the same content
- VP8 also supports Temporal Scalability – sending multiple frame rates in a single video stream
- With VP9 you can use SVC (Scalable Video Coding) – sending a single video stream with multiple layers for different resolutions, frame rates and quality levels
- To be clear, getting SVC to work in WebRTC isn’t easy, requires “reverse engineering” some of the workings of Google Meet and its proprietary SDP munging, but it might actually be worth the effort
If I had to chart the flexibility of a WebRTC video codec for large group sessions based on the tools it gives developers, this is what I’ll get:
We expend more CPU on VP9 but we win in network performance and scalability of a video group call by doing that.Plotting a route towards AV1
AV1 is the future.
Should you skip VP9 and just head to AV1 once it is ready? I don’t know.
The thing is, we had 2020. A pandemic that got us all cooped up at home doing video calls like crazy. The world has changed and with it priorities in our industry.
We’ve fast forwarded roadmaps by 5 years, so the future is already here. Can you wait a year or two more before you introduce a better video codec? If yes, then go straight to AV1. If you can’t, then you should seriously consider starting off with VP9 adoption.A quick recap Who is using VP9 codec in WebRTC applications?
Google Meet makes use of VP9 codec. Sadly, there is no other popular, large scale WebRTC application that makes use of it.Does VP9 codec support SVC in WebRTC?
Yes. In fact, VP9 is the only codec today that supports SVC (Scalable Video Coding) in WebRTC. This gives developers more flexibility in large group video calls and even live broadcasts than other video codecs.
The challenge is that VP9 SVC support in WebRTC isn’t official or well documented.
Better compression rate compared to VP8 and H.264 which are mandatory to implement in WebRTC.
Better scalability. It has flexible tools that assist in scaling video group calls.
HEVC and AV1 don’t yet exist in WebRTC browser implementations. At least not in a way you can utilize in a production service.
VP9 is available and usable in Chrome, Firefox and Edge.
If you are looking to improve video quality or reduce bitrates in your WebRTC application, then you should seriously look at VP9.
The post VP9 Codec: Is it time to adopt it in your WebRTC application? appeared first on BlogGeek.me.
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: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.
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:
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)
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
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
This looks like an obvious question, but it really isn’t.
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 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.
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:
- VP8 / H.264
- VP9 / HEVC
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.
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 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?
- Google. Google Meet for example has been using VP9 for quite some time in its own calls
- 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
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
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.
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.
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.
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.
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
- WebRTC application servers – essentially the website hosting the service
- WebRTC signaling servers – how clients find each other and connect to each other
- NAT traversal servers for WebRTC – servers used to assist in connecting through NATs and firewalls
- 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.
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:
- 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
- XMPP – A presence and messaging protocol. Some of the CPaaS vendors picked this one for their signaling protocol
- 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
- 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:
- Don’t use apprtc as the baseline for your WebRTC signaling server
- Consider my WebRTC the missing codelab course
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.
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 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
- 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.
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.
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:
- The outdated ones
- The broken ones
- The ones that sell you a managed streaming service
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:
- Github repo and course introduction module, both publicly available
- Codelab walkthrough. Over 2 hours of recorded lessons covering the source code and explaining all you need to know to grok it
- 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
- 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 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:
- Browser vendors
- CPaaS vendors
- Customer facing services
- Open source projects
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
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
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?
- Video/Enghouse – due to their use and focus on SVC and VP9/AV1
- Agora – due to their research of ML/AI in audio and video domains
- Dolby – due to their work around 3D voice
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.
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:
- Wherever it is used, there is use of WebRTC
- It is very versatile and flexible. I see it in a lot of different use cases
- It is quite popular
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 ecosystemKurento (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…
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
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:
- 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
- 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
- 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.
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 browsersOn-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 paradigmsFigure 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.
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:
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:
- Run fast, skimming over the material; the student will fill out the rest by searching the internet later
- 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
- 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.
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?
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.
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
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.
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.
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:
- Fix the broken part of these releases, mainly by synchronizing them with real releases of WebRTC and maintaining clear release notes for them
- 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):
- Use Google’s libwebrtc project, compile and maintain it on your own
- 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:
- Have your own codebase for libwebrtc that you compile and integrate into your application
- 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
- 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
- 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
- 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
- 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
- Roll out slowly. Have it tested internally, then with a small % of your audience and then with everyone
- Make sure you can rollback…
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.
Register to the two free webinars I am hosting this month in areas around supporting WebRTC with Talkdesk and Poly.
I am shifting gears this year. Looking back at last year, what I’ve noticed is that there’s been a shift in what clients are asking of me. Many of them are more interested in issues that are support related rather than architecture or development. While a lot of the work I do revolves around assisting with defining architectures and dealing with roadmaps of products, there’s been an ongoing increase in the questions related to supporting WebRTC.
This led to a few changes in the things that I have on offer:
- At testRTC, where I am a co-founder and apparently also the CEO, we’ve launched a new product for network testing. This is focused on helping people who support clients with network related issues around WebRTC applications. We’re now working on another product specific to this domain
- At BlogGeek.me, I am now offering a new course called Supporting WebRTC. With 40 people who were there in the prelaunch and the feedback I’ve been getting, this seems like the topic is really relevant to many
Somehow, I found myself scheduling two separate free webinars for this month with partners that are around WebRTC support.Talkdesk and how to support WebRTC-based call centers
At testRTC, we’ve created a product in 2019 to assist support teams analyze network issues for their users. Our first client for this product were Talkdesk who were kind enough to share their experience with us in a nice testimonial.
On Tuesday next week, João Gaspar from Talkdesk will join me in a webinar titled How to analyze WebRTC network issues in minutes and not hours (or days). In this webinar, I’ll explain a bit about the challenges WebRTC poses when it comes to connectivity from a support perspective, and João will share with us what Talkdesk are doing today to assist their users.
I’ve learned a lot from working with João and his team last year, and I am sure this will be interesting to you as well.
How to analyze WebRTC network issues in minutes and not hours (or days)
Tuesday, January 21, 2020
14:00-14:45 EST; 11:00-11:45 PSTRegister here Poly and picking the right headset to improve WebRTC session quality
In the last year I’ve had a lot of conversations with support engineers. The people who end up needing to troubleshoot, figure out and explain issues to their users. Many of these issues end up being related to network connectivity. This made me create the new Supporting WebRTC course (now open for all to enroll). One thing I wanted to add there but had no clue about is headsets.
Headsets are this thing that I have at home and use for most of my conference calls. But I never really gave them a second thought. The last pair I purchased at the local computer equipment store, not even making an informed decision about what I needed.
That lead me to reach out to Poly, to get a briefing about headsets and how they affect quality in WebRTC, which lead to me understanding that this boring topic known as headsets is quite fascinating. Obviously, I used what I learned in that briefing to create that lesson I needed in my course.
The great thing though, is that Richard Kenny from Poly (who briefed me), was kind enough to accept joining a webinar about this topic.
Picking the best headset for your next WebRTC session
Tuesday, January 28, 2020
14:00-14:45 EST; 11:00-11:45 PSTRegister here How are you handling your support efforts with WebRTC?
The people who usually follow me here are developers or product managers. Seldom are they support-oriented. I know that based on the comments and conversations I have on and off this website.
My suggestion to you is to go check what your support team is challenged with. What is keeping them up at night. What is it they need assistance with. What knowledge are they missing.
And then once you do, see if these webinars might be useful to them so you can share this with them. Let’s make 2020 the year we start solving more of the connectivity issues for our customers.
The post Supporting WebRTC: Two webinars coming your way (with Talkdesk & Poly) appeared first on BlogGeek.me.
WebRTC isn’t like Node.js or TensorFlow. Its purpose isn’t adoption in general, but rather adoption in browsers. If you believe otherwise, then there’s a problem of expectations you need to deal with.
As we are starting 2020, with what is hopefully going to be an official spec for WebRTC 1.0, it is time for a bit of reflections. I started this off when writing about Google’s WebRTC roadmap and I’d like to continue it here about WebRTC goals and expectations.
When I explain what WebRTC is, I start off with the fact that it is two things at the same time:
- A standard specification
- An open source project
The open source project angle is interesting.Is WebRTC an open source project?
The main codebase we have for WebRTC today is the one maintained by Google at webrtc.org. There are other open source projects that implement the spec, but none to this level of completeness and quality.
By the ecosystem and use of WebRTC, one may think that this is just another popular open source project, like Node.js or TensorFlow.
If I had to depict Node.js, it would be something like this:
How would I draw a diagram of WebRTC? Probably something like this:
From an administrative point of view, WebRTC is part of Blink, Chromium’s rendering engine. Blink is part of Chromium, the open source part of Chrome. And Chromium is what Chrome uses as its browser engine.
WebRTC isn’t exactly an independent project, sitting on its own, living the life.
Need an example why? WebRTC’s version releases follow the version releases of Chrome in terms of numbering and release dates. But mobile doesn’t follow the exact same set of rules. Olivier wrote it quite eloquently just recently:
“For web developers, release notes are very good and detailed. But for IOS and Android developers… I expect the same level of information.”
There’s an expectation problem here…
WebRTC isn’t like other open source projects that stand on their own, independent from what is around them. WebRTC is a component inside Chrome. A single module.
The WebRTC team at Google are assisting developers using the codebase elsewhere. It took a few years, but we now have build scripts that can build WebRTC separately and independently from Chromium. We have official pre-compiled mobile libraries for WebRTC from Google, albeit not a 1:1 match to the official WebRTC/Chromium releases.
At the end of the day, the WebRTC team at Google are probably being measured internally at Google by how they contributed to Chrome, Google’s WebRTC-based services AND to the web as a whole. Less so to the ecosystem around their codebase. If and how WebRTC gets adopted and used in mobile first applications or inside devices and sensors is harder to count and measure – and probably interests Google management somewhat less.Who contributes to WebRTC?
I took the liberty of checking the commit history of the WebRTC git project over the years, creating the graph below:
There were various different emails associated with the committers, but they fell into these broad categories:
- People with a webrtc.org email address. These are Google employees working directly in the WebRTC project (at least I don’t know of a non-Googler with a webrtc.org email address)
- People with a google.com email address
- Commits done with a “chromium-webrtc-autoroll@” or similar “email” address in them. I’ve categorized these as bots
- All the others
It is safe to say that the majority of committers throughout the years are Googlers, and that the ones who aren’t Googlers aren’t contributing all that much.
Is that because Google is protective about the codebase, as it goes right into Chrome which servers over a billion users? Or is it because people just don’t want to commit? Maybe the ecosystem around WebRTC is too small to support more contributors? Might there be other reasons?
One wonders how such a popular project has so little external contributors while there are many developers who enjoy it.Is webrtc.org Google’s RTC or ours?
A few years back, Google introduced a new programming language – Go (or Golang). It is getting quite a following (and its own WebRTC implementation, though unrelated to this article).
In May 2019, quite a stir was raised due to a post published by Chris Siebenmann titled Go is Google’s language, not ours. Interestingly enough, if you replace the word “Go” with “WebRTC” in this article – it rings true in many ways.
Golang has over 2,000 lines in its CONTRIBUTORS file versus WebRTC’s 100+ AUTHORS. While Golang identify individual contributors, WebRTC uses wildcard “corporate” contributions (I wouldn’t count too many contributors in these corporates though). WebRTC is smaller, and I dare say more centralized.
The simple answer to those who complain is going to be the same – “this is an open source project, feel free to fork it”.
For WebRTC, I’d add to this that what goes into the API layer is what the W3C and IETF decide. So Google isn’t in direct control over the future of WebRTC – just of its main implementation, which needs to adhere to the specification.
Then there’s the Node.js community forks that took place over the years (latest one from 2017). These disputes, technical and political, always seem to get resolved and merged back into the main project. In hindsight, this just seems like attempts to influence the direction of the project.
Can this be done for WebRTC?
It already occurred with the introduction (and slow death) of ORTC. ORTC (Object-RTC) started and was actively pushed by Microsoft, ending with most of what they wanted to do wrapped up into WebRTC (and probably causing a lot of the delays we’ve had with reaching WebRTC 1.0).What does that mean to you?
Should you complain about Google? Maybe, but it won’t help
For Google, it makes sense to push WebRTC into Chrome as that is its main objective. Google is improving in tooling and capabilities of using WebRTC outside of Chrome, but this objective will always be second to prioritization of Chrome’s needs and Google’s services.
As an open source project, you are free to use or not use it. You’re not paying for it, so what would you be complaining about?
Google have invested and is still investing heavily in WebRTC. It is their prerogative to do so, especially as they are the only ones doing it today.
You should make an educated decision, weighing your requirements, risks and challenges, when developing a service that makes use of WebRTC.
Google’s plans for WebRTC have either changed or finally got revealed. Where? In its internal WebRTC roadmap.
WebRTC is many things.
On one hand, it is a standard specification at the W3C (and is reaching 1.0 milestone).
On the other hand, it is an open source project. While there are a few such projects today, the most important one is Google’s webrtc.org. This is the code that gets into Chrome itself and the one being adopted by many (simply because it is already highly optimized for the main scenarios. And… it is free).
Google made it super simple for companies to adopt its WebRTC implementation – it uses a BSD open source license, making it quite permissive.
In the last 8 years, we’ve been treated like royalty, having access to a world-class media engine implementation for free.
The WebRTC roadmap we’ve seen so far from Google had 3 types of features in it:
- Making sure the implementation fits the spec
- Improve the architecture to perform better
- Add features specific to Google’s needs in other projects (not necessarily abiding to the spec)
At all times, these were available to everyone.Google’s intent in open sourcing WebRTC
When WebRTC was first introduced it was about who has the balls to take something that up until that point was considered a core competency and make it freely available. This was a piece of technology that video conferencing companies protected fiercely, battling about through their sales and marketing pitches, each claiming to have superior media quality. At the time, media quality wasn’t in the “good enough” position that it is today:
Google made the calculated risk at the time:
- Media quality was improving. So were bandwidth available and compute. It made sense that it would get to a point of “good enough” within a few years time
- A migration to the cloud for video conferencing wasn’t at most companies agenda yet, but as cloud migration started picking up everywhere, it made sense to occur here as well. These cloud migrations took place hand in hand with the use of browsers
- Dominance in browsers and lack of a real operating system footprint meant needing to have a media engine as part of the browser
- Google had no leading service in video conferencing. Google Hangouts was available, but wasn’t any real competition to the leading platforms at the time, so they didn’t have much to lose by the decision
Other vendors just following along in the ride, making minor contributions here and there. Today, the leading (and only) media engine out there for WebRTC is still the Google one. At least in any meaningful way. So much so that Google’s “competitors” are using Google’s WebRTC stack directly in their products.Where has this lead Google?
WebRTC is a huge success. All modern browsers now support it. They interoperate (to a good extent). Today, in every industry and market where live or real time media is needed, WebRTC is playing an important role.
But what about Google and WebRTC? What success did Google exert from WebRTC?
Not a lot. Or at least not enough.
Google uses WebRTC in the following services it offers:
- Hangouts / Google Meet
- Chrome Remote Desktop
- YouTube Live
Lets see how well did Google fare in each.Hangouts / Google Meet
I use these two services almost on a daily basis. My calendar meetings default to them simply because they are so each to schedule with the Google Calendar. They offer what I need without any of the complexity.
When you read or hear discussions about the video conferencing market, the vendors mentioned are usually Zoom and Cisco. Maybe Microsoft Teams or Skype for Business. Also Bluejeans and Pexip. A few others. Google isn’t one of the top vendors that come to mind here. Even though their service is rather good.
Did I mention that almost all their competitors are using WebRTC as well?Duo
Duo. Google’s answer to Apple’s FaceTime.
It is a standalone video calling app available on Android and iOS. It isn’t installed by default on most smartphones and users need to actively find it, install it and make a decision on using it. Not an easy feat.
Why hasn’t Google nailed and bolted it smack into Android? Probably due to carriers and not wanting to hurt their feelings (and Google’s relationship with them). Otherwise, it makes no sense for Google to try and compete with the likes of FaceTime with one hand tied behind their backs.
Anyways… Duo is quite popular. Even on iPhone. It is ranked #7 in the social apps in the Apple App Store. This is higher than Houseparty (positioned somewhere at #17-20), which is rather interesting considering the high engagement Houseparty sees for its users.
Google doesn’t share any stats on usage of Duo. The only thing we know is downloads and the number of people who ranked it – two stat points that are useless for social networks. This is quite telling to the real usage numbers – not publishing them means they aren’t on par with the competition.
Curious myself, I’ve put out a quick poll on Twitter:
This is most definitely NOT the way to know or understand usage, but it is interesting.
My audience is probably tech savvy. Those answering the poll are highly likely to know about WebRTC. And still. We have over 50% who never tried it and 13% who use it. I’d consider 13% quite a lot and surprising. But it isn’t scratching the surface of where it should be given that Google owns and controls Android.Stadia
Google Stadia is something totally different. It is cloud gaming. The game is being processed and rendered in “the cloud” and gets streamed in real time to your device using WebRTC. Google even made modifications to its WebRTC implementation to make it a better fit for gaming.
The concept is great. The technology is solid. The experience is said to be good (if you’re close enough to the data center and have a good network connection).
From the media, it seems like there are hurdles and challenges to the Stadia launch – this type of an article titled “Stadia’s biggest problem? Google” or this one titled “Google Duo is the best video calling service you’re not using” are rather common. Especially when put in comparison to the Apple Arcade launch.
Looking at Google Play store numbers for the Stadia app, things look rather disappointing: below 1M installs so far:
I have this feeling Google expected more.
Cloud gaming is still new and nascent. It will take time to happen and mature.
Take this into an adjacent industry, Netflix introduced streaming in 2007. It took them 3-4 years for the stock to take notice and the service to mature enough to make a dent in the industry. Whereas today, every other production studio is launching their own streaming service.
Will Google have the patience with Stadia to get there or will it end up shutting it down like many other “experiments” it has been running throughout the years? The thought itself is making it hard for Google to entice game developers to jump on its platform.Chrome Remote Desktop
Google apparently has a remote desktop service. It makes use of WebRTC’s screen sharing capability and is called Chrome Remote Desktop.
While I haven’t used it myself, this does seem to have quite a following. 10M+ installs on Android, The Chrome extension shows ~4.8M users.
There is no apparent business model as the service is offered freely, and while the market has similar paid services, it doesn’t seem to be big enough to attract a company like Google. This isn’t interesting enough to value an investment in WebRTC itself by Google.YouTube Live
YouTube has the ability to host live events. And it does that with the help of WebRTC.
That said, its use of WebRTC isn’t an impressive one – it is just a window into the service if you want to broadcast from your browser. It isn’t used for live streaming to the users themselves. There’s more on the technical side of it on webrcHacks, where they analyze what goes on the wire with YouTube Live.
Here’s the thing – just like Chrome Remote Desktop, this is Google exploiting a technology that is there. It isn’t about leading the industry or the market with it. And as with Chrome Remote Desktop, it isn’t of enough value to make it worth their while to invest in making WebRTC itself better.
WebRTC is now part of HTML5 and part of what browsers need to do, so Google needs to invest in having it in Chrome. How much to invest is the real challenge.To WebRTC or not to WebRTC?
Meet, Duo and Stadia seem to be the leading factors in whatever Google is doing in WebRTC, other than dealing with complaints and feedback from the community.Google Meet
Google Meet is using VP9. It is one of the only group calling services running in production at scale that have made that shift.
By harnessing WebRTC and owning its roadmap, Google is able to experiment and build their service faster than others can on WebRTC.
Two interesting examples we’ve had in the past year –
1. At Kranky Geek 2018, Google showed an experiment of using WebAssembly with WebRTC to improve video switching in a conference by distinguishing noise and speech:
Did it find its way into Google Meet? Maybe.
Then there’s the new captioning feature in Google Meet, which Gustavo nicely explains. It uses the data channel in WebRTC to send back the results. Assuming anything in WebRTC was needed to change to make this work better, Google could do that as it owns the WebRTC roadmap.
Google Meet, being predominantly a browser based experience, will need to rely on changes made directly into WebRTC or things that can be bolted on top using WebAssembly.Google Duo
Google Duo is a mobile first service. It has browser support via Duo for Web, but for the most part, it is meant to be used on your smartphone.
Last month, Google announced some new features in Pixel phones, but also 3 machine learning based improvements for Duo:
“Auto-framing keeps your face centered during your Duo video calls, even as you move around, thanks to Pixel 4’s wide-angle lens. And if another person joins you in the shot, the camera automatically adjusts to keep both of you in the frame.”
We’ve seen Facebook do that in Portal and a few video conferencing vendors adding that to their room systems.
Packet loss concealment:
“When a bad connection leads to spotty audio, a machine learning model on your Pixel 4 predicts the likely next sound and helps you to keep the conversation going with minimum disruptions.”
Packet loss concealment using machine learning is something not many are doing (or publishing that their are doing).
“you can now apply a portrait filter as well. You’ll look sharper against the gentle blur of your background, while the busy office or messy bedroom behind you goes out of focus.”
Another nice feature, which is available in other services such as Zoom.
From the looks of it, auto-framing and background blur rely on hardware based capabilities of the Pixel devices. Packet loss concealment… a lot less so.
Could we see machine learning based packet loss concealment find its way into the WebRTC codebase? (where it makes the most sense to add it instead of as an external piece of software). Not soon…Google Stadia
But it wasn’t enough. It needed the low latency of WebRTC to be even lower. So it added a Chrome experiment to enable them to reduce the playout delay in WebRTC. A few of my clients have already adopted it and are happy with the results for their own use case.
Google also tweaked and improved the VP9 decoder to make it work with 4K 60fps streams.
In the case of Stadia, the changes need to be made inside the WebRTC codebase to apply well for its service anywhere.What is changing with Google’s strategy about WebRTC in 2020?
WebRTC 1.0 is “out”. Almost.
The latest CR (Candidate Recommendation) is dated December 13. Hopefully the last one before we go to the next step. It is interesting to look at the original charter of WebRTC:
It took somewhat longer to get here than originally expected, but we’re almost there.
Google held its internal milestone of WebRTC 1.0 code complete two months back.
Besides housekeeping, bug fixes, and talking about WebRTC NV (the next version), I think a lot of it will change internally at Google to how can they make more of their investment in WebRTC and stay or become more competitive in the market. This being an open source project, means that some features will need to be kept out of the open source codebase. Like the new packet loss concealment mechanism in Google Duo.
How is that achievable?
The leading factor is going to be adding more flexibility and control to developers over what WebRTC is and how it operates. Ideally by using WebAssembly and in the future by using WebTransport and WebCodecs, two new initiatives that will unbundle a lot of what WebRTC is.
This gives the ability to take out improvements out of the baseline implementation and introduce them as proprietary features.
The demarcation line of what will go into the WebRTC codebase by Google and what will be kept out of it is going to be the use of machine learning and artificial intelligence. Whenever a feature makes use of learned machine learning models, Google will most probably try to keep that implementation out of WebRTC. Why? Because it has the greatest value and the highest investment today.Should this worry you?
Maybe, but it is to be expected.
Google has invested heavily in WebRTC. Without this investment nothing that we see and use today in WebRTC and take for granted would have been possible.
It is even surprising that it lasted this long…
WebRTC closes the basic gaps and requirements of media engines. It is good enough. If you want to improve upon it, differentiate or be at the cutting edge of the WebRTC technology, you will need to invest in it yourself as well. Relying only on Google isn’t an option. And probably never really was.
Here’s to an interesting and eventful 2020 with WebRTC!
Conference calls were always complex. WebRTC might have made joining them simpler, but it does come with its own set of headaches.
I’ve been in the industry for the last 20 years or so (a dinosaur by now). I had my share of conference calls that I joined or scheduled. As humans, we tend to remember the bad things that happened. The outliers. There are many of those with conferencing.
When I saw this Dilbert strip the other day, it resonated well with the “Supporting WebRTC” course I’ve been working on these past few months:
One of the things I am dabbling with now in the course are media quality issues. This was spot on. So of course I had to share it on Twitter, which immediately got a colleague to remind me of this great Avengers mock video conference:
The funny thing is that this still occurs today, even if people will let you believe networks are better and these problems no longer exist. They do. Unless you are Zoom – Zoom always works. At least until it doesn’t…What can possibly go wrong?
This one was just published today, so couldn’t resist…
A modern WebRTC service today will have a few potential failure points:
- The cloud vendor’s infrastructure
- Your own infrastructure
- The user’s network
- The user’s browser
- The user’s device
Let’s try to break these down a bit1. The cloud verndor’s infrastructure
Here’s a secret. AWS breaks from time to time. So does Azure and Google and Digital Ocean and practically everyone else.
Some of these failures are large and public ones. A lot more are smaller and silent ones that aren’t even reported in the main status pages of these cloud vendors. We see that in testRTC – as I am writing these words, we are struggling with a network or resource issue with one of the cloud vendors that we are using, which affects one of our services (thankfully, we’re still running for most of our customers).
Your service might be unreachable or experiencing bad media quality because of the cloud vendor you are using. Fortunately, most cases, these are issues that don’t last long. Unfortunately, these issues are out of your control.2. Your own infrastructure
This one is obvious but sometimes neglected. What you run in your backend and how the client devices are configured to use it has a profound effect on the quality of experience for your users.
WebRTC has a lot of moving parts. You need to take good care and attention to them.3. The user’s network
Now we head towards the things that you have no control over… and primarily that is the user’s network.
You. don’t. have. control. over. what. network. your. customer. Uses.
He might be over a poor 3G connection (yes, we still have those). Or just be too far from the closest WiFi hotspot he is connected through. Or any other set of stupid issues.
In enterprises, problems can easily include restrictive firewall configurations or use of an HTTP proxy or a VPN.
Then there’s the congestion on the user’s network based on what OTHER people are doing on it.
Here, what you’ll need to do is to be able to understand the issue and explain it to the user to help him in squeezing more out of the network he is using.4. The user’s browser
Here’s another challenging one.
The first one is a bit obvious – modern browsers automatically upgrade. This means you will end up with a new browser running your app one day without Apple, Google, Microsoft or Mozilla calling you to ask if you agree to that. And yes – these upgrades may well change behavior for customers and affect media quality.
Then there’s the opposite one – in enterprise environments, IT administrators sometimes lock browser versions and don’t let them upgrade automatically.
The biggest challenge we’re now facing though are Google experiments, like the one conducted with mDNS in WebRTC. Google is conducting experiments in Chrome on live users sporadically. You have no control over these and no indication where and how they are conducted. The whole purpose of this is to surface issues. Problem is, you won’t know if it breaks things for you until someone complains (or unless you monitor your deployment closely).5. The user’s device
The device the user uses affects quality. Obviously.
Tried recently to use an iPhone 4 with a WebRTC service?
The CPU, memory, software and other processes your user has on the device will affect quality. Add to that the fact that certain devices and peripherals behave differently and have their own known (or unknown) issues with WebRTC, and you get another minor headache to deal with.The things we can control in our WebRTC conference calls
Here’s where we started – a modern WebRTC service today will have a few potential failure points:
- The cloud vendor’s infrastructure
- Your own infrastructure
- The user’s network
- The user’s browser
- The user’s device
In WebRTC calls, you can control your own infrastructure. And you can build it to work around many cloud vendor’s infrastructure issues.
You can try to add logic that deals with the user’s device.
You can probably deal with many of the user’s browser issues by more testing and running their unstable and developer preview releases.The things we can’t control in our WebRTC conference calls
The main thing you can’t control is the user’s network.
What you can do here is to provide better support, assisting your users in finding out the issues that plague their network and suggesting what they can do about it.
Two things you will be needing to get that done: tooling and knowledge
The tooling side I’ll probably touch in a future article. The knowledge part is something I have a solution for.How can you better serve your customer?
In the last few months I’ve been working on the creation of a new “Supporting WebRTC” course. This course is geared towards support people who get complaints from users about their service and they need to understand how to help them out.
The course started through conversations with support teams in widely known providers of WebRTC services, which turned into a suggested agenda that later turned into a real course.
There are already close to 6 hours of content split into 33 lessons, with more to be added in the next month or so.
I’ve decided to open up registration to the course to everyone and not limit it to the limited pre-launch users I’ve shared it with. I feel it is the right time and that the content there is rock solid.
If you want to improve your knowledge or your support team’s knowledge of WebRTC, with a focus on getting them making your users happy and using your service, then check out my course.Register to the Supporting WebRTC course
The post WebRTC conference calls. What could possibly go wrong? appeared first on BlogGeek.me.
WebRTC isn’t only about guest access or even interoperability. It is about the whole infrastructure and service.
My article last month about guest access, the use of WebRTC for it AND how it is now used for “interoperability” between Microsoft and Cisco had its nice share of feedback and comments. Both on the article and off of it in private conversations. I think there is another trend that needs to be explained, which in a way is a lot more important. This one is about video conferencing hardware being dominated by HTTP and WebRTC. This in turn, is affecting how modern video infrastructure is also shifting towards WebRTC.Where video conferencing hardware meets WebRTC
Check out this recent session from Kranky Geek last month. Here, Nissar Mahamood from Lifesize explains how WebRTC got integrated into their latest meeting room systems (=hardware), getting it to 4K resolutions.
It is a good session for anyone who is looking at embedded platforms and systems or needs to customize WebRTC for his own needs, using it outside of a web browser.
There are two things in this video that surprised me, for two very different reasons:
- Using GStreamer as the basis of the media engine
- Selecting Node.js as the client application environment
I started seeing more and more developers using GStreamer as part of the technology stack they use with WebRTC. On Linux, your best bet with processing media using open source is either ffmpeg or GStreamer. Due to the real time nature of WebRTC, GStreamer is often the more sought after approach. In the past year or so, it also added WebRTC transport, making it a more viable option.
In many cases, the use of GStreamer is for connecting non-WebRTC content to WebRTC or getting content from WebRTC to restream it elsewhere. Lifesize has done something slightly different with it:
As the illustration above from their Kranky Geek session shows, Lifesize replaced the media engine (voice and video engines) part of WebRTC with their own which is built on top of WebRTC. They don’t use the WebRTC parts of GStreamer, but rather the “original” parts of it and replacing what’s in WebRTC with their own.
It is surprising as many would use WebRTC specifically for its media engine implementations and throw its other components. Why did they take that route? Probably because their existing systems already used GStreamer that is heavily customized or at the very least fine tuned for their needs. It made more sense to keep that investment than to try and reintroduce it into something like WebRTC.
This approach, of taking the WebRTC source code and modifying it to fit a need isn’t an easy route, but it is one that many are taking. More on that later.Selecting Node.js as the client application environment
We’ve been so focused on development with WebRTC on browsers and mobile, that embedded non-mobile platforms are usually neglected. These have their own set of frameworks when it comes to WebRTC.
The one selected by Lifesize was Node.js:
They created a Node.js wrapper that interfaces directly with the WebRTC native C++ “API” with an effort to create the same JS API they get in the browser for WebRTC.
Because of Atwood’s Law
This is doubly true when you factor in the need to support web browsers where you have WebRTC with a JS API on top anyways.The hidden assertion of WebRTC cloud infrastructure
What I like the slide above is the cloud with the wording “Lifesize Cloud Service” in it. The fact that Lifesize is connecting to it via Node.js speaks volumes about where we are and where we’re headed versus where we’re coming from.
A few years ago, this cloud service would have been based on H.323 or SIP signaling.
H.323 is now a deadend (something that is hard for me to say or think – I’ve been “doing” H.323 for the better part of my 13 years at RADVISION). SIP is used everywhere, but somehow I don’t see a bright future for it outside of PSTN connectivity (aka SIP Trunking).
Lifesize may or may not be using SIP here (SIP over WebSocket in this case) – due to the nature of their service. What I like about this is how there is a transition from WebRTC at the edge of the network towards WebRTC as the network itself. Let me try and explain –
Video conferencing vendors started off looking at WebRTC as a way to get into browsers. Or as a piece of open source code to gut and reuse elsewhere. If one wanted to connect a room system or a software client to a guest (or a user) connecting via WebRTC on a web browser, this would be the approach taken:
(I made up that term transcoding gateway just for this article)
You would interconnect them via a gateway or a media server. Signaling would be translated from one end to the other. Media would be transcoded as well. This, of course, is a waste of processing and bandwidth. It is expensive and wasteful. It doesn’t scale.
With the growing popularity of WebRTC and the increasing use and demand for browser connectivity to video conferences, there was/is no other way than to rethink the infrastructure to make it fit for purpose – have it understand and work with WebRTC not only at the edge.
That’s when vendors start trying to fit WebRTC paradigms into their infrastructure:
(guess what? Translating gateway? Also made up just for this article)
Things they do at this stage?
- Add support for SRTP in their infrastructure
- Think of adding BUNDLE and rtcp-mux
- Implement trickle ICE, or at the very least ice-lite
- Try to align the video codecs properly
There are a lot of other minor nuances that need to be added and implemented at this stage. While some of these changes are nagging and painful, others are important. Adding SRTP simply means adding encryption and security – something that is downright mandatory in this day and age.
The illustration also shows where we focused on making the changes in this round – on the devices themselves. We’ve “upgraded” our legacy phone into a smartphone. In reality, the intent here is to make the devices we have in the network WebRTC-aware so they require a lot less translation in the gateway component.
Once a vendor is here, he still has that nagging box in the middle that doesn’t allow direct communication between the browser and the rest of his infrastructure. It is still a pain that needs to be maintained and dealt with. This becomes the last thing to throw out the window.
At this last stage, vendors go “all in” with WebRTC, modifying their equipment and infrastructure to simply communicate with WebRTC directly.
This migration takes place because of three main reasons:
- The need to support web browsers with WebRTC
- The cost of interworking across WebRTC and whatever the rest of the vendor’s infrastructure supports
- The popularity of WebRTC and its vibrant ecosystem marks it as the leading technology moving forward
That third reason is why once a decision to upgrade the infrastructure of a vendor and modernize it takes place, there is a switch towards adopting WebRTC wholeheartedly.This isn’t just Lifesize
Microsoft took the plunge when adding Skype for Web and went all in with Microsoft Teams.
With their hardware devices for Teams they simply support web technologies in the device, with WebRTC, which means theoretical ability to support any WebRTC infrastructure deployed out there and not only Teams.
Same as the above is what we see with Cisco recently.
BlueJeans and Highfive both live and breath web technologies.
Forgot to mention you? Put a comment below…
There were other good Kranky Geek sessions around this topic this year and last year. Here are a few of them:
- Discord (2018) – how they use WebRTC and the changes made to it to fit their needs. In their case, that was very large audio conferences
- Microsoft (2018) – an overview of WebRTC for UWP and Hololens
- PION (2019) – an alternative WebRTC stack written in Go, and using WASM while at it
- RingCentral (2019) – server apps with Node.js+WebRTC
- Phantom Auto (2019) – replacing the video encoder with an external hardware one running on an NVIDIA GPU
Here’s what seems to be the winning software stack that gets shoved under the hood of video conferencing hardware these days. It comes in two shapes and sizes:Linux
- Linux as the underlying operating systems
- HTML/JS as the visualization layer (Node.js, Chromium or WebKit as its baseline)
- WebRTC embedded in there as part of the HTML implementation
This gives a vendor a hardware platform where web development is enabled.Android
- Android as the underlying operating system
- Android app used to implement the device UI and application logic
- WebRTC embedded natively as part of the app
This diverts from the web development approach a bit (while it does allow for it). That said, it opens up room for third party applications to be developed and delivered alongside the main interface.
Linux or Android, which one will it be? Depends on what your requirements are.A word about Zoom in this context
Why isn’t Zoom using WebRTC properly?
I don’t know. But I can make an educated guess.
It all relates to my previous analysis of Zoom and WebRTC.
Zoom were stuck with the guest access paradigm, trying to take the first step was too expensive for them for some reason. Placing that interworking element to connect their infrastructure to web enabled Zoom clients didn’t scale well with pure WebRTC. It required video transcoding and probably a few more hurdles.
At their size, with their business model and with the amount of guest access use they see with the Zoom client on PCs, it just didn’t scale economically. So they took the WASM route that they are following today.
It got them on browsers, with limited quality, but workable. It got them an understanding on WASM and video processing in WASM that not many companies have today.
And it put them on an intersection in how they operate in the future.
- Switch towards WebRTC, as most of their competitors have; or
- Continue with WASM, waiting for WebCodecs and WebTransport to progress to a point where they are clearly defined and available in web browsers
If I were the CTO of Zoom, I am not sure which of these routes I’d pick at this point in time. Not an easy decision to make, with a lot to gain and lose in each approach.Need help figuring this out?
This whole domain is challenging. Getting WebRTC to work on devices, around devices, in new or existing infrastructure. Deciding how to define and build a hardware solution.
Contact me if you need help figuring this out.
The post The software inside video conferencing hardware is… WebRTC appeared first on BlogGeek.me.