Firefox Tomorrow

web api overview

WebRTC API

View on MDN ↗

WebRTC (Web Real-Time Communication) is a technology that enables Web applications and sites to capture and optionally stream audio and/or video media, as well as to exchange arbitrary data between browsers without requiring an intermediary. The set of standards that comprise WebRTC makes it possible to share data and perform teleconferencing peer-to-peer, without requiring that the user install plug-ins or any other third-party software.

WebRTC consists of several interrelated APIs and protocols which work together to achieve this. The documentation you’ll find here will help you understand the fundamentals of WebRTC, how to set up and use both data and media connections, and more.

WebRTC concepts and usage

WebRTC serves multiple purposes; together with the Media Capture and Streams API, they provide powerful multimedia capabilities to the Web, including support for audio and video conferencing, file exchange, screen sharing, identity management, and interfacing with legacy telephone systems including support for sending DTMF (touch-tone dialing) signals. Connections between peers can be made without requiring any special drivers or plug-ins, and can often be made without any intermediary servers.

Connections between two peers are represented by the RTCPeerConnection interface. Once a connection has been established and opened using RTCPeerConnection, media streams (MediaStreams) and/or data channels (RTCDataChannels) can be added to the connection.

Media streams can consist of any number of tracks of media information; tracks, which are represented by objects based on the MediaStreamTrack interface, may contain one of a number of types of media data, including audio, video, and text (such as subtitles or even chapter names). Most streams consist of at least one audio track and likely also a video track, and can be used to send and receive both live media or stored media information (such as a streamed movie).

You can also use the connection between two peers to exchange arbitrary binary data using the RTCDataChannel interface. This can be used for back-channel information, metadata exchange, game status packets, file transfers, or even as a primary channel for data transfer.

Interoperability

WebRTC is in general well supported in modern browsers, but some incompatibilities remain. The adapter.js library is a shim to insulate apps from these incompatibilities.

WebRTC reference

Because WebRTC provides interfaces that work together to accomplish a variety of tasks, we have divided up the reference by category. Please see the sidebar for an alphabetical list.

Connection setup and management

These interfaces, dictionaries, and types are used to set up, open, and manage WebRTC connections. Included are interfaces representing peer media connections, data channels, and interfaces used when exchanging information on the capabilities of each peer in order to select the best possible configuration for a two-way media connection.

Interfaces

Events

Types

Identity and security

These APIs are used to manage user identity and security, in order to authenticate the user for a connection.

Telephony

These interfaces and events are related to interactivity with Public-Switched Telephone Networks (PSTNs). They’re primarily used to send tone dialing sounds—or packets representing those tones—across the network to the remote peer.

Interfaces

  • RTCDTMFSender
    • : Manages the encoding and transmission of Dual-Tone Multi-Frequency (DTMF) signaling for an RTCPeerConnection.
  • RTCDTMFToneChangeEvent
    • : Used by the tonechange event to indicate that a DTMF tone has either begun or ended. This event does not bubble (except where otherwise stated) and is not cancelable (except where otherwise stated).

Events

Encoded Transforms

These interfaces and events are used to process incoming and outgoing encoded video and audio frames using a transform stream running in a worker.

Interfaces

  • RTCRtpScriptTransform
    • : An interface for inserting transform stream(s) running in a worker into the RTC pipeline.
  • RTCRtpScriptTransformer
    • : The worker-side counterpart of an RTCRtpScriptTransform that passes options from the main thread, along with a readable stream and writeable stream that can be used to pipe encoded frames through a TransformStream.
  • RTCEncodedVideoFrame
    • : Represents an encoded video frame to be transformed in the RTC pipeline.
  • RTCEncodedAudioFrame
    • : Represents an encoded audio frame to be transformed in the RTC pipeline.

Properties

  • transform
    • : A property used to insert a transform stream into the receiver pipeline for incoming encoded video and audio frames.
  • transform
    • : A property used to insert a transform stream into the sender pipeline for outgoing encoded video and audio frames.

Events

  • rtctransform
    • : An RTC transform is ready to run in the worker, or an encoded video or audio frame is ready to process.

Guides

  • Introduction to the Real-time Transport Protocol (RTP)
    • : The Real-time Transport Protocol (RTP), defined in 3550, is an IETF standard protocol to enable real-time connectivity for exchanging data that needs real-time priority. This article provides an overview of what RTP is and how it functions in the context of WebRTC.
  • Introduction to WebRTC protocols
    • : This article introduces the protocols on top of which the WebRTC API is built.
  • WebRTC connectivity
    • : A guide to how WebRTC connections work and how the various protocols and interfaces can be used together to build powerful communication apps.
  • Lifetime of a WebRTC session
    • : WebRTC lets you build peer-to-peer communication of arbitrary data, audio, or video—or any combination thereof—into a browser application. In this article, we’ll look at the lifetime of a WebRTC session, from establishing the connection all the way through closing the connection when it’s no longer needed.
  • Establishing a connection: The perfect negotiation pattern
    • : Perfect negotiation is a design pattern which is recommended for your signaling process to follow, which provides transparency in negotiation while allowing both sides to be either the offerer or the answerer, without significant coding needed to differentiate the two.
  • Signaling and two-way video calling
    • : A tutorial and example which turns a WebSocket-based chat system created for a previous example and adds support for opening video calls among participants. The chat server’s WebSocket connection is used for WebRTC signaling.
  • Codecs used by WebRTC
    • : A guide to the codecs which WebRTC requires browsers to support as well as the optional ones supported by various popular browsers. Included is a guide to help you choose the best codecs for your needs.
  • Using WebRTC data channels
    • : This guide covers how you can use a peer connection and an associated RTCDataChannel to exchange arbitrary data between two peers.
  • Using DTMF with WebRTC
    • : WebRTC’s support for interacting with gateways that link to old-school telephone systems includes support for sending DTMF tones using the RTCDTMFSender interface. This guide shows how to do so.
  • Using WebRTC Encoded Transforms
    • : This guide shows how a web application can modify incoming and outgoing WebRTC encoded video and audio frames, using a TransformStream running into a worker.

Tutorials

Specifications

SpecificationsStandards references are available on the canonical MDN page.

WebRTC-proper protocols

See also