reactor-webrtc (Python)
Python bindings for the reactor-webrtc WebRTC engine, built with
PyO3 and distributed as a self-contained wheel — no separate
native library required at runtime.
Installation
pip install reactor-webrtc
Requires Python ≥ 3.10.
Quick start
import reactor_webrtc as rw
factory = rw.PeerConnectionFactory()
obs = rw.PeerConnectionObserver()
obs.on_ice_candidate = lambda c: relay_to_peer(c)
obs.on_connection_state_change = lambda s: print("state:", s)
config = rw.RtcConfiguration(ice_servers=[
rw.IceServer(urls=["stun:stun.l.google.com:19302"]),
# A turn:/turns: entry needs both credentials, or libwebrtc rejects the
# whole configuration.
rw.IceServer(urls=["turn:turn.example.com:3478"], username="alice", password="secret"),
])
pc = factory.create_peer_connection(config, obs)
offer = pc.create_offer()
pc.set_local_description(offer)
# Exchange offer.sdp with the remote peer via your signaling channel, then:
# pc.set_remote_description(remote_answer)
# pc.add_ice_candidate(candidate)
Audio
# Headless / server: push PCM programmatically (synthetic ADM, default)
factory = rw.PeerConnectionFactory()
factory.push_audio_frame(pcm_bytes, sample_rate=48000, channels=1)
# Desktop client: real mic + AEC3 + noise suppression
factory = rw.PeerConnectionFactory(
platform_adm=True,
echo_canceller=True,
noise_suppression=True,
)
Pre-encoded video
factory, video = rw.PeerConnectionFactory.with_encoded_video_track(
"camera", width=1280, height=720
)
pc = factory.create_peer_connection(config, obs)
tx = video.add_transceiver(pc, rw.TransceiverDirection.SendOnly)
# From your encoder thread:
video.push_encoded_frame(
data=h264_annex_b,
is_key_frame=True,
width=1280, height=720,
)
Receiving media
obs = rw.PeerConnectionObserver()
def on_track(kind, track):
if kind == rw.MediaKind.Video:
track.on_video_frame(lambda bgra, w, h: display(bgra, w, h))
elif kind == rw.MediaKind.Audio:
track.on_audio_frame(lambda pcm, sr, ch, n: play(pcm))
obs.on_track = on_track
Stats
report = pc.get_stats()
for pair in report.candidate_pairs:
print(pair.state, f"{pair.current_round_trip_time_s * 1000:.1f}ms")
API reference
| Class | Description |
|---|---|
PeerConnectionFactory |
Entry point; creates peer connections and tracks |
PeerConnection |
SDP offer/answer, ICE, tracks, data channels, stats |
PeerConnectionObserver |
Callbacks: state, ICE candidate, track, data channel |
RtcConfiguration |
ICE servers, ICE transport type, gathering policy |
IceServer |
A STUN or TURN server entry |
IceCandidate |
A trickled ICE candidate |
SessionDescription |
SDP offer or answer (kind, sdp) |
Track |
Local (push frames) or remote (attach sink) media track |
EncodedVideoTrack |
Push pre-encoded video (H.264 Annex-B, VP8, VP9, …) |
Transceiver |
RTP m-section: mid, kind, set_track, set_direction |
DataChannel |
SCTP data channel: send, on_message, on_open, … |
StatsReport |
inbound_rtp, outbound_rtp, candidate_pairs |
| Enum | Values |
|---|---|
PeerConnectionState |
New, Connecting, Connected, Disconnected, Failed, Closed |
IceGatheringState |
New, Gathering, Complete |
TransceiverDirection |
SendRecv, SendOnly, RecvOnly, Inactive |
MediaKind |
Audio, Video |
DataChannelState |
Connecting, Open, Closing, Closed |
IceCandidatePairState |
Waiting, InProgress, Failed, Succeeded, Cancelled |
| String-valued field | Values |
|---|---|
RtcConfiguration.ice_transport_type |
all (default), relay, no_host, none |
RtcConfiguration.continual_gathering_policy |
once (default), continually |
Thread safety
Signaling methods (create_offer, set_local_description, etc.) block for a
few milliseconds while the WebRTC engine responds. Wrap in asyncio.to_thread()
when calling from an async context. Callbacks fire on WebRTC internal threads
with the GIL acquired; keep them fast.
License
Apache-2.0. Upstream WebRTC is BSD-3-Clause + the WebRTC patent grant.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reactor_webrtc-0.3.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: reactor_webrtc-0.3.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 7.8 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9082e3725aad102e342f7afcf97c4dba912fd7241b7805392ffdbcd65a577f59
|
|
| MD5 |
bc14116eb4490080c27aba7677d59f82
|
|
| BLAKE2b-256 |
203fcdfb8d436bd8e975085325ace3dbbe9e78ad31423c25c4d3c8d603e1101b
|
Provenance
The following attestation bundles were made for reactor_webrtc-0.3.0-cp310-abi3-win_amd64.whl:
Publisher:
publish.yml on reactor-team/reactor-webrtc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reactor_webrtc-0.3.0-cp310-abi3-win_amd64.whl -
Subject digest:
9082e3725aad102e342f7afcf97c4dba912fd7241b7805392ffdbcd65a577f59 - Sigstore transparency entry: 2309803367
- Sigstore integration time:
-
Permalink:
reactor-team/reactor-webrtc@9e9ad205a9639890e1b6547586d8089745359b5b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/reactor-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e9ad205a9639890e1b6547586d8089745359b5b -
Trigger Event:
push
-
Statement type:
File details
Details for the file reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 8.8 MB
- Tags: CPython 3.10+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4239d25ce056265f1ac18fa3514ce713d12b02be253fdd023e9c7f2de077b57a
|
|
| MD5 |
8e7fa43a7d9099ebc9f6ddf95889daca
|
|
| BLAKE2b-256 |
a52f4d0e6b56a4b7cb21eb2d38813e921cf6cad5526be37a54b7e7922d48c63e
|
Provenance
The following attestation bundles were made for reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_x86_64.whl:
Publisher:
publish.yml on reactor-team/reactor-webrtc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_x86_64.whl -
Subject digest:
4239d25ce056265f1ac18fa3514ce713d12b02be253fdd023e9c7f2de077b57a - Sigstore transparency entry: 2309803359
- Sigstore integration time:
-
Permalink:
reactor-team/reactor-webrtc@9e9ad205a9639890e1b6547586d8089745359b5b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/reactor-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e9ad205a9639890e1b6547586d8089745359b5b -
Trigger Event:
push
-
Statement type:
File details
Details for the file reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 8.2 MB
- Tags: CPython 3.10+, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e0a99de6034766c759d2e50d2f47921adde76cb3f5666c61c3f2dfb6b604c02
|
|
| MD5 |
68e263a860e0a89739b8526d7a243118
|
|
| BLAKE2b-256 |
7d597b5587004650c6b958fd2ca905bb4772a290d2ff68614fcef0884c56b10e
|
Provenance
The following attestation bundles were made for reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_aarch64.whl:
Publisher:
publish.yml on reactor-team/reactor-webrtc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reactor_webrtc-0.3.0-cp310-abi3-manylinux_2_34_aarch64.whl -
Subject digest:
9e0a99de6034766c759d2e50d2f47921adde76cb3f5666c61c3f2dfb6b604c02 - Sigstore transparency entry: 2309803377
- Sigstore integration time:
-
Permalink:
reactor-team/reactor-webrtc@9e9ad205a9639890e1b6547586d8089745359b5b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/reactor-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e9ad205a9639890e1b6547586d8089745359b5b -
Trigger Event:
push
-
Statement type:
File details
Details for the file reactor_webrtc-0.3.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: reactor_webrtc-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
507b173e0a268708c1d8ad2b68f0f6401d9d4d0cfdc864d588eee25b8235cc36
|
|
| MD5 |
7f5e5c99f4e844a9135087428e266954
|
|
| BLAKE2b-256 |
862e8121e11e38219a0fe0b9c6f71ee21436f3a6834e76d94db7cc8471b425e4
|
Provenance
The following attestation bundles were made for reactor_webrtc-0.3.0-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
publish.yml on reactor-team/reactor-webrtc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reactor_webrtc-0.3.0-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
507b173e0a268708c1d8ad2b68f0f6401d9d4d0cfdc864d588eee25b8235cc36 - Sigstore transparency entry: 2309803373
- Sigstore integration time:
-
Permalink:
reactor-team/reactor-webrtc@9e9ad205a9639890e1b6547586d8089745359b5b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/reactor-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e9ad205a9639890e1b6547586d8089745359b5b -
Trigger Event:
push
-
Statement type: