Foundations
Rust, the language the app is written in. Memory safety without a garbage collector suits code that handles a frame every few milliseconds.
Tauri gives the app its window, its icon in the menu bar or the tray, and its updates.
Tokio runs its network and background work.
rustls for TLS.
Video and sound
FFmpeg encodes the picture and the sound, with the graphics card's encoder where there is one: NVENC, Quick Sync, AMF, VA-API or VideoToolbox. H.264, H.265 and AV1 are used where the hardware and the browser both support them. FFmpeg is licensed under the LGPL, and the app ships it as separate libraries.
Opus carries the sound with very little delay.
Network
WebRTC, through WebRTC for Rust, for one to one sessions. It finds the shortest path, encrypts it, and uses a relay only when the network refuses a direct route.
Why two transports
| When | Pick | Reason |
|---|---|---|
| One person driving | WebRTC | Shortest possible path, direct where the network allows |
| Several people watching | Media over QUIC | Fan out through a relay, so a slow viewer stalls only their own picture |
| LAN or VPN | Media over QUIC direct | No relay hop at all when the browser can reach the computer |
On each system
windows-rs reaches screen capture, sound and input on Windows.
core-graphics reaches Core Graphics on macOS, for the screen and for input.
x11rb talks to X11 on Linux.
ViGEmBus gives Windows a virtual Xbox or PlayStation controller when Alluno's own input drivers are not installed.