How to Synchronize Playback Across Multiple Servers (PTP & Observer)
How to Synchronize Playback Across Multiple Servers (PTP & Observer)
Multi-server sync in Backstage has two layers: PTP (Precision Time Protocol) aligns the internal clocks of all servers to a common time reference, and the Observer system broadcasts sequence transport state (position, play/pause/stop, fade) so follower servers can chase a leader. PTP prevents drift over time; Observer keeps playback commands in lockstep.
PTP alone does not start or stop playback on remote servers. It only synchronizes the global clock. You still need the Observer mechanism (or another show-control trigger) to tell follower servers what to play and when.
Before you start
- All servers are on the same subnet and can ping each other
- A dedicated NIC (or VLAN) is available for sync traffic — avoid mixing sync and media on the same adapter
- Windows Firewall allows Backstage on the sync NIC (UDP ports 319, 320 for PTP; 14254 for sequence announcements; 14255 TCP for ObserverRegistry)
- Each server has at least one Sequence with content ready to play
- The Node Editor is available on all servers
Steps
1. Configure the Node Sync NIC on every server
Open Settings → Network. Set Node sync NIC to the network adapter connected to your sync network. This NIC is used for all inter-server multicast traffic — sequence announcements, Observer data, and Control:Sync. All servers must use NICs on the same subnet.
If the Node sync NIC label turns red, the configured NIC does not match the one bound by the system graph. Re-select the correct NIC and reload the project.
2. Configure PTP on every server
Open Settings → Clock → PTP settings. This section controls the PTP clock that aligns the internal time across all servers.
Configure the following on each server:
NIC — Select the sync network adapter, or choose
[Sync NIC]to automatically use the same adapter configured under Settings → Network. Using[Sync NIC]is recommended so PTP and sequence sync always share the same path.Domain — Must be identical on all servers. Default is
85. Servers on different domains ignore each other entirely.Timing profile — Must match across all servers. Choose one of: AES67, PTP1588v2, SMPTE, or Backstage. See the Options explained section below for when to use each.
BMCA — Enable on all servers that should participate in automatic grandmaster election. The server with the lowest Priority 1 value wins. If you want a specific server to always be grandmaster, give it a lower Priority 1 than all others (e.g. 128 vs 248). If syncing to an external grandmaster (e.g. a broadcast facility clock), disable BMCA on all Backstage servers so they operate as slaves only.
E2E — Enables End-to-End delay measurement mode. Enabled by default. Leave it on unless your network specifically requires Peer-to-Peer mode.
3. Verify PTP lock
After configuring PTP, expand Settings → Clock → PTP settings → Clock → Stats on each server. Check these values:
Field | What to look for |
|---|---|
State | "Slave" means locked to a grandmaster. "Master" means this server is the grandmaster. "Listening" means not yet locked — wait a few seconds or check configuration. |
GM | Grandmaster clock identity. All slave servers should show the same GM identity. |
Drift | Should be in the low microsecond range. Growing values indicate unstable sync. |
Local delay | Network delay to the grandmaster. Should be stable and low (microseconds). |
Update dt | Time since the last PTP update. If this keeps growing, the clock is no longer receiving packets. |
Foreign recs | Number of other PTP clocks visible on the network. Should be at least 1 on slave servers. Hover for identities. |
At startup, Backstage waits up to ~4 seconds for PTP to lock before continuing. If your network takes longer than that, the initial sync may not be established until a few seconds after the application is fully loaded.
4. Enable "Advertise to network" on the leader
On the leader server, select the Sequence you want followers to chase. In the Sequencer, find the Advertise to network checkbox (under the sequence's network properties). Enable it.
This causes Backstage to broadcast the Sequence's transport state (position, play/pause/stop, speed, fade) as periodic multicast messages on the sync network. The broadcast includes the server hostname, Sequence name, UUID, and current playback position.
If the Node sync NIC is not configured, the Advertise to network checkbox appears greyed out with a tooltip: "Sync NIC not configured — check settings".
5. Add an Observer node on each follower server
On each follower server, open the Node Editor. Right-click the canvas and add Sequence → Observer.
The Observer node has a Sequence dropdown that lists all discovered sequences in the format IP_address/SequenceName (remote) or Local/SequenceName (same machine). Select the leader's sequence.
The Observer outputs three values:
Output | Type | Description |
|---|---|---|
Timestamp | Timestamp | Current playback position of the leader's sequence |
Transport | String | Playback state: Play, Pause, or Stop |
Fade | Float | Sequence fade/opacity value (0.0–1.0) |
Connect these outputs to a Sequence:Sequence node or Sequence:SequenceCommander to drive the local sequence on the follower. The Observer also accepts an Addr/Name string input in the format IP/SequenceName for programmatic selection.
6. Test sync
Start playback on the leader server. On each follower, verify:
The Observer node's Sequence dropdown shows the leader's sequence (not blank or "-").
The Observer node is not red. A red node means the update timeout has been exceeded — the leader has stopped broadcasting or packets are being lost.
The follower's sequence plays in sync with the leader. Pause, stop, and seek on the leader should be mirrored on all followers within one update cycle (~10 ms).
In Settings → Clock → PTP settings → Stats, all servers show the same GM (grandmaster) identity and drift values remain in the low microsecond range.
Options explained
PTP Clock settings
Setting | Description | Values / Range |
|---|---|---|
NIC | Network adapter used for PTP communication. Select [Sync NIC] to follow the Node sync NIC setting automatically. | Dropdown: any IPv4 NIC or [Sync NIC] |
BMCA | Enables the Best Master Clock Algorithm. When enabled, servers elect a grandmaster based on priority values. When disabled, the server operates as slave only. | Checkbox (default: on) |
Domain | PTP domain number. All servers must use the same value to see each other. | 0–255 (default: 85) |
Timing | Timing profile preset. Controls announce, sync, and delay-request intervals. Must match across all servers. | Dropdown: AES67, PTP1588v2, SMPTE, Backstage |
Priority 1 | Primary BMCA election priority. Lower value wins grandmaster election. Only visible when BMCA is enabled. | 0–255 (default: 248) |
Priority 2 | Secondary BMCA election priority (tiebreaker). Lower value wins. Only visible when BMCA is enabled. | 0–255 (default: 248) |
E2E | End-to-End delay measurement mode. Use E2E for most networks. Disable for Peer-to-Peer mode on networks that support it. | Checkbox (default: on) |
Relative | When enabled, applies only time offsets from the first received timestamp rather than absolute time. Only visible when BMCA is disabled (slave mode). | Checkbox (default: off) |
Master elevation | When enabled, a server must first operate as slave for ~4 seconds before it can elevate to grandmaster. Prevents premature master election during startup. | Checkbox (default: on) |
When to use each timing profile
Profile | Sync interval | When to use |
|---|---|---|
AES67 | 8 syncs/sec | When integrating with AES67 audio-over-IP networks. High sync rate for tight audio alignment. |
PTP1588v2 | 1 sync/sec | Standard IEEE 1588v2 profile. Compatible with most PTP-aware network equipment. Good general-purpose choice. |
SMPTE | 8 syncs/sec | SMPTE ST 2059 profile for broadcast environments. High sync rate with fast announce intervals. |
Backstage | 2 syncs/sec | Default profile optimized for Backstage-only installations. Balanced between sync accuracy and network overhead. Use when all devices on the PTP network are Backstage servers. |
All servers in the same installation must use the same timing profile. Mismatched profiles use different announce/sync/delay intervals and can prevent lock or cause instability.
PTP Bridge clock
When the main PTP clock is in slave mode, a second clock called Bridge appears automatically. The Bridge clock allows the server to participate in a second PTP domain simultaneously — for example, to lock to a facility grandmaster on one domain while bridging time to a Backstage-specific domain on a different NIC. The Bridge clock always operates in BMCA mode.
Common Mistakes
Observer dropdown is empty even though the leader is advertising. The Node sync NIC is set to the wrong adapter (often localhost or a management NIC). Multicast only flows on the NIC bound by the system graph. Re-select the correct NIC in Settings → Network and reload the project.
Servers discover each other but drift apart over time. PTP is not locked. Open Settings → Clock → PTP settings → Stats and check the clock state. "Listening" means the server has not found a grandmaster. Verify that PTP domain and timing profile match across all servers.
PTP shows "Listening" indefinitely. The PTP NIC is wrong, the firewall is blocking UDP ports 319/320, or the network switch does not forward PTP multicast. If using BMCA, ensure at least one server has it enabled so a grandmaster can be elected.
Observer works once, then stops updating after renaming a sequence. The Observer matches by hostname and sequence name. If you rename a sequence on the leader, re-select it from the Observer dropdown on every follower.
PTP domain is different on one server. A server using a different domain ignores all other servers' PTP announcements entirely. The default domain is
85. Verify the domain value matches exactly on every server."Advertise to network" is greyed out. The Node sync NIC is not configured. Set it under Settings → Network first.
Tips
For the most reliable sync, dedicate a separate physical NIC and switch to PTP/sync traffic. Mixing sync and media traffic on the same adapter introduces jitter.
The PTP clock jump log in Settings → Clock → PTP settings records every time the global clock was adjusted. Frequent large jumps indicate an unstable PTP connection — check cabling and switch configuration.
Local sequences also appear in the Observer dropdown as
Local/SequenceName. This is useful for distributing state between graphs on the same machine.You can observe the same sequence on multiple follower servers simultaneously. There is no limit on the number of Observers.
If syncing to an external PTP grandmaster (e.g. a broadcast facility clock), disable BMCA on all Backstage servers so they operate as slaves only, and set the PTP domain to match the facility's domain.
Related
Sync Playback Between 2 Video Servers — quick-start scenario for syncing two servers
Multi-Server Sync Issues — troubleshooting guide for multi-server sync problems
Sync to Timecode (LTC) — chase incoming LTC timecode for external sync
Sequence:Observer — Sequence:Observer node reference
Settings — Settings window reference (Clock, Network, PTP)
