# Synchronization SDK overview

## Overview <a href="#overview" id="overview"></a>

The Sync SDK will allow you to create groups of people that are watching a video stream and synchronize the content the group is watching across all platforms.

To get the Web SDK login to your [private area](https://media.sceenic.co/) to receive the NPM package token, the API\_KEY, and API\_SECRET.

* [Get the sync SDK](https://media.sceenic.co/)
* [Sample code React](https://bitbucket.org/svmt/react-demo-sync/src/master/)
* [Sample code Kotlin](https://bitbucket.org/svmt/samplesyncwatchtogether-kotlin/src/master/)
* [Sample code Java](https://bitbucket.org/svmt/samplesyncwatchtogether-java/src/master/)
* [Sample code Swift](https://bitbucket.org/svmt/sample-synchsdk-ios/src/master/)

## The sync platform <a href="#the-synch-platform" id="the-synch-platform"></a>

To synchronize the content across all players in the group we connect to the players, extract the relevant time data, and manage it on a dedicated back-end.

The sync SDK’s architecture is a client-server architecture:

* Clients - Web SDK, iOS, and Android SDKs
* Server - Provides the synchronization logic and reporting service as to the Quality of Service

## System use case <a href="#system-use-case" id="system-use-case"></a>

The system use case is the following - Allow a group of Players to play the same video content in a synchronized manner for the entire group.

Groups can be as large as ten of thousands of Players or as small as two, which will depend on your specific use case.

This use case will fit well for:

* Sport matches
* Live concerts
* Live and breaking news

Or any other content you believe requires synchronization.

![](/files/-MXc-iazFoOydu9LR4_r)

**System use case - Synchronization**

### Benefits <a href="#benefits" id="benefits"></a>

#### Synchronization accuracy <a href="#synchronization-accuracy" id="synchronization-accuracy"></a>

Synchronization between the clients in the session of about 40-100 milliseconds.

#### Different synchronization algorithms <a href="#control-over-the-synchronization-algorithms" id="control-over-the-synchronization-algorithms"></a>

* Follow the leader - the first client that logs in the session will dictate the speed
* Average - calculates the average common timeline of the clients as the synchronization timeline
* Weighted average - calculates the average common timeline of the clients with respect to the platform they come from (Web, iOS, or Android) as the synchronization timeline
* Linear - all the clients will be synchronized independently with the server timeline

#### Reporting (In progress) <a href="#reporting" id="reporting"></a>

A reporting API access that lets you follow the synchronization accuracy of every group and every client in the system.

#### Player support <a href="#player-support" id="player-support"></a>

Any player can be used as long as it supports getting the absolute current position of the stream and changing playback rate.

Absolute current position for the stream can be obtained using various options, for example:

* Using EXT-X-*PROGRAM*-*DATE*-*TIME tag*
* Using ID3 tags
* Using initial PTS as an offset

To use any player you will need to extend our object model and implement all the required methods.

For more information have a look at the [Tutorials](/synchronization-sdk/tutorials.md) and [API References.](https://sync-api-doc.web.app/)

#### Messaging <a href="#messaging" id="messaging"></a>

As all the clients are connected through our system you will be able to send control messages of different types from client to client or broadcast messages.

This will allow you the following

* Have control over the various player and functionalities
* Create a chat between clients
* Create your own custom messaging protocol between clients

## Support <a href="#android-javaandkotlin-support" id="android-javaandkotlin-support"></a>

Need technical support? contact us at <Support@sceenic.co>.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.sceenic.co/synchronization-sdk/synchronization-sdk-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
