Metrics
FLAnalytics is an add-on library that serves as a framework for recording comprehensive data metrics related to application, video playback, and user events. The library can also be used to collect custom events and metadata. The library's data model is based on the Data Dictionary which is the standard schema used to normalize every piece of data captured in order to generate many popular video streaming quality of experience metrics.
QP Analytics offers extensions for the following analytics tools, enabling client applications to seamlessly interact with them through simplified public APIs:
- Datazoom
- Conviva
Below are the steps for setting up and integrating each tool.
Setup
- Conviva
- Datazoom
Quickplay's Player QOE metrics module with Conviva SDK, a real-time analytics platform designed to optimize video streaming experiences. Conviva provides detailed insights into viewer engagement, streaming quality, ad performance metrics and audience behavior helping content providers enhance performance and maximize user satisfaction. Through data-driven metrics, it enables better decision-making for live and on-demand video services.
Supported SDK version
- Conviva JS Core SDK 4.7.12
Quickplay's Player QOE metrics are powered by Datazoom, a video data platform that continually gathers data from endpoints like a CDN or a video player through an ecosystem of collectors. Once the data is gathered, it is normalized using standardized data definitions. This data is then sent through available connectors to analytics platforms like Google BigQuery, Google Analytics, and Splunk and can be visualized in tools such as Looker and Superset. Datazoom is your key to a more effective and efficient data pipeline.
Supported SDK version
- Datazoom Collector Shaka 2.20.0
Install
// Install via NPM dependency
npm install --save fl-analytics
// Install via Immediately Invoked Function Expression -IIFE-
<script src="./fl-analytics.iife.js"></script>
Application Session
Application session provides the entry point to the library analytics protocols. It also serves as factory containing APIs to create other analytic sessions (PlaybackSession, UserSession). Besides this ApplicationSession
also provides APIs for reporting app start and report fatal and non-fatal errors.
Create an application session by providing the appropriate configuration, which is discussed in detail in the following section.
Name | Type | Required | Description |
---|---|---|---|
configuration | AnalyticsReporterConfiguration AnalyticsReporterConfiguration[] | true | An object containing the settings for the analytics tools. If more than one analytics tool is required then provide an array of configurations. |
Playback Session
Playback session provides APIs to report playback related events. Create a playback session by providing the following information.
Name | Type | Required | Description |
---|---|---|---|
content | Content | true | An object with the playback content metadata. |
playbackSource | string | false | A string indicating the playback source. |
appContainer | ApplicationContainer | false | An object with the application container information. |
platform | PlatformAuthorizer | false | A reference to the platform authorizer used to authorize cost optimization API calls. |
User Session
User session provides APIs to report user events. Create a user session by providing the following information.
Name | Type | Required | Description |
---|---|---|---|
user | User | true | An object containing the settings for the analytics tools. |
Create sessions
// API to create application session
const appSession = flAnalytics.getApplicationSession();
// API to initialize application session
const initResponse = await appSession.initialize(config);
// API to create playback session
const playbackSession = appSession.createPlaybackSession(content, playbackSource, appContainer, platform);
// API to create user session
const userSession = appSession.createUserSession(user);
Since application session is a singleton class, appSession.initialize(...)
should be called before creating sessions and reporting events. The library client can start reporting events only if successful connectivity has been established to analytics system. The initialize
method will return an object indicating the initialization status of each analytics tool.
Also note that application session acts as a factory to create the remaining analytic session instances (playback session and user session).
The library supports connection to multiple analytics provider (supports Datazoom and Conviva at present) by creating a configuration object for the specific analytics provider. Follow the steps below to create a configuration.
Create Analytics Configuration
Create a new configuration object containing the following metadata.
Name | Type | Required | Description |
---|---|---|---|
application | Application | true | The application information. |
device | Device | false | The device information. |
user | User | false | User information. |
customEventsConfigUrl | string | false | Custom events configuration URL. |
logger | Logger | false | Custom logger. |
Depending on which Conviva or Datazoom analytics tool is required, the following metadata must also be provided.
- Conviva
- Datazoom
Create configuration to initialize Conviva.
Name | Type | Required | Description |
---|---|---|---|
customerKey | string | true | The Conviva customer key. |
debug | boolean | false | Flag indicating if a production session or a debug session should be created. |
gatewayUrl | string | false | Gateway URL used to initialize development/debugging Conviva session. |
adMetadata | AdMetadata | false | Ad metadata. |
costOptimizationUrl | string | false | Cost optimization endpoint URL. |
costOptimizationParams | {[key:string]:any} | false | A map with the cost optimization request data. |
costOptimizationRefreshInterval | number | false | Cost optimization refresh time in minutes. Default value is 10 minutes. |
Create Conviva Analytics Configuration
const convivaConfig = {
application: appMetadata,
device: deviceMetadata,
user: userMetadata,
customEventsConfigUrl: "<blacklist-events-url>",
logger: appLogger,
customerKey: "<conviva-key>",
debug: true,
gatewayUrl: "<gateway-url>",
adMetadata: adMetadata,
costOptimizationUrl: "<cost-optimization-url>",
costOptimizationParams: {
deviceName: "<device-name>",
deviceId: "<device-id>",
custom: {
segmentName: "cohort1",
customerSegment: "residentialnova",
userStatus: "subscribed"
}
},
costOptimizationRefreshInterval: 5
}
Create configuration to initialize Datazoom.
Name | Type | Required | Description |
---|---|---|---|
configId | string | true | The Datazoom key. |
Create Datazoom Analytics Configuration
const datazoomConfig = {
configId: "<datazoom-key>"
}
Initialize Application Session
// Configure Conviva only
appSession.initialize(convivaConfig);
// Configure Datazoom only
appSession.initialize(datazoomConfig);
// Configure both, Conviva and Datazoom
appSession.initialize([ convivaConfig, datazoomConfig ]);
Common Reporting Data
The Metadata that is expected to remain constant for the entire duration of a session should be provided using common reporting data. It encapsulates all relevant optional and mandatory metadata regarding different aspects of the analytics session.
Application
Name | Type | Required | Description |
---|---|---|---|
name | string | true | Application name. |
version | string | true | Application version. |
build | string | true | Application build version. |
product | string | false | Application product. |
User
Name | Type | Required | Description |
---|---|---|---|
id | string | false | Unique user identifier of the user. |
type | UserType | false | User type according to their subscription state. |
subscription | Subscription | false | User's subscription information. |
profileId | string | false | Unique identifier for the user's profile. |
profileType | string | false | User's profile type. |
Device
- Conviva
- Datazoom
Name | Type | Required | Description |
---|---|---|---|
brand | string | true | Brand of the device. |
category | DeviceCategory | true | Category of the device. |
model | string | true | Model of the device. |
osName | string | true | Operating system name. |
osVersion | string | true | Operating system version. |
screenResolutionHeight | number | false | Screen resolution height. |
screenResolutionWidth | number | false | Screen resolution width. |
screenResolutionScaleFactor | string | false | Screen resolution scale factor. |
type | DeviceType | true | Device type. |
version | string | true | Device version. |
Name | Type | Required | Description |
---|---|---|---|
platformType | PlatformType | true | Describes the type of platform. |
customDeviceManufacturer | string | true | Manufacturer of the user's device. |
customDeviceName | string | true | Name of the device model used by the viewer. |
qpGlobalId | string | true | New Relic deviceID. |
platformName | PlatformName | true | A unique identifier for the platform sending the data |
Initialization Response
When using the appSession.initialize(...)
API, the callback will contain a Promise<InitializationResponse[]>
.
The InitializationResponse structure contains:
Name | Type | Description |
---|---|---|
analyticProvider | Provider | Identifies the specific analytics tool being initialized (possible values: Datazoom , Conviva ). |
result | boolean or Error | A boolean or Error indicating the outcome of the initialization process. true indicates successful initialization, while Error provides details about why the initialization failed. |
Sample Integration
- Conviva
- Datazoom
const appInfo = {
name: "sample-application",
version: "1.0.0",
build: "7.51.5",
}
const userInfo = {
type: flAnalytics.UserType.ANONYMOUS,
}
const deviceInfo = {
brand: 'Asus',
category: flAnalytics.DeviceCategory.WEB,
model: 'GL704GW',
osName: 'Microsoft Windows 11 Pro',
osVersion: '10.0.22631',
screenResolutionHeight: 768,
screenResolutionWidth: 1024,
screenResolutionScaleFactor: '3:4',
type: flAnalytics.DeviceType.DESKTOP,
version: 'test-version'
}
const adMetadata = {
adTechnology: flAnalytics.AdTechnology.SERVER_SIDE,
isSlate: 'false',
adMediaFileApiFramework: 'NA',
adStitcher: 'ad-stitcher',
adMediaUrl: 'ad-media-url'
}
const convivaConfig = {
customerKey: "<conviva-key>",
application: appInfo,
user: userInfo,
device: deviceInfo,
adMetadata: adMetadata,
}
const appSession = flAnalytics.getApplicationSession();
appSession.initialize(convivaConfig).then((initResponse) => {
if (initResponse.find(
(response) =>
response.analyticProvider === flAnalytics.Provider.CONVIVA).result
) {
// Conviva sensor successfully initialized
// appSession is ready to use
}
});
const appInfo = {
name: "sample-application",
version: "1.0.0",
build: "7.51.5",
}
const userInfo = {
type: flAnalytics.UserType.ANONYMOUS,
}
const deviceInfo = {
platformType: flAnalytics.PlatformType.WEB,
customDeviceMfg: "device-manufacturer",
customDeviceName: "device-name",
qpGlobalId: "qp-global-id",
platformName: flAnalytics.PlatformName.WEB_DESKTOP,
}
const datazoomConfig = {
configId: "<datazoom-key>",
application: appInfo,
user: userInfo,
device: deviceInfo,
}
const appSession = flAnalytics.getApplicationSession();
appSession.initialize(datazoomConfig).then((initResponse) => {
if (initResponse.find(
(response) =>
response.analyticProvider === flAnalytics.Provider.DATAZOOM).result
) {
// Datazoom collector successfully initialized
// appSession is ready to use
}
});
Multiple Analytic Tools
appSession.initialize([ convivaConfig, datazoomConfig ]).then((initResponse) => {
if (initResponse.find(
(response) =>
response.analyticProvider === flAnalytics.Provider.CONVIVA).result
) {
// Conviva sensor successfully initialized
}
if (initResponse.find(
(response) =>
response.analyticProvider === flAnalytics.Provider.DATAZOOM).result
) {
// Datazoom collector successfully initialized
}
// appSession is safe for use if any of Conviva sensor or Datazoom collector
// is successfully initialized
});
Playback Events and Metrics
Create playback session to report player related events. To create a playback session the below information must be provided.
let playbackSession = null;
appSession.createPlaybackSession(
content,
playbackSource,
applicationContainer,
platform,
).then(playbackSession => {
// playbackSession is ready to use
});
Attach Player
The playback session provides an API called attachPlayer
which takes Player
instance as parameter. This API enables the underlying analytics tool to access platform native player instance, therefore auto-reporting most of the playback related events.
playbackSession.attachPlayer(player);
Auto-Collected Playback Events
Playback events that are auto-captured by library itself.
- Conviva
- Datazoom
Name | Description |
---|---|
pause | This event is reported when the player is paused. |
resume | This event is reported when the user begins playing after pausing the video. |
buffer_start | Buffer Start identifies anytime the player has to wait for the video buffer to fill with video segments. |
buffer_end | Event is reported when video starts playing again after a buffer is completed. |
player error | Thrown if an error occurs during content playback or retrieval of the video. |
playing | The media is no longer blocked from playback, and has started playing. Reported when playback resumes from Stall, Buffering or Seek. |
Name | Description |
---|---|
playback_start | This event is reported when the video starts playing for the user. |
heartbeat | This event is reported at periodic intervals (1 minute) during content playback. |
media_request | This event is reported after the user invokes playback. |
player_ready | Signifies when the player has been initialized and is ready for playback. |
pause | This event is reported when the player is paused. |
resume | This event is reported when the user begins playing after pausing the video. |
buffer_start | Buffer Start identifies anytime the player has to wait for the video buffer to fill with video segments. |
buffer_end | Event is reported when video starts playing again after a buffer is completed. |
stall_start | Stall Start event is reported when playback of video stops because the buffer has been depleted causing an unexpected interruption for the user. |
stall_end | Event reported when video starts playing again after a stall and the buffer has been replenished and playback resumes. |
error | Thrown if an error occurs during content playback or retrieval of the video. |
playback_complete | This event signifies that the video player has reached the end of the currently playing content. |
stop | This event is reported when the player has entered a stopped state. |
milestone | Reported when the playheadPosition passes a predetermined percentile milestone of the video's duration. Current milestones are fired at the 10, 25, 50, 75, 90 & 95 percentiles. |
seek_start | This event records when the user interacts with time controls within the player to move forward or backward in the video timeline. |
see_end | Event is reported when the player stops moving the playhead position to jump to a specific point on the timeline. |
playing | The media is no longer blocked from playback, and has started playing. Reported when playback resumes from Stall, Buffering or Seek. |
Value Added Events and Metrics
Application Events
Application Start
Application session provides an API to report the application start event. This is expected to be called on application load.
appSession.start({ startupTime: 16 });
Interrupt Start
Must be called to mark the start of the session's lifecycle interruption in order to pause normal session workflow.
Optionally it accepts a CustomEvent
object as a parameter to provide detailed information on the event that caused the interrupt.
appSession.interruptStart();
Interrupt End
Must be called to mark the end of the session's lifecycle interruption in order to resume normal session workflow.
Optionally it accepts a CustomEvent
object as a parameter to provide detailed information on the event that caused the interrupt.
appSession.interruptEnd();
Application Stop
Must be called to terminate analytics session lifecycle.
appSession.stop();
Playback Events
Playback Start
Must be called to initiate playback session lifecycle.
playbackSession.start();
Interrupt Start
Must be called to mark the start of the session's lifecycle interruption in order to pause normal session workflow.
Optionally it accepts a CustomEvent
object as a parameter to provide detailed information on the event that caused the interrupt.
playbackSession.interruptStart();
Interrupt End
Must be called to mark the end of the session's lifecycle interruption in order to resume normal session workflow.
Optionally it accepts a CustomEvent
object as a parameter to provide detailed information on the event that caused the interrupt.
playbackSession.interruptEnd();
Stop
Must be called to terminate the playback session.
playbackSession.stop();
User Events
UserSession
provides the following API to report user action based events.
// Called when [User] executes "signup" flow.
userSession.signup(userInfo)
// Called when [User] executes "login" flow.
userSession.login(userInfo)
// Called when [User] executes "logout" flow.
userSession.logout(userInfo)
// Called when [User] executes "create profile" flow.
userSession.createProfile(userInfo)
// Called when [User] executes "update profile" flow.
userSession.updateProfile(userInfo)
// Called when [User] executes "start subscription" flow.
userSession.startSubscription(userInfo)
// Called when [User] executes "purchase subscription" flow.
userSession.purchaseSubscription(userInfo)
// Called when [User] executes "change subscription" flow.
userSession.changeSubscription(userInfo)
// Called when [User] executes "complete payment" flow.
userSession.completePayment(userInfo)
It is client application responsibility to ensure that each user action is triggered in the correct sequence.
Report Custom Events
ApplicationSession
provides an API to report custom events.
const customEvent = {
event: 'sample_event',
data: {
'key1': 'value1',
'key2': 'value2'
}
}
appSession.addEvent(customEvent);
- In order to conform to the existing reporting scheme the event name should be provided in the lower case format and words should be separated by the underscore character e.g."playback_request"
- In Datazoom, any custom event will be reported as event name with
custom_
prefix. (eg: playback_start as custom_playback_start)
When trying to report a custom event with a name that is already reserved (the list of reserved event names is captured by QP_ANALYTICS_EVENTS
), library will throw an error.
Configure Application Metadata
Set Application custom metadata
Additional metadata that is to be added or updated to all application / playback / user events can be done using the below API. All subsequent events will report this additional data once it is defined.
appSession.setMetadata({
'key1': 'value1',
'key2': 'value2'
});
Application Errors
ApplicationSession
provides APIs to report both fatal and non-fatal errors.
Report Fatal errors
Any application fatal error can be reported using below API. Send Error as a parameter(optional) to report playback stop on any error.
applicationSession.stop(error)
Report Non-fatal errors
Any application non-fatal error can be reported using below API. Send Error to report playback stop on any error.
applicationSession.addErrorEvent(error)
User Action Errors
Any User error can be reported using below API. Create UserError
reporting data payload in case where one of user's action fails and User attribute along with it.
Create User Error
Name | Type | Required | Description |
---|---|---|---|
code | String | true | The unique error code. |
message | String | true | The message describing the error. |
description | String | false | The contextual description of the error. |
const userError = {
code: '745',
message: 'user action failure',
description: 'user action failure details'
}
Cost Optimization
Reporting events for the entire duration of a content playback can be costly. For this reason, analytics reporting to Conviva can be controlled by determining how much time the analytics reporter will be active.
To configure cost optimization, the following parameters should be passed to the Conviva configuration object provided during the application session initialization.
Name | Type | Required | Description |
---|---|---|---|
costOptimizationUrl | string | false | The URL to the cost optimization endpoint. |
costOptimizationParams | Object | false | An object containing cost optimization request parameters. |
costOptimizationRefreshInterval | Object | false | The amount of time in seconds to request for cost optimization time thresholds. |
Cost Optimization Parameters
In order to make a successful HTTP request to the cost optimization endpoint URL, the following parameters should be passed to the Conviva configuration object.
const params = {
deviceName: "test-device-name",
deviceId: "test-device-id",
custom: {
segmentName: "cohort1",
customerSegment: "residentialnova",
userStatus: "subscribed"
}
}
Name | Type | Required | Description |
---|---|---|---|
deviceName | string | true | Device name. |
deviceId | string | true | Device unique identifier (eg: androidmobile, androidtablet, huaweimobile, huaweitablet, androidtv, androidstb, androidstbv2, iosmobile, iostablet, web, mobileweb, samsungtizentv, lgwebostv). |
segmentName | string | true | Segment name (eg: cohort1, cohort2, cohort3, cohort4, cohort5). |
customerSegment | string | true | Customer segment (eg: residentialnova, sme, hotel hosp, hotel basic). |
userStatus | string | true | User status (eg: anonymous, registered, subscribed). |
Authorize Cost Optimization HTTP Request
Each HTTP request to the cost optimization endpoint must be authorized. To authorize the HTTP request a platform authorizer object must be provided when creating a new playback request as follows:
const playbackSession = await appSession.createPlaybackSession(content, playbackSource, applicationContainer, platformAuthorizer);
Out-of-box Player Metrics
The Quickplay Player provides number of key metrics to analyse the playback performance. Please refer the bundled sample app to understand the corresponding metrics API.
Key Player Metrics
-
Load Latency
- This is the number of seconds it took for the video element to have enough data to begin playback. This is measured from the time load() is called to the time the 'loadeddata' event is fired by then media element. -
Buffer Range
- Indicates how much is buffered ahead of the playhead and how much is buffered behind the playhead (in seconds). -
Decoded Frames
- The total number of frames decoded by the Player. -
Framerate
- Provides number of Frames being displayed (per second). -
Dropped Frames
- The total number of frames dropped by the Player. -
Corrupted Frames
- The total number of corrupted frames dropped by the browser. -
Play Time
- The total time spent in a playing state in seconds. -
Pause Time
- The total time spent in a paused state in seconds. -
License Time
- The time spent on license requests during this session in seconds, or NaN. -
Buffering Time
- The total time spent in a buffering state in seconds. -
Required Bandwidth
- The bandwidth required for the current streams (total, in bit/sec). -
Estimated Bandwidth
- The current estimated network bandwidth (in bit/sec). -
Variant Bitrate
- The bandwidth required to play active variant track, in bits/sec. -
Video Bitrate
- The total time spent in a buffering state in seconds. -
Audio Bitrate
- The bandwidth required for the current streams (total, in bit/sec). -
Width
- The width of the current video track. -
Height
- The height of the current video track.
The Quickplay Player's PlaybackStatistics
provides all metric info required. For more information please refer sample app.
player.subscribe('progressupdate', function () {
console.log(player.playbackStatistics);
});
Enumerations
AdTechnology
enum AdTechnology {
CLIENT_SIDE = 'Client Side',
SERVER_SIDE = 'Server Side',
}
DeviceCategory
enum DeviceCategory {
ANDROID_DEVICE = 'AND',
APPLE_DEVICE = 'APL',
CHROMECAST = 'CHR',
DESKTOP_APP = 'DSKAPP',
DEVICE_SIMULATOR = 'SIMULATOR',
KAIOS_DEVICE = 'KAIOS',
LG_TV = 'LGTV',
NINTENDO = 'NINTENDO',
PLAYSTATION = 'PS',
ROKU = 'RK',
SAMSUNG_TV = 'SAMSUNGTV',
SET_TOP_BOX = 'STB',
SMART_TV = 'TV',
TIVO = 'TIVO',
WEB = 'WEB',
WINDOWS_DEVICE = "WIN'",
XBOX = 'XB',
LINUX = 'LNX',
}
DeviceType
enum DeviceType {
CONSOLE = 'Console',
DESKTOP = 'DESKTOP',
MOBILE = 'Mobile',
SETTOP = 'Settop',
SMARTTV = 'SmartTV',
TABLET = 'Tablet',
VEHICLE = 'Vehicle',
OTHER = 'Other',
}
PlatformName
enum PlatformName {
IOS = 'iOS',
ANDROID_MOBILE = 'Android Mobile',
TV_OS = 'tvOS',
ANDROID_TV = 'Android TV',
FIRE_TV = 'FireTV',
LG = 'LG',
CHROMECAST = 'Chromecast',
WEB_DESKTOP = 'Web Desktop',
WEB_MOBILE = 'Web Mobile',
TIZEN = 'Tizen',
VIZIO = 'Vizio',
ROKU = 'Roku',
}
PlatformType
enum PlatformType {
APP = 'app',
WEB = 'web',
}
Provider
enum Provider {
DATAZOOM = 'Datazoom',
CONVIVA = 'Conviva',
UNKNOWN = 'Unknown',
}
SubscriptionStatus
enum SubscriptionStatus {
ACTIVE = 'active',
FREE = 'free',
GRACE = 'grace',
CANCELLED = 'cancelled',
EXPIRED = 'expired',
}
UserType
enum UserType {
ANONYMOUS = 'anonymous',
FREE_TRIAL = 'free_trial',
REGISTERED = 'registered',
SUBSCRIBED = 'subscribed',
}
Types
AdMetadata
Name | Type | Required | Description |
---|---|---|---|
adTechnology | AdTechnology | false | Ad technology (server side or client side) |
isSlate | string | false | Is slate. |
adMediaFileApiFramework | string | false | Ad media file API framework. |
adStitcher | string | false | Ad stitcher. |
adMediaUrl | string | false | Ad media URL. |
Content
Name | Type | Required | Description |
---|---|---|---|
id | string | false | Unique identifier for content item. |
channel | string | false | Channel. |
type | string | false | Content type. |
name | string | false | Content name from CMS to ensure accurate title if different from the player title. |
providerId | string | false | Unique identifier for the content provider. |
genre | string | false | Genre of the content. |
licenseWindowStartDate | string | false | The license window start date. |
isLive | StreamType | false | Stream type VOD, live or unknown. Required for Conviva. |
duration | number | false | Total stream duration. Required for Conviva. |
playerName | string | false | Name of the content player. Required for Conviva. |
streamUrl | string | false | URL the content. Required for Conviva. |
encodedFramerate | number | false | Encoded framerate. Required for Conviva. |
viewerId | string | false | Unique identifier for the viewer. Required for Conviva. |
defaultResource | string | false | Default resource. Required for Conviva. |
SportContent (extends Content)
Name | Type | Required | Description |
---|---|---|---|
sportName | string | false | Name of the sport. |
leagueID | string | false | Unique identifier for league. |
leagueExternalID | string | false | External identifier for league. |
leagueName | string | false | Name of the league. |
leagueShortName | string | false | Short name of the league. |
gameID | string | false | Game unique identifier. |
gameExternalID | string | false | Game external identifier. |
team1ID | string | false | Unique identifier for team 1. |
team1ExternalID | string | false | External identifier for team 1. |
team1Name | string | false | Name of team 1. |
team1ShortName | string | false | Short name for team 1. |
team2ID | string | false | Unique identifier for team 2. |
team2ExternalID | string | false | External identifier for team 2. |
team2Name | string | false | Name of team 2. |
team2ShortName | string | false | Short name for team 2. |
venue | SportVenue | false | Sport venue. |
SportVenue
Name | Type | Required | Description |
---|---|---|---|
venueName | string | false | Name of the venue. |
venueCity | string | false | City of the venue. |
venueCountry | string | false | Country of the venue. |
TVShow (extends Content)
Name | Type | Required | Description |
---|---|---|---|
seriesId | string | false | Series identifier. |
seriesName | string | false | Name of the series. |
seasonNumber | string | false | Season number. |
episodeNumber | string | false | Episode number. |
Application Container
Name | Type | Required | Description |
---|---|---|---|
id | string | true | Carousel ID where the content or link to collection is located. |
name | string | true | Carousel where the content or link to collection is located. |
Subscription
Name | Type | Required | Description |
---|---|---|---|
id | string | true | Unique identifier of the user's subscription. |
status | SubscriptionStatus | false | Status of the user's subscription state. |
plan | string | false | Subscription plan type name. |
planId | string | false | Subscription plan type id. |
Custom Event
Name | Type | Required | Description |
---|---|---|---|
event | string | true | The name of the custom event. |
data | { [p: string]: any } | true | The reporting data payload. |
Application Error
Name | Type | Required | Description |
---|---|---|---|
code | string | true | Application error code. |
message | string | true | Application error message. |
description | string | false | Application error description. |
internalError | any | false | Application internal error. |
Playback Error
Name | Type | Required | Description |
---|---|---|---|
playbackSource | string | false | Playback source for the content related to this error. |
content | Content | true | Content related to this error. |
container | ApplicationContainer | false | Application container related to this error. |
code | string | true | Application error code. |
message | string | true | Application error message. |
description | string | false | Application error description. |
internalError | any | false | Application internal error. |