Media playback events
Snowplow provides a complete solution for tracking events from media (video or audio) playback and for modeling the tracked data.
This page gives an overview of the tracked data (consisting of self-describing events and context entities) and points to resources for setting up tracking using our Web and mobile trackers and modeling using our dbt package.
Older (version 1) media event and context entity schemas
This page describes events and entities in the newer, version 2, schemas for media events and context entities. In case you are using the HTML5 and YouTube plugins for the JavaScript tracker, you may still be using the older schemas. These are still supported and work with our dbt media package. However, they provide less information (e.g, no ad tracking) and less accurate playback metrics (which are estimated based on percentage progress boundaries).
They consist of the following events and context entities:
- media-player event schema used for all media events.
- media-player context v1 schema.
- Depending on the plugin / intention there are player-specific contexts:
- in case of embedded YouTube tracking: Have the YouTube specific context schema enabled.
- in case of HTML5 audio or video tracking: Have the HTML5 media element context schema enabled.
- in case of HTML5 video tracking: Have the HTML5 video element context schema enabled.
Events
Playback events
Buffer end event
buffer_end_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when the the player finishes buffering content and resumes playback.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "buffer_end_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_buffer_end_event_1 buffer_end_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'buffer_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_buffer_end_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'buffer_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_buffer_end_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'buffer_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_buffer_end_event_1 is not null
select
"buffer_end_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_buffer_end_event_1 "buffer_end_event_1"
on "buffer_end_event_1".root_id = events.event_id and "buffer_end_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "buffer_end_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'buffer_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Buffer start event
buffer_start_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when the player goes into the buffering state and begins to buffer content.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "buffer_start_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_buffer_start_event_1 buffer_start_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'buffer_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_buffer_start_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'buffer_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_buffer_start_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'buffer_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_buffer_start_event_1 is not null
select
"buffer_start_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_buffer_start_event_1 "buffer_start_event_1"
on "buffer_start_event_1".root_id = events.event_id and "buffer_start_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "buffer_start_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'buffer_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Pause event
pause_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event sent when the user pauses the playback.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "pause_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_pause_event_1 pause_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_pause_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_pause_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_pause_event_1 is not null
select
"pause_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_pause_event_1 "pause_event_1"
on "pause_event_1".root_id = events.event_id and "pause_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "pause_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Playback end event
end_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event sent when playback stops when end of the media is reached or because no further data is available.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "end_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_end_event_1 end_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_end_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_end_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_end_event_1 is not null
select
"end_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_end_event_1 "end_event_1"
on "end_event_1".root_id = events.event_id and "end_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "end_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Percent progress event
percent_progress_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|---|
percentProgress integer | Optional. The percent of the way through the media |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when a percentage boundary set in tracking options is reached",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "percent_progress_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"percentProgress": {
"type": [
"integer",
"null"
],
"description": "The percent of the way through the media",
"minimum": 0,
"maximum": 100
}
},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_percent_progress_event_1 percent_progress_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'percent_progress_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_percent_progress_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'percent_progress_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_percent_progress_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'percent_progress_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_percent_progress_event_1 is not null
select
"percent_progress_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_percent_progress_event_1 "percent_progress_event_1"
on "percent_progress_event_1".root_id = events.event_id and "percent_progress_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "percent_progress_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'percent_progress_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Media ping event
ping_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired periodically during main content playback, regardless of other API events that have been sent.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ping_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ping_event_1 ping_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ping_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ping_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ping_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ping_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ping_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ping_event_1 is not null
select
"ping_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ping_event_1 "ping_event_1"
on "ping_event_1".root_id = events.event_id and "ping_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ping_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ping_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Play event
play_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event sent when the player changes state to playing from previously being paused.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "play_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_play_event_1 play_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'play_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_play_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'play_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_play_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'play_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_play_event_1 is not null
select
"play_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_play_event_1 "play_event_1"
on "play_event_1".root_id = events.event_id and "play_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "play_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'play_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Seek end event
seek_end_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event sent when a seek operation completes.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "seek_end_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_seek_end_event_1 seek_end_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'seek_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_seek_end_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'seek_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_seek_end_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'seek_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_seek_end_event_1 is not null
select
"seek_end_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_seek_end_event_1 "seek_end_event_1"
on "seek_end_event_1".root_id = events.event_id and "seek_end_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "seek_end_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'seek_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Seek start event
seek_start_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event sent when a seek operation begins.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "seek_start_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_seek_start_event_1 seek_start_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'seek_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_seek_start_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'seek_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_seek_start_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'seek_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_seek_start_event_1 is not null
select
"seek_start_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_seek_start_event_1 "seek_start_event_1"
on "seek_start_event_1".root_id = events.event_id and "seek_start_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "seek_start_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'seek_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Player events
Error event
error_event
EventExample
{
"errorCode": "E522",
"errorName": "forbidden",
"errorDescription": "Playback failed"
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
errorCode string | Optional. Error-identifying code for the playback issue. E.g. E522 |
errorName string | Optional. Name for the type of error that occurred in the playback. E.g. forbidden |
errorDescription string | Optional. Longer description for the error that occurred in the playback. |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event tracked when the resource could not be loaded due to an error.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "error_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"errorCode": {
"type": [
"string",
"null"
],
"description": "Error-identifying code for the playback issue. E.g. E522",
"maxLength": 256
},
"errorName": {
"type": [
"string",
"null"
],
"description": "Name for the type of error that occurred in the playback. E.g. forbidden",
"maxLength": 256
},
"errorDescription": {
"type": [
"string",
"null"
],
"description": "Longer description for the error that occurred in the playback.",
"maxLength": 4096
}
},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_error_event_1 error_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'error_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_error_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'error_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_error_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'error_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_error_event_1 is not null
select
"error_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_error_event_1 "error_event_1"
on "error_event_1".root_id = events.event_id and "error_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "error_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'error_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Fullscreen change event
fullscreen_change_event
EventExample
{
"fullscreen": true
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
fullscreen boolean | Required. Whether the video element is fullscreen after the change |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired immediately after the browser switches into or out of full-screen mode.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "fullscreen_change_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"fullscreen": {
"type": "boolean",
"description": "Whether the video element is fullscreen after the change"
}
},
"required": [
"fullscreen"
],
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_fullscreen_change_event_1 fullscreen_change_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'fullscreen_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_fullscreen_change_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'fullscreen_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_fullscreen_change_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'fullscreen_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_fullscreen_change_event_1 is not null
select
"fullscreen_change_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_fullscreen_change_event_1 "fullscreen_change_event_1"
on "fullscreen_change_event_1".root_id = events.event_id and "fullscreen_change_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "fullscreen_change_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'fullscreen_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Picture-in-picture change event
picture_in_picture_change_event
EventExample
{
"pictureInPicture": true
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
pictureInPicture boolean | Required. Whether the video element is showing picture-in-picture after the change. |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired immediately after the browser switches into or out of picture-in-picture mode.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "picture_in_picture_change_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"pictureInPicture": {
"type": "boolean",
"description": "Whether the video element is showing picture-in-picture after the change."
}
},
"required": [
"pictureInPicture"
],
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_picture_in_picture_change_event_1 picture_in_picture_change_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'picture_in_picture_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_picture_in_picture_change_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'picture_in_picture_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_picture_in_picture_change_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'picture_in_picture_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_picture_in_picture_change_event_1 is not null
select
"picture_in_picture_change_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_picture_in_picture_change_event_1 "picture_in_picture_change_event_1"
on "picture_in_picture_change_event_1".root_id = events.event_id and "picture_in_picture_change_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "picture_in_picture_change_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'picture_in_picture_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Playback rate change event
playback_rate_change_event
EventExample
{
"previousRate": 1,
"newRate": 1.5
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
previousRate number | Optional. Playback rate before the change (1 is normal) |
newRate number | Required. Playback rate after the change (1 is normal) |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event sent when the playback rate has changed.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "playback_rate_change_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"previousRate": {
"type": [
"number",
"null"
],
"description": "Playback rate before the change (1 is normal)",
"minimum": 0,
"maximum": 16
},
"newRate": {
"type": "number",
"description": "Playback rate after the change (1 is normal)",
"minimum": 0,
"maximum": 16
}
},
"required": [
"newRate"
],
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_playback_rate_change_event_1 playback_rate_change_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'playback_rate_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_playback_rate_change_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'playback_rate_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_playback_rate_change_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'playback_rate_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_playback_rate_change_event_1 is not null
select
"playback_rate_change_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_playback_rate_change_event_1 "playback_rate_change_event_1"
on "playback_rate_change_event_1".root_id = events.event_id and "playback_rate_change_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "playback_rate_change_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'playback_rate_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Quality change event
quality_change_event
EventExample
{
"previousQuality": "1080p",
"newQuality": "720p",
"bitrate": 1500,
"framesPerSecond": 30,
"automatic": true
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
previousQuality string | Optional. Quality level before the change (e.g., 1080p). |
newQuality string | Optional. Quality level after the change (e.g., 1080p). |
bitrate integer | Optional. The current bitrate in bits per second. |
framesPerSecond integer | Optional. The current number of frames per second. |
automatic boolean | Optional. Whether the change was automatic or triggered by the user. |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event tracked when the video playback quality changes automatically.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "quality_change_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"previousQuality": {
"type": [
"string",
"null"
],
"description": "Quality level before the change (e.g., 1080p).",
"maxLength": 4096
},
"newQuality": {
"type": [
"string",
"null"
],
"description": "Quality level after the change (e.g., 1080p).",
"maxLength": 4096
},
"bitrate": {
"type": [
"integer",
"null"
],
"description": "The current bitrate in bits per second.",
"minimum": 0,
"maximum": 9007199254740991
},
"framesPerSecond": {
"type": [
"integer",
"null"
],
"description": "The current number of frames per second.",
"minimum": 0,
"maximum": 65535
},
"automatic": {
"type": [
"boolean",
"null"
],
"description": "Whether the change was automatic or triggered by the user."
}
},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_quality_change_event_1 quality_change_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'quality_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_quality_change_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'quality_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_quality_change_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'quality_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_quality_change_event_1 is not null
select
"quality_change_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_quality_change_event_1 "quality_change_event_1"
on "quality_change_event_1".root_id = events.event_id and "quality_change_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "quality_change_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'quality_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ready event
ready_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when the media tracking is successfully attached to the player and can track events.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ready_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ready_event_1 ready_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ready_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ready_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ready_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ready_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ready_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ready_event_1 is not null
select
"ready_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ready_event_1 "ready_event_1"
on "ready_event_1".root_id = events.event_id and "ready_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ready_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ready_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Volume change event
volume_change_event
EventExample
{
"previousVolume": 30,
"newVolume": 50
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
previousVolume integer | Optional. Volume percentage before the change. |
newVolume integer | Required. Volume percentage after the change. |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event sent when the volume has changed.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "volume_change_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"previousVolume": {
"type": [
"integer",
"null"
],
"description": "Volume percentage before the change.",
"minimum": 0,
"maximum": 100
},
"newVolume": {
"type": "integer",
"description": "Volume percentage after the change.",
"minimum": 0,
"maximum": 100
}
},
"required": [
"newVolume"
],
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_volume_change_event_1 volume_change_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'volume_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_volume_change_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'volume_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_volume_change_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'volume_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_volume_change_event_1 is not null
select
"volume_change_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_volume_change_event_1 "volume_change_event_1"
on "volume_change_event_1".root_id = events.event_id and "volume_change_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "volume_change_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'volume_change_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad events
Ad click event
ad_click_event
EventExample
{
"percentProgress": 50
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
percentProgress integer | Optional. The percent of the way through the ad |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when the user clicked on the ad.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_click_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"percentProgress": {
"type": [
"integer",
"null"
],
"description": "The percent of the way through the ad",
"minimum": 0,
"maximum": 100
}
},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_click_event_1 ad_click_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_click_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_click_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_click_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_click_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_click_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_click_event_1 is not null
select
"ad_click_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_click_event_1 "ad_click_event_1"
on "ad_click_event_1".root_id = events.event_id and "ad_click_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_click_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_click_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad break start event
ad_break_start_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event that signals the start of an ad break.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_break_start_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_start_event_1 ad_break_start_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_break_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_start_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_break_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_start_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_break_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_start_event_1 is not null
select
"ad_break_start_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_break_start_event_1 "ad_break_start_event_1"
on "ad_break_start_event_1".root_id = events.event_id and "ad_break_start_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_break_start_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_break_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad break end event
ad_break_end_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event that signals the end of an ad break.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_break_end_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_end_event_1 ad_break_end_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_break_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_end_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_break_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_end_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_break_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_break_end_event_1 is not null
select
"ad_break_end_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_break_end_event_1 "ad_break_end_event_1"
on "ad_break_end_event_1".root_id = events.event_id and "ad_break_end_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_break_end_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_break_end_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad complete event
ad_complete_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event that signals the ad creative was played to the end at normal speed.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_complete_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_complete_event_1 ad_complete_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_complete_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_complete_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_complete_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_complete_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_complete_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_complete_event_1 is not null
select
"ad_complete_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_complete_event_1 "ad_complete_event_1"
on "ad_complete_event_1".root_id = events.event_id and "ad_complete_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_complete_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_complete_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad pause event
ad_pause_event
EventExample
{
"percentProgress": 50
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
percentProgress integer | Optional. The percent of the way through the ad |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when the user clicked the pause control and stopped the ad creative.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_pause_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"percentProgress": {
"type": [
"integer",
"null"
],
"description": "The percent of the way through the ad",
"minimum": 0,
"maximum": 100
}
},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_pause_event_1 ad_pause_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_pause_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_pause_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_pause_event_1 is not null
select
"ad_pause_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_pause_event_1 "ad_pause_event_1"
on "ad_pause_event_1".root_id = events.event_id and "ad_pause_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_pause_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_pause_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad quartile event
ad_quartile_event
EventExample
{
"percentProgress": 50
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
percentProgress integer | Required. The percent of the way through the ad |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when a quartile of ad is reached after continuous ad playback at normal speed.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_quartile_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"percentProgress": {
"type": "integer",
"description": "The percent of the way through the ad",
"minimum": 0,
"maximum": 100
}
},
"additionalProperties": false,
"required": [
"percentProgress"
]
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_quartile_event_1 ad_quartile_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_quartile_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_quartile_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_quartile_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_quartile_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_quartile_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_quartile_event_1 is not null
select
"ad_quartile_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_quartile_event_1 "ad_quartile_event_1"
on "ad_quartile_event_1".root_id = events.event_id and "ad_quartile_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_quartile_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_quartile_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad resume event
ad_resume_event
EventExample
{
"percentProgress": 50
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
percentProgress integer | Optional. The percent of the way through the ad |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when the user resumed playing the ad creative after it had been stopped or paused.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_resume_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"percentProgress": {
"type": [
"integer",
"null"
],
"description": "The percent of the way through the ad",
"minimum": 0,
"maximum": 100
}
},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_resume_event_1 ad_resume_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_resume_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_resume_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_resume_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_resume_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_resume_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_resume_event_1 is not null
select
"ad_resume_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_resume_event_1 "ad_resume_event_1"
on "ad_resume_event_1".root_id = events.event_id and "ad_resume_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_resume_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_resume_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad skip event
ad_skip_event
EventExample
{
"percentProgress": 50
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
percentProgress integer | Optional. The percent of the way through the ad |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event fired when the user activated a skip control to skip the ad creative.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_skip_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"percentProgress": {
"type": [
"integer",
"null"
],
"description": "The percent of the way through the ad",
"minimum": 0,
"maximum": 100
}
},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_skip_event_1 ad_skip_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_skip_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_skip_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_skip_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_skip_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_skip_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_skip_event_1 is not null
select
"ad_skip_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_skip_event_1 "ad_skip_event_1"
on "ad_skip_event_1".root_id = events.event_id and "ad_skip_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_skip_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_skip_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Ad start event
ad_start_event
EventExample
{}
Schema
- Table
- JSON schema
Property | Description |
---|
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Media player event that signals the start of an ad.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_start_event",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_start_event_1 ad_start_event_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_start_event_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'ad_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
select
unstruct_event_com_snowplowanalytics_snowplow_media_ad_start_event_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'ad_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
and unstruct_event_com_snowplowanalytics_snowplow_media_ad_start_event_1 is not null
select
"ad_start_event_1".*
from
atomic.events events
join atomic.com_snowplowanalytics_snowplow_media_ad_start_event_1 "ad_start_event_1"
on "ad_start_event_1".root_id = events.event_id and "ad_start_event_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "ad_start_event_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'ad_start_event'
and events.event_vendor = 'com.snowplowanalytics.snowplow.media'
Context entities
Media player entity
media_player
EntityExample
{
"currentTime": 109,
"duration": 400,
"ended": false,
"fullscreen": false,
"livestream": false,
"label": "Big Bucks Bunny",
"loop": false,
"mediaType": "video",
"muted": false,
"paused": true,
"pictureInPicture": false,
"playbackRate": 1.5,
"playerType": "com.vimeo-vimeo",
"quality": "1080p",
"volume": 100
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
currentTime number | Required. The current playback time position within the media in seconds. |
duration number | Optional. A floating-point value indicating the duration of the media in seconds. |
ended boolean | Required. Whether playback of the media has ended. |
fullscreen boolean | Optional. Whether the video element is fullscreen. |
livestream boolean | Optional. Whether the media is a live stream. |
label string | Optional. Human readable name given to tracked media content. |
loop boolean | Optional. Whether the video should restart after ending. |
mediaType string | Optional. Type of media content. Must be one of: video , audio ,
|
muted boolean | Optional. Whether the media element is muted. |
paused boolean | Required. Whether the media element is paused |
pictureInPicture boolean | Optional. Whether the video element is showing picture-in-picture. |
playbackRate number | Optional. Playback rate (1 is normal). |
playerType string | Optional. Type of the media player (e.g., com.youtube-youtube, com.vimeo-vimeo, org.whatwg-media_element). |
quality string | Optional. Quality level of the playback (e.g., 1080p). |
volume integer | Optional. Volume percentage at which the media will be played. |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Schema for a context entity for media events that describes the media player and playback state",
"self": {
"vendor": "com.snowplowanalytics.snowplow",
"name": "media_player",
"format": "jsonschema",
"version": "2-0-0"
},
"type": "object",
"properties": {
"currentTime": {
"type": "number",
"description": "The current playback time position within the media in seconds.",
"minimum": 0,
"maximum": 2147483647
},
"duration": {
"type": [
"number",
"null"
],
"description": "A floating-point value indicating the duration of the media in seconds.",
"minimum": 0,
"maximum": 2147483647
},
"ended": {
"type": "boolean",
"description": "Whether playback of the media has ended."
},
"fullscreen": {
"type": [
"boolean",
"null"
],
"description": "Whether the video element is fullscreen."
},
"livestream": {
"type": [
"boolean",
"null"
],
"description": "Whether the media is a live stream."
},
"label": {
"type": [
"string",
"null"
],
"description": "Human readable name given to tracked media content.",
"maxLength": 4096
},
"loop": {
"type": [
"boolean",
"null"
],
"description": "Whether the video should restart after ending."
},
"mediaType": {
"description": "Type of media content.",
"enum": [
"video",
"audio",
null
],
"type": [
"string",
"null"
]
},
"muted": {
"type": [
"boolean",
"null"
],
"description": "Whether the media element is muted."
},
"paused": {
"type": "boolean",
"description": "Whether the media element is paused"
},
"pictureInPicture": {
"type": [
"boolean",
"null"
],
"description": "Whether the video element is showing picture-in-picture."
},
"playbackRate": {
"type": [
"number",
"null"
],
"description": "Playback rate (1 is normal).",
"minimum": 0,
"maximum": 16
},
"playerType": {
"type": [
"string",
"null"
],
"description": "Type of the media player (e.g., com.youtube-youtube, com.vimeo-vimeo, org.whatwg-media_element).",
"maxLength": 4096
},
"quality": {
"type": [
"string",
"null"
],
"description": "Quality level of the playback (e.g., 1080p).",
"maxLength": 4096
},
"volume": {
"type": [
"integer",
"null"
],
"description": "Volume percentage at which the media will be played.",
"minimum": 0,
"maximum": 100
}
},
"additionalProperties": false,
"required": [
"currentTime",
"ended",
"paused"
]
}
Media session entity
The media session entity is updated automatically by our trackers. It contains metrics that are calculated based on the tracked media events and the media update calls.
It makes use of the information in the media player entity (see above) and the tracked media event types to update it's state and calculate metrics. The table below shows which media player properties (first column) and media events (second column) are used to calculate the metrics within the media session entity (third column).
Media player entity property | Media events | Affected calculation of metric |
---|---|---|
paused | play_event , pause_event | timePlayed , timePaused , timePlayedMuted , contentWatched |
currentTime | timePlayed , timePaused , timePlayedMuted , contentWatched | |
muted | timePlayedMuted | |
playbackRate | playback_rate_change_event | avgPlaybackRate |
buffer_start_event , buffer_end_event , play_event | timeBuffering | |
ad_start_event | ads | |
ad_skip_event | adsSkipped | |
ad_click_event | adsClicked | |
ad_break_start_event | adBreaks | |
ad_start_event , ad_quartile_event , ad_complete_event | timeSpentAds | |
ad_start_event , ad_complete_event , ad_skip_event | timePlayed , timePlayedMuted * |
* Play time stats are not being incremented while ads with type linear (default) are being played. Linear ads take over the video playback. For non-linear and companion ads, play time stats are still being incremented while the ad is playing.
session
EntityExample
{
"mediaSessionId": "2d9bd9ac-abbd-419a-b934-9a2965cba339",
"startedAt": "2023-11-03T09:55:29.920Z",
"pingInterval": 15,
"timePlayed": 143.12,
"timePlayedMuted": 0,
"timePaused": 8.12,
"contentWatched": 120,
"timeBuffering": 0.988,
"timeSpentAds": 14.2,
"ads": 4,
"adsClicked": 0,
"adsSkipped": 1,
"adBreaks": 2,
"avgPlaybackRate": 1.21
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
mediaSessionId string | Required. An identifier for the media session that is kept while the media content is played in the media player. |
startedAt null | Optional. Local date-time timestamp of when the session started. |
pingInterval integer | Optional. Interval (seconds) in which the ping events will be sent. Default (specified in the tracker media docs) is assumed if not specified. |
timePlayed number | Optional. Total seconds user spent playing content (excluding linear ads). |
timePlayedMuted number | Optional. Total seconds user spent playing content on mute (excluding linear ads). |
timePaused number | Optional. Total seconds user spent with paused content (excluding linear ads). |
contentWatched number | Optional. Total seconds of the content played. Each part of the content played is counted once (i.e., counts rewinding or rewatching the same content only once). Playback rate does not affect this value. |
timeBuffering number | Optional. Total seconds that playback was buffering during the session. |
timeSpentAds number | Optional. Total seconds that ads played during the session. |
ads integer | Optional. Number of ads played. |
adsClicked integer | Optional. Number of ads that the user clicked on. |
adsSkipped integer | Optional. Number of ads that the user skipped. |
adBreaks integer | Optional. Number of ad breaks played. |
avgPlaybackRate number | Optional. Average playback rate (1 is normal speed). |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Schema for a context entity for media player events that tracks a session of a single media player usage",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "session",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"mediaSessionId": {
"type": "string",
"maxLength": 256,
"description": "An identifier for the media session that is kept while the media content is played in the media player."
},
"startedAt": {
"type": [
"null",
"string"
],
"description": "Local date-time timestamp of when the session started.",
"format": "date-time"
},
"pingInterval": {
"type": [
"integer",
"null"
],
"description": "Interval (seconds) in which the ping events will be sent. Default (specified in the tracker media docs) is assumed if not specified.",
"minimum": 0,
"maximum": 65535
},
"timePlayed": {
"type": [
"number",
"null"
],
"description": "Total seconds user spent playing content (excluding linear ads).",
"minimum": 0,
"maximum": 2147483647
},
"timePlayedMuted": {
"type": [
"number",
"null"
],
"description": "Total seconds user spent playing content on mute (excluding linear ads).",
"minimum": 0,
"maximum": 2147483647
},
"timePaused": {
"type": [
"number",
"null"
],
"description": "Total seconds user spent with paused content (excluding linear ads).",
"minimum": 0,
"maximum": 2147483647
},
"contentWatched": {
"type": [
"number",
"null"
],
"description": "Total seconds of the content played. Each part of the content played is counted once (i.e., counts rewinding or rewatching the same content only once). Playback rate does not affect this value.",
"minimum": 0,
"maximum": 2147483647
},
"timeBuffering": {
"type": [
"number",
"null"
],
"description": "Total seconds that playback was buffering during the session.",
"minimum": 0,
"maximum": 2147483647
},
"timeSpentAds": {
"type": [
"number",
"null"
],
"description": "Total seconds that ads played during the session.",
"minimum": 0,
"maximum": 2147483647
},
"ads": {
"type": [
"integer",
"null"
],
"description": "Number of ads played.",
"minimum": 0,
"maximum": 65535
},
"adsClicked": {
"type": [
"integer",
"null"
],
"description": "Number of ads that the user clicked on.",
"minimum": 0,
"maximum": 65535
},
"adsSkipped": {
"type": [
"integer",
"null"
],
"description": "Number of ads that the user skipped.",
"minimum": 0,
"maximum": 65535
},
"adBreaks": {
"type": [
"integer",
"null"
],
"description": "Number of ad breaks played.",
"minimum": 0,
"maximum": 65535
},
"avgPlaybackRate": {
"type": [
"number",
"null"
],
"description": "Average playback rate (1 is normal speed).",
"minimum": 0,
"maximum": 16
}
},
"additionalProperties": false,
"required": [
"mediaSessionId"
]
}
Media ad
ad
EntityExample
{
"name": "Snowplow 5s ad",
"adId": "2d9bd9ac-abbd-419a-b934-9a2965cba339",
"creativeId": "fb819c48-5760-4d94-9c5b-4fa52f61a998",
"podPosition": 2,
"duration": 5,
"skippable": true
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
name null | Optional. Friendly name of the ad. |
adId string | Required. Unique identifier for the ad. |
creativeId string | Optional. The ID of the ad creative. |
podPosition integer | Optional. The position of the ad within the ad break, starting with 1. |
duration number | Optional. Length of the video ad in seconds. |
skippable boolean | Optional. Indicating whether skip controls are made available to the end user. |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Schema for a context entity with information about the currently played ad",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"name": {
"description": "Friendly name of the ad.",
"type": [
"null",
"string"
],
"maxLength": 4096
},
"adId": {
"type": "string",
"maxLength": 256,
"description": "Unique identifier for the ad."
},
"creativeId": {
"type": [
"string",
"null"
],
"maxLength": 4096,
"description": "The ID of the ad creative."
},
"podPosition": {
"type": [
"integer",
"null"
],
"description": "The position of the ad within the ad break, starting with 1.",
"minimum": 1,
"maximum": 65535
},
"duration": {
"type": [
"number",
"null"
],
"description": "Length of the video ad in seconds.",
"minimum": 0,
"maximum": 2147483647
},
"skippable": {
"type": [
"boolean",
"null"
],
"description": "Indicating whether skip controls are made available to the end user."
}
},
"additionalProperties": false,
"required": [
"adId"
]
}
Media ad break
ad_break
EntityExample
{
"name": "pre-roll",
"breakId": "fb819c48-5760-4d94-9c5b-4fa52f61a998",
"startTime": 0,
"breakType": "linear",
"podSize": 2
}
Schema
- Table
- JSON schema
Property | Description |
---|---|
name null | Optional. Ad break name (e.g., pre-roll, mid-roll, and post-roll). |
breakId string | Required. An identifier for the ad break. |
startTime number | Required. Playback time in seconds at the start of the ad break. |
breakType string | Optional. Type of ads within the break: linear (take full control of the video for a period of time), nonlinear (run concurrently to the video), companion (accompany the video but placed outside the player). Must be one of: linear , nonlinear , companion ,
|
podSize integer | Optional. The number of ads to be played within the ad break. |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"description": "Schema for a context entity, shared with all ad events belonging to the ad break.",
"self": {
"vendor": "com.snowplowanalytics.snowplow.media",
"name": "ad_break",
"format": "jsonschema",
"version": "1-0-0"
},
"type": "object",
"properties": {
"name": {
"description": "Ad break name (e.g., pre-roll, mid-roll, and post-roll).",
"type": [
"null",
"string"
],
"maxLength": 4096
},
"breakId": {
"type": "string",
"maxLength": 256,
"description": "An identifier for the ad break."
},
"startTime": {
"type": "number",
"description": "Playback time in seconds at the start of the ad break.",
"minimum": 0,
"maximum": 2147483647
},
"breakType": {
"description": "Type of ads within the break: linear (take full control of the video for a period of time), nonlinear (run concurrently to the video), companion (accompany the video but placed outside the player).",
"enum": [
"linear",
"nonlinear",
"companion",
null
],
"type": [
"string",
"null"
]
},
"podSize": {
"type": [
"integer",
"null"
],
"description": "The number of ads to be played within the ad break.",
"minimum": 0,
"maximum": 65535
}
},
"additionalProperties": false,
"required": [
"breakId",
"startTime"
]
}
How to track?
- on Web using plugins for our JavaScript trackers:
- media plugin that can be used to track events from any media player.
- HTML5 media tracking plugin.
- YouTube tracking plugin.
- Vimeo tracking plugin.
- media tracking APIs on our iOS and Android trackers for mobile apps.
Modeled data using the snowplow-media-player dbt package
The media player dbt package contains a fully incremental model that transforms raw media event data into a set of derived tables based around the following data objects: media plays, media stats, media ad views, and media ads.
Derived table | Table description | |
---|---|---|
snowplow_media_player_base | This derived table summarises the key media player events and metrics of each media element on a media_id and pageview level which is considered as a base aggregation level for media interactions. | Docs |
snowplow_media_player_plays_by_pageview | This view removes impressions from the '_base' table to summarise media plays on a page_view by media_id level. | Docs |
snowplow_media_player_media_stats | This derived table aggregates the '_base' table to individual media_id level, calculating the main KPIs and overall video/audio metrics. | Docs |
snowplow_media_player_media_ad_views | This derived table aggregated individual views of ads during media playback. | Docs |
snowplow_media_player_media_ads | This derived table aggregates information about ads. Each row represents one ad played within a certain media on a certain platform. Stats about the number of ad clicks, progress reached and more are calculated as total values but also as counts of unique users. | Docs |