Example
Callme is a demo that sets up an iroh endpoint, registers the streaming protocol, and connects peers so they can exchange Opus-encoded audio.Prerequisites
- Rust toolchain (
rustup,cargo) installed cargodependencies required bycallme(on Linux: ALSA dev headers, on macOS: appropriate audio build tools). See thecallmecrate READMEs for platform-specific notes.
Run the cross-platform demo
The workspace contains two entrypoints:callme-cli, a minimal command-line clientcallme-eguifor Desktop and Android
Troubleshooting
- If audio devices fail on Linux, ensure you have
libasound2-devinstalled. - If builds fail due to C dependencies (echo cancellation), try building
without default features:
cargo run --release --no-default-features. - Network reachability: use relays or ensure both peers can establish QUIC connections (NATs may require holepunching or relay services).
How the pieces fit
- Endpoint: handles transport (QUIC) and addresses.
- Router: accepts incoming connections and routes them to protocol handlers
- Protocol handler (e.g.,
iroh-roq): implements the streaming wire format and request/response logic over QUIC streams. - Application layer: captures/encodes audio, calls protocol API to publish frames and subscribes to incoming streams.