Overview
Synchronized playback makes every player in a group show the same playlist item at the same moment. Turn on one group setting, Sync playback, and players running PiSignage 5.6.0 switch assets together within about one second, with no cabling, no master player and no extra server traffic.
It is built for rows of screens that should read as one: a bank of displays in a lobby, menu boards side by side, a corridor of portrait screens, or retail shelves that advertise the same product at once. Each player follows its own clock, so the players do not need to talk to each other and a player that reboots simply rejoins the others where they are.
What to expect:
- Players change to the next image or video within about 0.3 to 1 second of each other.
- A player that boots, changes playlist or comes back from an advert joins mid-item and seeks into the running video.
- Shuffle still works: all players use the same shuffled order, and the order changes every cycle.
- This is not a frame-accurate video wall. One video spread across several screens needs dedicated video-wall hardware.
Sync also works across groups. Two groups stay in step as long as their playlists have the same duration in every row, in the same order; the assets themselves can differ. A lobby group and a corridor group can show different content and still switch at the same moment. Keep Shuffle content off for this, because the shuffled order is derived from the file names and would differ between the two playlists.
Requirements
Synchronized playback needs players on 5.6.0, a server that knows the setting, internet time on every player, and a regular playlist of fixed-length items.
| Requirement | What is needed | Why |
|---|---|---|
| Player software | PiSignage player 5.6.0 or later on every player in the group | Older players ignore the setting and play in their normal order |
| Server | pisignage.com, or a self-hosted server updated alongside 5.6.0 | The group setting must exist on the server to reach the players |
| Clock | Each player must reach an NTP time server (normal internet access, or a local NTP server) | Players follow the wall clock. A player whose clock is not synchronized plays unsynchronized until it is |
| Playlist type | A regular playlist in the group's default or scheduled slot | Event, play-once and keypress playlists play outside the timeline, then the regular playlist rejoins it |
| Playlist rows | Images, videos, web pages and widgets with a fixed duration. No .mrss feed rows and no .local folder rows | Feed and folder rows play a varying number of items, so there is no fixed timeline |
| Video settings | Time to stop video left at 0 | Chunked video playback cannot follow fixed time slots |
| Video player | VLC or Chromium for mid-video joins | These two seek into a running video. The GStreamer runner (mpv) joins at the start of the video |
| Content | The same playlist deployed to all players in the group | Players only match when their rows and durations match |
Notes on the clock: Raspberry Pi boards have no battery-backed clock, so they rely on NTP after every boot. On a network that blocks outbound NTP, point the players at a local NTP server. The player checks timedatectl every minute and logs when the clock moves in or out of sync.
Every player works out the timeline on its own, so there is no limit on the number of players in a group and no extra load on the server.
Which content types take part
Any row with a fixed duration takes a time slot, so players switch to it and away from it together. What differs is whether a player joining mid-slot can catch up inside the item.
| Content type | Synchronized? | What to expect |
|---|---|---|
| Images, text, PDF pages | Yes | Switch together at the slot boundary |
| Video files (mp4, mkv) | Yes | Switch together. A player joining mid-slot seeks to the same point on VLC and Chromium |
| HTML pages, web links, templates, widgets | Yes, as a slot | All players open and leave the page together. What happens inside the page (animation, scrolling, a clock) runs on the page's own timing, so it is not aligned |
| YouTube videos | Yes, with a larger offset | Each player resolves the stream address first, which can add a few seconds on the first play. Mid-slot joins seek on VLC. Not suitable where sub-second alignment matters |
| RTSP, UDP and live TV streams | Not applicable | The stream is live on every player anyway. Players open and close it together |
RSS and media RSS feeds (.mrss) | No | The feed plays a varying number of items, so there is no fixed timeline. Sync is turned off for the whole playlist while one is present |
Cloud folders (.local) | No | Same reason as feeds: the folder's contents and durations vary |
| Audio rows playing in the background | Yes | A background audio row starts and the playlist moves on at once; it does not hold a slot of its own |
Step-by-step: setting up synchronized playback
The whole setup is one switch on the group's Playback tab, followed by a deploy. The steps below assume the players are already registered on pisignage.com and placed in a group.
Step 1. Update the players to 5.6.0
- Open Players in the PiSignage web interface.
- Check the version chip under each player's name, next to its ID and IP address. Every player that will take part must show 5.6.0 or later.
- For an older player, select it and use Update player to 5.6.0. Wait until the player reports back online with the new version.
Step 2. Put the players in one group
- Open Groups and open the group that will hold the synchronized screens, or create a new one.
- On the Screens tab, confirm that every player that should stay in step is listed. Players in other groups are not affected.
Step 3. Build a playlist with fixed durations
- Open Playlists and create or edit the playlist for the group.
- Give every image, web page and widget a duration. Videos use their own length.
- Do not add
.mrssfeed rows or.localfolder rows to this playlist. They have no fixed length, and the player turns sync off for the whole playlist while one is present. - Save the playlist.
Step 4. Turn on Sync playback across players
- Open the group and select the Playback tab.
- In the Playback Options card, find Sync playback across players. It sits just below Shuffle content and reads "Screens in groups with Sync enabled play the same content at the same time, for all playlists except those with RSS feeds or cloud folders".
- Turn the switch on.
- Leave Time to stop video at 0 on the group's Settings tab. Shuffle may stay on; all players will use the same shuffled order.
- Click Save Changes.
Step 5. Assign the playlist and deploy
- On the Playlists tab, set the playlist as the group's default playlist, or add it to the schedule.
- Click Deploy. A toast at the bottom right confirms "Deploy done successfully" once the players have been sent the new settings and content.
Step 6. Check the screens
- Stand where two or more of the screens are visible. Within a minute they should be showing the same item and switch to the next one together.
- A player that was downloading content joins once its files are complete. A player that reboots joins mid-item, seeking into a video that is already running on the others.
You can also check from the server without being on site. On the Screens page, open Screen Details for two players in the group and keep the Feed tabs open side by side. Both feeds show the same item and advance together.
Optional: confirm from the player log
On a player, the log file /home/pi/forever_out.log records when sync starts and the timeline it follows. Search it with:
grep -ia "Sync playback" /home/pi/forever_out.logA healthy player prints the timeline it is following, for example:
Sync playback: 6 slots, cycle 95s, timeline id 3a9f1c2eIf the setting is on but cannot be applied, one warning line names the reason:
Sync playback is enabled but not applied: system clock is not NTP synchronizedHow it works
Each player turns the playlist into a fixed timeline and asks its clock which slot is current. There is no master player, no server tick and no player-to-player messaging.
A player that is already playing the current slot carries on. A player that arrives mid-slot, after a boot, a playlist change or an advert, starts the same item and seeks the video to the same offset.
- Fixed slots. Every playlist row gets a slot equal to its duration. The slots repeat back to back from a fixed point in time, so a player's boot time or deploy time does not matter.
- Same answer on every player. The current slot is a pure function of the clock and the playlist rows. Players with the same rows and NTP-synced clocks reach the same answer.
- Slots end on time. An item ends at its slot's absolute end, so a slow start shortens one item rather than pushing every later item back.
- Shared shuffle. With Shuffle content on, the order is drawn from a seed built from the playlist and the cycle number. All players draw the same order, and it changes each cycle.
- Other playlists step aside. Event, play-once and keypress playlists and adverts play as usual. The regular playlist rejoins the timeline afterwards.
- Clock watch. The player checks NTP status at start and every minute. Without a synced clock it plays unsynchronized and rejoins once the clock is good.
Limitations and troubleshooting
Sync keeps screens within about a second of each other and applies only to the main zone of a regular playlist. Side, bottom and other zones, tickers and widgets run as before.
| Symptom | Likely cause | What to do |
|---|---|---|
| Players drift or play in a different order | A player is below 5.6.0 | Update it from the Players page and deploy again |
| One player plays out of step and its log says "system clock is not NTP synchronized" | No route to an NTP server, or the player just booted | Allow NTP through the firewall or set a local NTP server. The player joins by itself once the clock syncs |
Log says a .mrss or .local row "has no fixed duration" | A feed or cloud folder row is in the playlist | Move feed and folder content to another playlist or group |
| Log says "timeToStopVideo plays videos in chunks" | Time to stop video is set on the group | Set it back to 0 on the group's Settings tab |
| Videos start from the beginning after a reboot instead of mid-video | The player uses the GStreamer runner (mpv selection) | Expected. The runner cannot seek. Use VLC or Chromium for mid-video joins |
| Videos no longer merge or loop | Sync is on | Expected. Every video ends at its slot boundary while sync is on |
| Two groups are not in step with each other | A row duration differs between the two playlists, or Shuffle content is on | Give both playlists the same duration in every row, in the same order, and turn Shuffle off. The assets can differ |
| Players match on images but a video lags by about a second | Player start latency differs by model | Expected. Accuracy is bounded by how fast each player starts an item, roughly 0.3 to 1 s |
What sync is not:
- Not a video wall. One video cannot be split across several screens, and frame-level alignment is not attempted.
- Not a replacement for identical hardware. Mixed models stay in step, but the slower one starts each item a little later.
- Not applied to the side zones of a multi-zone layout.
Comments
0 comments
Please sign in to leave a comment.