| <!-- go/cmark --> |
| |
| <!--* freshness: {owner: 'tommi' reviewed: '2026-06-17'} *--> |
| |
| # The WebRTC API |
| |
| The public API of the WebRTC library consists of the api/ directory and its |
| subdirectories. No other files should be depended on by webrtc users. |
| |
| Before starting to code against the API, it is important to understand some |
| basic concepts, such as: |
| |
| - Memory management, including webrtc's reference counted objects |
| - [Thread management](threading_design.md) |
| |
| ## Using WebRTC through the PeerConnection class |
| |
| The |
| [PeerConnectionInterface](https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/peer_connection_interface.h?q=webrtc::PeerConnectionInterface) |
| class is the recommended way to use the WebRTC library. |
| |
| It is closely modeled after the Javascript API documented in the |
| [WebRTC specification](https://w3c.github.io/webrtc-pc/). |
| |
| PeerConnections are created using the |
| [PeerConnectionFactoryInterface](https://source.chromium.org/search?q=webrtc::PeerConnectionFactoryInterface). |
| |
| There are two levels of customization available: |
| |
| - Pass a PeerConnectionFactoryDependencies object to the function that creates a |
| PeerConnectionFactory. This object defines factories for a lot of internal |
| objects inside the PeerConnection, so that users can override them. All |
| PeerConnections using this interface will have the same options. |
| - Pass a PeerConnectionInterface::RTCConfiguration object to the |
| CreatePeerConnectionOrError() function on the PeerConnectionFactoryInterface. |
| These customizations will apply only to a single PeerConnection. |
| |
| Most functions on the PeerConnection interface are asynchronous, and take a |
| callback that is executed when the function is finished. The callbacks are |
| mostly called on the thread that is passed as the "signaling thread" field of |
| the PeerConnectionFactoryDependencies, or the thread that called |
| `webrtc::CreatePeerConnectionFactory()` if no signaling thread is given. |
| |
| See each class' module documentation for details. |
| |
| ## Using WebRTC components without the PeerConnection class |
| |
| This needs to be done carefully, and in consultation with the WebRTC team. There |
| are non-obvious dependencies between many of the components. |
| |
| ## Video Codecs |
| |
| - [RTC Video Encoder API v2](/api/video_codecs/g3doc/video_encoder_api_v2.md) |