Service: Nubart SYNC — Direct Video Position Integration
Document version: 2.0
Author: Simon Effing
Date: 9 August 2026
Technical / integration partner reference. This page is not indexed and not linked from public navigation. It documents direct, code-level integration with Nubart SYNC's video-position sync endpoint, intended for developers and AV integrators building a custom player. If you're deploying to a BrightSign player, use the standard BrightSign Instructions guide instead — this document is for players that need a lower-level integration.
If your video player doesn't support browser-based playback, you can integrate video position synchronization directly into your player's JavaScript code by reusing the sendVideoPos function from the generated script.
If your player cannot be programmed with JavaScript at all, you can use as a blueprint the generated HTML file on your Nubart platform:
Just reimplement the same request pattern in whatever language or scripting environment your player does support.
Open the generated HTML file and copy everything between the markers:
========== COPY FROM HERE ==========
and
========== COPY TO HERE ==========
into your player's JavaScript. This gives you sendVideoPos() and a playerId for this session. Deciding when to call it is entirely up to your integration.
sendVideoPos(currentVideoTime);
The position is in seconds, as a decimal number.
How you obtain the current position depends on your player — an event it fires, a polling loop, a timer, or a callback from its playback API. The goal is simply that the sync endpoint never has a position that is more than about 10 seconds stale.
A straightforward approach that works in most environments:
sendVideoPos() with the current position.IMPORTANT: The exact interval is not critical. As long as the video runs continuously, our server extrapolates the current position from the last one it received, so a longer interval — or an occasional missed update — makes no practical difference. What matters is that a new position is sent whenever playback jumps, which is why the transport events above are worth wiring up if your player provides them.
If your player exposes no transport events at all, the periodic poll alone is sufficient; sync will simply take up to one interval to catch up after a jump.
Make sure whatever drives the polling keeps running across loops and restarts.
sendVideoPos(currentVideoTime, function(status) {
if (status === 200) {
console.log("Sync successful");
} else {
console.log("Sync failed with status: " + status);
}
});
RELATED: The customer portal's "Sync status" indicator (on the Nubart SYNC tab) reflects how recently sendVideoPos() was last successfully called for a given video. It updates purely from what your player reports here — it is not affected by whether any listener's phone is connected or playing audio.
playerId is generated automatically when the page loads and remains constant for that session.