v0.1.17-alpha

Get broadcasting in about twenty minutes.

You will set up a bucket, install one plugin on both machines, go live at the main campus, and receive at a satellite.

Before you start

What you need

ItemDetail
OBS Studio 32.2.2 At the main campus, and at each satellite that receives on a PC.
An S3-compatible bucket Cloudflare R2 is the assumed default — it charges no egress, which is what makes sending the same service to several campuses affordable. AWS S3, Backblaze B2 and MinIO also work.
A read and write token It must include s3:ListBucket. Cloudflare's “Object Read & Write” token has it; an object-scoped token does not, and the recordings list will tell you so rather than showing an empty list.
Storage headroom Roughly 2.7 GB per hour of service at 6 Mbps.

This is alpha software — see what has been tested before a Sunday depends on it.

Setup

Four steps

  1. Install the plugin on every machine

    Download the build for each platform from Releases, and install it at the main campus and at every satellite. It is one module containing both plugins — the same download does the sending and the receiving.

    Download obs-multisite-v0.1.17-alpha-windows-x64.zip and copy the obs-plugins and data folders into your OBS install directory — usually C:\Program Files\obs-studio\ — merging with what is already there.

    Restart OBS. You should now see Multisite Encoder and Multisite Decoder under View → Docks.

  2. Set a retention rule — before your first broadcast

    Nothing in this project deletes anything. Without a lifecycle rule, every service you ever broadcast stays in the bucket for ever, and you pay for all of it.

    In your storage provider's console, add a rule for the prefix events/ and another for rooms/, both deleting objects after the same number of days. Seven days is the design default.

    The rule is also your DVR depth — a campus can rewind only as far as retention allows. If you want a campus to be able to replay last month's service, retention has to cover last month.

  3. Set up the main campus

    Open the Multisite Encoder dock → Settings…

    • Enter the bucket details and pick a video encoder.
    • Choose a feed name. Every campus will type the same one — it is how they find you.
    • Settings save as you type; there is no Apply button.

    Press Go live. The dock shows how much has been sent, how much is waiting, and whether the link is healthy.

    If the internet drops, the encoder keeps recording to disk and sends the backlog when it returns. Nothing is lost and nothing is skipped.

    Stereo only? You are done with this step. For more than stereo — a mix, mics on their own tracks, a click for the band — enable the tracks in OBS's own Settings → Output → Recording, assign sources to tracks in Advanced Audio Properties, then name them under Settings… → Track labels so the campus sees “Click” and not “Track 3”.

  4. Set up each satellite campus

    • Open the Multisite Decoder dock → Settings… and enter the same bucket details. These are stored per machine, so any source you add later is already configured.
    • Add a Multisite Source (Decoder) to a scene and enter the same feed name.
    • Press Load event, let the buffer fill, then Play when you are ready.
    • Press Lock for the service so nothing gets clicked by accident.

    Playback waits until a minute of the service is buffered before it starts, so the picture never chases the live edge.

    Each campus runs its own clock: hold the picture for a local welcome, resume, then catch up to now — or stay a set number of minutes behind live all service. What one campus does has no effect on any other.

    To play a past service instead, pick it from the Recordings list. To add an ISO or the click, add a Multisite Audio Track (Decoder) for the same feed — it costs no extra download, because every track already arrives in the same segment.

Alternative

A campus without a PC

Instead of OBS at the satellite, a Raspberry Pi 5 can be the whole campus player: HDMI out to the screen, a splash and idle screen between services, and a browser control panel on the church network. One script installs it.

curl -fsSL --retry 5 \
  https://raw.githubusercontent.com/stageaudioworks/obs-multisite/main/scripts/player/install.sh \
  | sudo bash

The appliance is driven from its own web page, or from a Stream Deck through the Companion module, which speaks to it directly over HTTP — no OBS involved at the far end at all.

Putting the sound on the network

By default the Pi's audio leaves on the HDMI socket with the picture, so it reaches whatever is plugged into the Pi and nothing else. A second script puts it on the network as an eight-channel AES67 stream instead — where it appears in Dante Controller and routes to any Dante device, or to a console that takes AES67 directly:

curl -fsSL \
  https://raw.githubusercontent.com/stageaudioworks/obs-multisite/main/scripts/player/merging-aes67.sh \
  | sudo bash

It builds an open RAVENNA stack from source, so give it a few minutes. It leaves the player on HDMI until you move it deliberately with --point-player, so the install can be proven before anything the congregation sees is touched. It also creates the stream, so the box is sending as soon as it is up; the switch for it afterwards is on the player's own page, along with the multicast address it publishes to, the port, and whether the clock has locked.

A PTP master has to exist on the network, or nothing flows. The daemon slaves to a clock; it does not hand one out. A Dante device, a console or an Anubis can be that master — with none of them, the stream stays silent. This is the most likely reason for quiet after a clean install, and it is a network question rather than a fault.

The route from the Pi's source to a receiver is still made by hand in Dante Controller. Test against the real Dante hardware the site will use.

Which to choose for a given room — PC or appliance — is set out in Choosing a satellite.

Then, if you want it

Beyond the basic path

Stream to the public

The relay container reads the same files already in your bucket and pushes them to YouTube, Facebook or any RTMP or SRT destination — without uploading the service a second time. Streaming to the public →

Control it from a phone

Both docks serve an operator page on your church network — Go live and markers on the sending side; play, hold, jog and the recordings list on the receiving side. The address is in the dock under Settings → Remote control, port 8080 unless you change it. No password: the building's network is the guard.

Put it on a Stream Deck

The Companion module gives you buttons that light up — on air, held, behind live, link offline — for either half, and for the Pi appliance. Companion module →

Download a finished service

Any completed service pulls down as a single MP4 with every audio track intact — including services whose encoder crashed part-way through.

If something is wrong

Where to look first

A good bug report is a real contribution: much of what works well here was fixed because somebody took the time to paste a log. Open an issue →

Going deeper

You want to…Read
Install, configure and operate in depth Operator guide
Choose between a PC and the Pi box Choosing a satellite
Put the appliance's sound on the network AES67 audio
Send the service to YouTube or Facebook Streaming to the public
Build, test or contribute Developer guide
Read the design and storage protocol PROJECT-SCOPE