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
- Go to Displays → Sync Groups → Add Sync Group
- Set one display as Lead
- Add all 4 displays as members
3. Schedule synchronized content
- Schedule → Add Event
- Set Event Type to Synchronised Event (not a regular event)
- 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:
- Lead publishes
_xibo-sync._tcpvia mDNS with the sync group ID - Followers browse for this service on each collection cycle
- If mDNS times out (10s), falls back to CMS-provided IP
Requirement: all players on the same subnet (UDP 5353).
Choreography effects
| Effect | Description |
|---|---|
simultaneous | All displays switch at once |
wave-right / wave-left | Horizontal sweep |
wave-down / wave-up | Vertical sweep |
diagonal-tl / diagonal-tr / diagonal-bl / diagonal-br | Corner cascade |
center-out / outside-in | Center or edge first |
random | Random delay per display |
Transport layers
| Transport | Scope | Use case |
|---|---|---|
| BroadcastChannel | Same machine | Multiple tabs/windows on one device |
| WebSocket relay | Cross-device LAN | Separate 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/5353not blocked - Layouts not syncing: Must use Synchronised Event type in CMS schedule
- No choreography: Set
topology,choreography,staggerMs,gridCols,gridRowsin lead config
