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:
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.
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.
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 } }, ... ] }
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 ) |
onSync Optional |
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.
|
onDesync Optional |
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 |
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 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 |