Chrome's WebRTC engine, with the browser API, in Python.
The project's README from github.com/MarshalX/python-webrtc. As one markdown file: README.md.
Documentation • Quickstart • Examples • Benchmarks • PyPI
Python WebRTC binds libwebrtc M152, the engine inside Chrome, and exposes it through the W3C APIs you
already know from the browser: RTCPeerConnection, data channels, tracks, WebCodecs frames, encoded transforms and
stats. Talk to browsers, servers, SFUs and AI agents peer-to-peer, with no vendor service in between.
pip install wrtc
Coming from aiortc? Install
wrtc[aiortc], changefrom aiortctofrom webrtc.aiortc, and your code runs on Chrome's engine. See Migrating from aiortc.
| Browser | Python |
|---|---|
|
|
Names follow the specifications in snake_case, and the camelCase originals (createOffer) work too. Enums compare
equal to the strings of the specification, dictionaries are typed dataclasses, and everything is asyncio.
MediaStreamTrackProcessor, VideoTrackGenerator and MediaStreamTrackGenerator
with WebCodecs' VideoFrame and AudioData, piped through WHATWG Streams.RTCRtpScriptTransform and end-to-end encryption with SFrame.pip install and go. Prebuilt wheels for Linux, macOS and Windows, CPython 3.9–3.15, including
free-threaded 3.14t and 3.15t. Nothing else to install.| Python WebRTC | aiortc | LiveKit SDK | GStreamer webrtcbin | |
|---|---|---|---|---|
| Engine | libwebrtc (Chrome's) | own, in Python | libwebrtc | own, in C |
| Connects peer-to-peer to any WebRTC endpoint | ✅ | ✅ | ❌ needs a LiveKit server | ✅ |
Browser API (RTCPeerConnection, createOffer, …) |
✅ | similar | ❌ rooms | ❌ GObject signals |
| Media path | native | Python | native | native |
| VP9 and AV1 | ✅ | ❌ | ✅ | ✅ |
pip install on Linux, macOS and Windows |
✅ | ✅ | ✅ | ❌ no Linux wheels |
Against aiortc, it opens connections 7.3–8.3x faster, moves 7.7–14.6x more data through a data channel and spends less CPU on audio. See the benchmarks, which also measure Pion, libdatachannel and webrtc-rs.
The full comparison, and when another library is the better choice: Choosing a Python WebRTC library.
| Linux and Windows | macOS | |
|---|---|---|
| Video | VP8, VP9, AV1, H.264 with OpenH264 | VP8, VP9, AV1, H.264 with VideoToolbox |
| Audio | Opus, G.722, G.711 | Opus, G.722, G.711 |
No H.264 implementation is built into the package. webrtc.openh264.install() downloads Cisco's binary on the
user's device, under Cisco's patent license.
Prebuilt wheels for CPython 3.9–3.15, and free-threaded 3.14t and 3.15t, on:
| Linux | macOS | Windows |
|---|---|---|
| x86_64 and aarch64 (glibc 2.27+, manylinux) | 13+, Intel and Apple Silicon | x64 |
Elsewhere pip builds it from sources with CMake and a C++20 compiler. See CONTRIBUTING.md.
Complete programs, ready to copy. The ones with dependencies declare them inline, so uv run needs nothing installed.
uv run https://raw.githubusercontent.com/MarshalX/python-webrtc/main/examples/janus_streaming.py
Pre-1.0: the API follows the specifications, but compatibility between versions isn't guaranteed until 1.0.0. See the changelog.
Contributions of any size are welcome. CONTRIBUTING.md covers the development setup, building from sources, releasing and updating libwebrtc.
Python WebRTC is published under the BSD 3-Clause License.
Chrome's WebRTC engine, with the browser API, in Python.