Multi-Display Video Walls

XiboPlayer supports synchronized multi-display playback. Multiple screens switch layouts simultaneously with <8ms precision — coordinated over LAN with automatic discovery.

Architecture

One display is the lead, the rest are followers:

Lead Player (Screen 1)
  └── Proxy Server + WebSocket Sync Relay
        ├── Follower 1 (Screen 2) via WebSocket
        ├── Follower 2 (Screen 3) via WebSocket
        └── Follower 3 (Screen 4) via WebSocket

The lead's proxy server includes a built-in WebSocket relay. Followers connect over LAN — no additional infrastructure needed.

Setup: 4-display video wall

1. Install and register each display

Install the player on each machine and connect to the CMS. See Connect a Display.

2. Create a Sync Group in CMS

  1. Go to Displays → Sync Groups → Add Sync Group
  2. Set one display as Lead
  3. Add all 4 displays as members

3. Schedule synchronized content

  1. Schedule → Add Event
  2. Set Event Type to Synchronised Event (not a regular event)
  3. Assign to the display group matching your sync group

4. Configure choreography (optional)

Set grid positions in each display's config.json:

Lead (~/.config/xiboplayer/electron/config.json):

{
  "sync": {
    "topology": { "x": 0, "y": 0 },
    "choreography": "diagonal-tl",
    "staggerMs": 200,
    "gridCols": 2,
    "gridRows": 2
  }
}

Followers only need their grid position:

{ "sync": { "topology": { "x": 1, "y": 0 } } }

Auto-discovery (mDNS)

Followers discover the lead automatically via mDNS — no manual IP configuration:

  1. Lead publishes _xibo-sync._tcp via mDNS with the sync group ID
  2. Followers browse for this service on each collection cycle
  3. If mDNS times out (10s), falls back to CMS-provided IP

Requirement: all players on the same subnet (UDP 5353).

Choreography effects

EffectDescription
simultaneousAll displays switch at once
wave-right / wave-leftHorizontal sweep
wave-down / wave-upVertical sweep
diagonal-tl / diagonal-tr / diagonal-bl / diagonal-brCorner cascade
center-out / outside-inCenter or edge first
randomRandom delay per display

Transport layers

TransportScopeUse case
BroadcastChannelSame machineMultiple tabs/windows on one device
WebSocket relayCross-device LANSeparate devices on the network

Selected automatically. BroadcastChannel for same-machine, WebSocket when relayUrl is set.

Troubleshooting

  • Can't connect to relay: Check firewall allows port 8765/8766 between players
  • mDNS not working: Verify same subnet, check udp/5353 not blocked
  • Layouts not syncing: Must use Synchronised Event type in CMS schedule
  • No choreography: Set topology, choreography, staggerMs, gridCols, gridRows in lead config