WebRTC (Web Real-Time Communication) is a free and open-source project providing web browsers and mobile applications with real-time communication (RTC) via application programming interfaces (APIs). It allows audio and video communication to work inside web pages by allowing direct peer-to-peer communication, eliminating the need to install plugins or download native apps.[3] Supported by Apple, Google, Microsoft, Mozilla, and Opera, WebRTC specifications have been published by the World Wide Web Consortium (W3C) and the Internet Engineering Task Force (IETF).[4][5]
![]() | |
Original author(s) | Justin Uberti Peter Thatcher |
---|---|
Initial release | 2011 |
Stable release | 1.0[1]
/ May 4, 2018 |
Repository | webrtc |
Written in | C++,[2] JavaScript |
Standard(s) | w3 |
License | BSD license |
Website | webrtc |
According to the webrtc.org website, the purpose of the project is to "enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols".[6]
In May 2010, Google bought Global IP Solutions or GIPS, a VoIP and videoconferencing software company that had developed many components required for RTC, such as codecs and echo cancellation techniques. Google open-sourced the GIPS technology and engaged with relevant standards bodies at the IETF and W3C to ensure industry consensus.[7][8] In May 2011, Google released an open-source project for browser-based real-time communication known as WebRTC.[9] This has been followed by ongoing work to standardize the relevant protocols in the IETF[10] and browser APIs in the W3C.[11]
In January 2011, Ericsson Labs built the first implementation of WebRTC using a modified WebKit library.[12][13] In October 2011, the W3C published its first draft for the spec.[14] WebRTC milestones include the first cross-browser video call (February 2013), first cross-browser data transfers (February 2014), and as of July 2014 Google Hangouts was "kind of" using WebRTC.[15]
The W3C draft API was based on preliminary work done in the WHATWG.[16] It was referred to as the ConnectionPeer API, and a pre-standards concept implementation was created at Ericsson Labs.[12] The WebRTC Working Group expects this specification to evolve significantly based on:
In November 2017, the WebRTC 1.0 specification transitioned from Working Draft to Candidate Recommendation.[19]
In January 2021, the WebRTC 1.0 specification transitioned from Candidate Recommendation to Recommendation.[4]
Major components of WebRTC include several JavaScript APIs:
getUserMedia
acquires the audio and video media (e.g., by accessing a device's camera and microphone).[20]RTCPeerConnection
enables audio and video communication between peers. It performs signal processing, codec handling, peer-to-peer communication, security, and bandwidth management.[21]RTCDataChannel
allows bidirectional communication of arbitrary data between peers. The data is transported using SCTP over DTLS.[22] It uses the same API as WebSockets and has very low latency.[23]The WebRTC API also includes a statistics function:
getStats
allows the web application to retrieve a set of statistics about WebRTC sessions. These statistics data are being described in a separate W3C document.[24]The WebRTC API includes no provisions for signaling, that is discovering peers to connect to and determine how to establish connections among them. Applications use Interactive Connectivity Establishment for connections and are responsible for managing sessions, possibly relying on any of Session Initiation Protocol, Extensible Messaging and Presence Protocol, Message Queuing Telemetry Transport, Matrix, or another protocol. Signaling may depend on one or more servers.[25][26]
RFC 7478 requires implementations to provide PCMA/PCMU (RFC 3551), Telephone Event as DTMF (RFC 4733), and Opus (RFC 6716) audio codecs as minimum capabilities. The PeerConnection, data channel and media capture browser APIs are detailed in the W3C specification.
W3C is developing ORTC (Object Real-Time Communications) for WebRTC.[27]
WebRTC allows browsers to stream files directly to one another, reducing or entirely removing the need for server-side file hosting. WebTorrent uses a WebRTC transport to enable peer-to-peer file sharing using the BitTorrent protocol in the browser.[28] Some file-sharing websites use it to allow users to send files directly to one another in their browsers, although this requires the uploader to keep the tab open until the file has been downloaded.[29][30][31] A few CDNs, such as the Microsoft-owned Peer5, use the client's bandwidth to upload media to other connected peers, enabling each peer to act as an edge server.[32][33]
Although initially developed for web browsers, WebRTC has applications for non-browser devices, including mobile platforms and IoT devices. Examples include browser-based VoIP telephony, also called cloud phones or web phones, which allow calls to be made and received from within a web browser, replacing the requirement to download and install a softphone.[34]
WebRTC is supported by the following browsers:
GStreamer directly provides a free WebRTC implementation.[40]
Support for individual codecs is not uniform. WebRTC establishes a standard set of codecs which all compliant browsers are required to implement. Some browsers may choose to allow other codecs as well. [41]
Codec name | Profile(s) | Browser compatibility |
---|---|---|
H.264 | Constrained Baseline (CB) | Chrome (52+), Edge, Firefox[1], Safari |
VP8 | - | Chrome, Edge, Firefox, Safari (12.1+)[42] |
VP9 | - | Chrome (48+), Firefox |
Codec name | Browser compatibility |
---|---|
Opus | Chrome, Edge, Firefox, Safari |
G.711 PCM (A-law) | Chrome, Firefox, Safari |
G.711 PCM (µ-law) | Chrome, Firefox, Safari |
G.722 | Chrome, Firefox, Safari |
iLBC | Chrome, Safari |
iSAC | Chrome, Safari |
In January 2015, TorrentFreak reported a serious security flaw in browsers that support WebRTC, saying that it compromised the security of VPN tunnels by exposing the true IP address of a user.[43] The IP address read requests are not visible in the browser's developer console, and they are not blocked by most ad blocking/privacy/security add-ons, enabling online tracking by advertisers and other entities despite precautions,[44] although the uBlock Origin add-on can fix this problem (as some browsers now fix this problem by themselves, from uBlock Origin v1.38 onwards this option has been disabled on these browsers[45]). As of September 2019, this WebRTC flaw still surfaces on Firefox 69.x and still by default exposes the user's internal IP address to the web.[46] In Firefox WebRTC can be disabled via media.peerconnection.enabled config-option.
{{cite web}}
: CS1 maint: url-status (link)