Sync Engines

Perfectly timed interactions synchronised with your encoded media

Sync Engines


Intrasonics JS Decoder responds to inaudible triggers encoded in audio and video content. In the simplest form of encoding, triggers are placed in the audio track of the media at specific times to control when the JS Decoder responds.

A Sync Engine, however, uses a continuous encoding strategy to place inaudible sync markers throughout the audio track. Each marker carries a unique content ID and information on how far into the content it has been placed. The JS Decoder listens for these markers and triggers actions defined in an Event List at precisely the right time - synchronised with the encoded content.

Intrasonics JS Decoder supports the two types of Sync Engine below:


Event Engine

For Content Producers

Ideal for use with episodic content like Radio or TV shows. Audio and video content is encoded using Intrasonics Encoder, our cloud encoding solution. The JS Decoder extracts the Track ID and timing (based on how many milliseconds from the start of the content)

The JS Decoder can be 'in sync' with Event Engine encoded content in approx. 6 seconds.

Heartbeat Engine

For Broadcasters

Designed for use with live/streaming content such as Radio or TV. Audio/Video content is played-out through our rack-mount Real-Time Encoder which continuously embeds a unique Station ID. The JS Decoder extracts the Station ID and timing (based on the number of milliseconds since the start of the current year

The JS Decoder can be 'in sync' with Heartbeat encoded broadcasts in approx. 30 seconds.


Event Lists


Sync Engines use an Event List to schedule actions at specific times. This list is a data structure that defines an array of events, each carrying a unique identifier and the time relative to the encoding you wish that event to trigger.

Event Lists can be defined as a Javascript object, to be registered directly with the JS Decoder, or in an external file encoded in JSON. In both cases the format is the same:

{
    syncTimeoutSecs: Integer,
    codeword: Integer,
    onSync: [
        {
            timeStart: Integer,
            timeEnd: Integer,
            id: String
        },
        ...
    ],
    onDesync: [
        {
            timeStart: Integer,
            timeEnd: Integer,
            id: String
        },
        ...
    ]
    events:[
        { 
            id: String, 
            time: Number,
            notification: {
                title: String,
                text: String,
                delay: Integer
            }
        },
        ...
    ]
}

Event List Format

An explanation of the top-level properties of the Event List

Property Data Type Description
syncTimeoutSecs Integer The number of seconds without detecting a sync marker the JS Decoder will consider as being in-sync. After this duration, the JS Decoder will raise a "desync" event.
codeword Integer The unique content identifier to match (Track ID or Station ID)
onSyncOptional Array[Object] A list of event objects that map a relative time to an event id.
The properties timeStart and timeEnd set the time span during which this event should be raised by JS Decoder.
onDesyncOptional Array[Object] A list of event objects that map a relative time to an event id
The properties timeStart and timeEnd set the time span during which this event should be raised by JS Decoder.
events Array[Object] A list of event objects that map a relative time to an event id

Event Properties

An explanation of the Event object properties

Property Data Type Description
id String A unique identifier for this event
time Number A time offset value in seconds for when you wish JS Decoder to raise an event for you web application to respond. For EVENT_ENGINE this will be the number of seconds from the start of encoding (usually the start of your content) and for HEARTBEAT_ENGINE this will be the number of seconds from the start of the current year.
notification Optional Object

Notifications

Notifications are typically used to bring users back to your web application when they have switched to another browser tab or application on their device. Notifications defer the triggering of the action in the JS Decoder such that only by clicking on the notification will your application repond. Notifications can be set to appear at a set delay (in seconds) after the JS Decoder has detected a timed event.

Property Data Type Description
title String The text that appears as a headline in the notification display
text String The summary text that appears below the title
delay Optional Integer The number of seconds to delay the "notification" event raised by the JS Decoder