Quick Start

Goal: get audio from a laptop into the mixer and hear it on a second machine in about five minutes. This assumes a wired LAN, Ubuntu 24.04 on the server, and PipeWire on the laptop.

Step 1 — Build the binaries

On the server (or any machine with Rust installed):

git clone https://github.com/shiloh-soft/broadcaster.git
cd broadcaster
cargo build --release

This produces:

target/release/shiloh-mixer
target/release/shiloh-broadcaster
target/release/shiloh-relay
target/release/shiloh-web-relay

Copy them to ~/.local/bin/ or wherever you keep user binaries:

cp target/release/shiloh-{mixer,broadcaster,relay,web-relay} ~/.local/bin/

Step 2 — Start the mixer

Create a minimal config file at ~/mixer/shiloh-mixer.toml:

jack_name      = "shiloh-mixer"
broadcast_port = 5005
control_port   = 19997

[[channels]]
id          = "laptop"
label       = "Laptop"
kind        = "stereo"
main_gain   = 1.0
ingest_slot = 0

[buses]
main    = ["out_1", "out_2"]
monitor = ["monitor_out_1", "monitor_out_2"]
cue     = ["cue_out_1", "cue_out_2"]

[ingest]
slot_count = 2

[[ingest.sender]]
name       = "laptop"
channels   = 2
start_slot = 0

NOTE: jack_name, broadcast_port, and control_port have these exact defaults in the binary, but it’s clearest to state them explicitly in your first config.

Start the mixer:

shiloh-mixer ~/mixer/shiloh-mixer.toml

You should see log lines like:

INFO  shiloh_mixer > jack client 'shiloh-mixer' opened (sample_rate=48000 buffer=1024 frames, status=...)
INFO  shiloh_mixer > broadcast relay listening on udp://0.0.0.0:5005

Step 3 — Start the broadcaster on the laptop

On your laptop (replace 192.168.x.x with the server’s LAN IP):

shiloh-broadcaster connect 192.168.x.x:5005 --channels 2

--name defaults to the machine hostname. Since the config above uses name = "laptop", either pass --name laptop explicitly or ensure your hostname matches.

You should see:

INFO shiloh_broadcaster > PipeWire null-sink "laptop" loaded
INFO shiloh_broadcaster > accepted: session=0x... 48000 Hz 2 ch 128 frames/pkt slot=0

A new audio output named “laptop” now appears in your system’s audio settings. Route any application to it — it will be captured and sent to the mixer.

Step 4 — Start a relay on the listening machine

On any Linux machine that should play the audio (including the server itself):

shiloh-relay connect --server 192.168.x.x:5005 --name headphones

You should hear the mixer’s main output through the system’s default audio device. Use --device <substring> to pick a specific output if needed.

Step 5 — Open the browser listener (optional)

If you started shiloh-web-relay on the server (pointing at the mixer’s loopback address):

shiloh-web-relay --mixer 127.0.0.1:5005 --http 0.0.0.0:8890

Open http://192.168.x.x:8890/ in any browser. The page will prompt for a feed (main / monitor / cue) and connect via WebRTC.

NOTE: The mixer_web Phoenix application proxies /whep/* to :8890 and serves a pre-built listener page at /listen. If you have mixer_web running, use http://192.168.x.x:8889/listen instead.

Next steps