Video Wall Synchronization Architecture

Shared Clock via PTP

BrightSign video walls have one player per screen and maintain synchronization using network connections. All synchronized players share an accurate clock, the Precision Time Protocol (PTP), that is configured through the player registry. The PTP specification allows for multiple clocks to exist on the same network, and clients must use the same one which means they must use the same PTP domain. To configure a player use the roRegistrySection.Write() method to set the ptp_domain key of the networking section to a value between 0 and 127. On rebooting the player the PTP synchronization service will start on the player, as shown in this example:

regSec = CreateObject("roRegistrySection", "networking") regSec.Write("ptp_domain", "15") regSec.Flush()    RebootSystem()

By default, the BrightSign PTP will use the Ethernet interface eth0 for its communication as this gives the best synchronization. However, it is also possible to run PTP on WiFi by setting the ptp_ttl key of the networking section to the name of the WiFi interface wlan0. This should be done at the same time as configuring the ptp_domain, and then rebooting. Then all players will share the same current time which allows them to accurately synchronize.

Delay and VideoWall Startup

The SyncManager is used to group the players to playback content. Each player creates a SyncManager which maintains the current playback state for its group. The lead player sends out network packets which contain the group name, the current state name, and the time at which that state was entered. The other players use that information to play the correct content at the correct time (note that this only applies to file playback from local storage).

The Synchonize call by the leader sets the data for these packets. For a smooth startup, you should set ms_delay to allow time for other units to prepare to play the new state (500ms is usually enough time but other factors may affect this - if a delay of over one second is needed then there may be errors in your custom code). The players remain in sync once playback starts because they use the shared PTP clock as the reference clock. 

If a follower player is powered down and powered back up, it can start playing at the correct position in the correct file because the shared playback state from the SyncManager provides all the information it needs to do that (the state and the time the state was entered). Note that this information can be used within HTML to synchronize non-video content too.

Interfering with Sync

When a video file is being played back with sync manager, its position is controlled by the SyncManager using the PTP as its reference clock. These special cases may interfere with sync:

  • Avoid calling seek, or pausing the video.

  • If content meets the requirements to loop seamlessly then the players are playing what is effectively a single infinite length file and so will remain in sync throughout. If the files do not meet those requirements, then they must be resynchronized on each loop. That is done by the leader handling the media end event and calling Synchronize to get all the followers back in sync. In this case, loop mode should not be set as it is all being handled by the lead player.

Other

BrightAuthor-specific: