Skip to content

GACWR/agora

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Agora

Real-time audio streaming engine with MQTT pub/sub and P2P modes.

┌─────────────┐     MQTT (QoS 0)      ┌──────────────┐
│  Client A   │◄─────────────────────►│  Agora Broker │
│  (capture)  │   PCM/Opus frames     │  (rumqttd)    │
└─────────────┘                        └──────┬───────┘
                                              │
┌─────────────┐     MQTT (QoS 0)              │
│  Client B   │◄──────────────────────────────┘
│  (playback) │
└─────────────┘

         ── OR ──

┌─────────────┐    QUIC (direct)     ┌─────────────┐
│  Client A   │◄────────────────────►│  Client B   │
│             │   P2P audio stream   │             │
└─────────────┘                      └─────────────┘
       ▲                                    ▲
       │         Signaling only             │
       └────────── Broker ──────────────────┘

Architecture

  • agora-protocol — Shared wire types (PCM/Opus frames, signaling, room events). MessagePack serialized.
  • agora-broker — MQTT broker (rumqttd) with room management. Topics: agora/{room}/audio/{peer}, agora/{room}/events.
  • agora-p2p — QUIC-based peer-to-peer connections via Quinn. Self-signed certs, NAT traversal.
  • agora-client — Client library with jitter buffer, audio mixer, MQTT transport.
  • agora-cli — CLI: agora join, agora serve, agora create-room, agora list-rooms, agora bench.

Quick Start

# Run the broker
cargo run --bin agora -- serve

# Join a room (in another terminal)
cargo run --bin agora -- join --room my-room

# Run tests
make test

# Run benchmarks
make bench

# Deploy to K8s
make k8s-deploy

Modes

MQTT Pub/Sub

Central broker relays PCM audio chunks. Clients subscribe to room topics, publish mic audio as PCM frames. QoS 0 for lowest latency.

P2P (QUIC)

Direct peer-to-peer streaming. Broker handles signaling/discovery only. Uses Quinn (QUIC) with self-signed certificates. Falls back to MQTT relay if hole-punching fails.

Wire Format

All messages use MessagePack (rmp-serde) for compact, low-latency serialization.

Frame Type Typical Size (20ms @ 48kHz mono)
PCM (f32) ~3.8 KB
Opus ~60-120 bytes

Building

cargo build --workspace
cargo clippy --workspace -- -D warnings
cargo test --workspace
cargo fmt --all

License

MIT

About

Cost model

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Rust 97.8%
  • JavaScript 2.2%