System Requirements

Mixer server (shiloh-mixer)

OS: Linux (Ubuntu 24.04 recommended; any distribution with a recent kernel and PipeWire works)

Audio: PipeWire with the JACK shim (pipewire-jack). A real jackd is not required — shiloh-mixer links against libjack and the systemd unit points LD_LIBRARY_PATH at the PipeWire JACK shim directory.

Packages (Ubuntu 24.04):

sudo apt install pipewire pipewire-pulse pipewire-jack wireplumber \
  alsa-utils

Hardware: any x86_64 machine with a USB or PCIe audio interface. A quad-core CPU at 2 GHz is more than enough for 10 channels at 48 kHz / 128-frame JACK period.

Build toolchain (if building from source): Rust stable (cargo build --release). Pre-built binaries are available via the install script.

Network: one UDP port open to the LAN (default 5005). If ingest senders or relay clients are on remote subnets, WireGuard or equivalent is required.

Broadcaster sender (shiloh-broadcaster)

OS: Linux x86_64 with PipeWire (required for null-sink creation).

NOTE: --no-sink skips the PipeWire null-sink creation if you manage the sink yourself or are using a different audio subsystem. JACK capture still requires PipeWire-JACK or a real jackd.

Audio: PipeWire with pipewire-jack installed.

Network: outbound UDP to the mixer’s broadcast_port (default 5005). No inbound ports required on the sender machine.

Relay client (shiloh-relay)

OS: Linux x86_64 or aarch64 (Raspberry Pi). Windows builds are produced by cross-compilation but are less tested.

Audio: any ALSA or CoreAudio output device. The relay uses cpal for cross-platform audio output.

Network: outbound UDP to the mixer server. No inbound ports needed.

Web relay (shiloh-web-relay)

OS: Linux x86_64 (runs on the same machine as shiloh-mixer by default).

Browser requirement for listeners: any modern browser with WebRTC support — Chrome 90+, Firefox 90+, Safari 15+, Android Chrome, iOS Safari.

Network: shiloh-web-relay binds a WHEP HTTP endpoint (default 127.0.0.1:8890, proxied by mixer_web at :8889/whep/*). WebRTC media uses ephemeral UDP ports — ensure the server’s firewall permits outbound UDP on the high port range (32768–65535) if ICE candidates need to be reachable from outside the LAN.

For WAN browser listeners, you may need a TURN server if symmetric NAT is in the path. See the Advanced section.

Network

LAN recommended: at < 5 ms RTT, the 128-frame (2.67 ms) packet buffer is more than sufficient and dropouts are essentially impossible on a wired Ethernet switch.

WireGuard for WAN: tested up to 50 ms RTT with --buffer-ms 40 on shiloh-relay. For relay-to-browser (WebRTC) paths, the Opus jitter buffer in the browser handles moderate packet loss gracefully.

Bandwidth per relay client: ~1.6 Mbit/s (375 packets/s × 549 bytes at stereo / S16LE / 128 frames). Eight simultaneous relay clients = ~13 Mbit/s — negligible on a Gigabit LAN.