rustrtc
A high-performance implementation of WebRTC.
Features
- πHigh performance: ~64% faster than
pion(go version). - π‘WebRTC Compliant: Full compliance with webrtc/chrome.
- πΊMedia Support: RTP/SRTP handling for audio and video.
- πICE/STUN: Interactive Connectivity Establishment and STUN protocol support.
Benchmark game (rustrtc vs webrtc-rs & pion)
CPU: AMD Ryzen 7 5700X 8-Core Processor
OS 5.15.0-118-generic #128-Ubuntu
Compiler rustc 1.91.0 (f8297e351 2025-10-28), go version go1.23.0 linux/amd64
nice@miuda.ai rustrtc % cargo run -r --example benchmark
Comparison (Baseline: webrtc)
Metric | webrtc | rustrtc | pion
--------------------------------------------------------------------------------
Duration (s) | 10.22 | 10.00 | 10.61
Setup Latency (ms) | 0.57 | 0.13 | 0.50
Throughput (MB/s) | 257.92 | 493.28 | 299.89
Msg Rate (msg/s) | 264113.80 | 505122.00 | 307082.19
CPU Usage (%) | 1555.80 | 1331.10 | 1157.17
Memory (MB) | 30.00 | 10.00 | 47.00
--------------------------------------------------------------------------------
Performance Charts
==================
Throughput (MB/s) (Higher is better)
webrtc | ββββββββββββββββββββ 257.92
rustrtc | ββββββββββββββββββββββββββββββββββββββββ 493.28
pion | ββββββββββββββββββββββββ 299.89
Message Rate (msg/s) (Higher is better)
webrtc | ββββββββββββββββββββ 264113.80
rustrtc | ββββββββββββββββββββββββββββββββββββββββ 505122.00
pion | ββββββββββββββββββββββββ 307082.19
Setup Latency (ms) (Lower is better)
webrtc | ββββββββββββββββββββββββββββββββββββββββ 0.57
rustrtc | βββββββββ 0.13
pion | βββββββββββββββββββββββββββββββββββ 0.50
CPU Usage (%) (Lower is better)
webrtc | ββββββββββββββββββββββββββββββββββββββββ 1555.80
rustrtc | ββββββββββββββββββββββββββββββββββ 1331.10
pion | βββββββββββββββββββββββββββββ 1157.17
Memory (MB) (Lower is better)
webrtc | βββββββββββββββββββββββββ 30.00
rustrtc | ββββββββ 10.00
pion | ββββββββββββββββββββββββββββββββββββββββ 47.00
Key Findings:
- Throughput:
rustrtcis ~91% faster thanwebrtc-rsand ~64% faster thanpion. - Memory:
rustrtcuses ~67% less memory thanwebrtc-rsand ~79% less thanpion. - Setup Latency: Significantly faster connection setup (0.13ms vs 0.57ms/0.50ms).
Usage
Here is a simple example of how to create a PeerConnection and handle an offer:
use ;
async
Configuration
rustrtc allows customizing the WebRTC session via RtcConfiguration:
- ice_servers: Configure STUN/TURN servers.
- ice_transport_policy: Control ICE candidate gathering (e.g.,
All,Relay). - ssrc_start: Set the starting SSRC value for local tracks.
- media_capabilities: Configure supported codecs (payload types, names) and SCTP ports.
use ;
let mut config = default;
// Configure ICE servers
config.ice_servers.push;
// Set ICE transport policy (optional)
config.ice_transport_policy = All;
config.ssrc_start = 10000;
// Customize media capabilities
let mut caps = default;
// ... configure audio/video/application caps ...
config.media_capabilities = Some;
let pc = new;
Examples
You can run the examples provided in the repository.
SFU (Selective Forwarding Unit)
A multi-user video conferencing server. It receives media from each participant and forwards it to others.
-
Run the server:
-
Open your browser and navigate to
http://127.0.0.1:8081. Open multiple tabs/windows to simulate multiple users.

Echo Server
The echo server example demonstrates how to accept a WebRTC connection, receive data on a data channel, and echo it back. It also supports video playback if an IVF file is provided.
-
Run the server:
-
Open your browser and navigate to
http://127.0.0.1:3000.
DataChannel Chat
A multi-user chat room using WebRTC DataChannels.
-
Run the server:
-
Open your browser and navigate to
http://127.0.0.1:3000. Open multiple tabs to chat between them.
Audio Saver
Records audio from the browser's microphone and saves it to a file (output.ulaw) on the server.
-
Run the server:
-
Open your browser and navigate to
http://127.0.0.1:3000. Click "Start" to begin recording.
RTP Play (FFmpeg)
Streams a video file (examples/static/output.ivf) via RTP to a UDP port, which can be played back using ffplay.
-
Run the server:
-
In a separate terminal, run
ffplay(requires ffmpeg installed):
License
This project is licensed under the MIT License.