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]
History
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:
Outcomes of ongoing exchanges in the companion RTCWEB group at
IETF[17] to define the set of
protocols that, together with this document, define
real-time communications in web browsers. While no one signaling protocol is mandated,
SIP over
WebSockets (
RFC7118) is often used partially due to the applicability of SIP[18] to most of the envisaged communication scenarios as well as the availability of open-source software such as
JsSIP.
Privacy issues that arise when exposing local capabilities and local streams
Technical discussions within the group, on implementing data channels in particular[19]
Experience gained through early experimentation
Feedback from other groups and individuals
In November 2017, the WebRTC 1.0 specification transitioned from Working Draft to Candidate Recommendation.[20]
In January 2021, the WebRTC 1.0 specification transitioned from Candidate Recommendation to
Recommendation.[4]
Design
Major components of WebRTC include several
JavaScriptAPIs:
getUserMedia acquires the audio and video media (e.g., by accessing a device's camera and microphone).[21]
RTCPeerConnection enables audio and video communication between peers. It performs
signal processing,
codec handling, peer-to-peer communication, security, and
bandwidth management.[22]
RTCDataChannel allows bidirectional communication of arbitrary data between peers. The data is transported using
SCTP over
DTLS.[23] It uses the same API as
WebSockets and has very low
latency.[24]
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.[25]
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 (
XMPP),
Message Queuing Telemetry Transport,
Matrix, or another protocol. Signaling may depend on one or more servers.[26][27]
RFC7478 requires implementations to provide
PCMA/
PCMU (
RFC3551), Telephone Event as
DTMF (
RFC4733), and
Opus (
RFC6716)
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.[28]
Applications
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.[29] 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.[30][31][32] 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.[33][34]
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.[35]
Support
WebRTC is supported by the following browsers (incomplete list; oldest supported version specified):
In January 2017,
TorrentFreak reported a serious security flaw in browsers supporting WebRTC, that compromised the security of
VPN tunnels by exposing a user's true
IP address.[44] The IP address read requests are not visible in the browser's developer console, and they are not blocked by most
ad blocking,
privacy and
security add-ons, enabling online tracking despite precautions.[45]
It has been reported that the cause of the address leak is not a bug that can be patched, but is foundational to the way WebRTC operates; however, there are several solutions to mitigate the problem. WebRTC leakage can be tested for, and solutions are offered for most browsers.[46] WebRTC can be disabled, if not required, in most browsers. 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[47]).
^"WebRTC". WebRTC. Archived from the original on 28 January 2018. Retrieved 6 February 2018.{{
cite web}}: CS1 maint: bot: original URL status unknown (
link)