Skip to main content

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:

Events

Playback events

Buffer end event

buffer_end_event

Event
Media player event fired when the the player finishes buffering content and resumes playback.
Schema URIiglu:com.snowplowanalytics.snowplow.media/buffer_end_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Buffer start event

buffer_start_event

Event
Media player event fired when the player goes into the buffering state and begins to buffer content.
Schema URIiglu:com.snowplowanalytics.snowplow.media/buffer_start_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Pause event

pause_event

Event
Media player event sent when the user pauses the playback.
Schema URIiglu:com.snowplowanalytics.snowplow.media/pause_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Playback end event

end_event

Event
Media player event sent when playback stops when end of the media is reached or because no further data is available.
Schema URIiglu:com.snowplowanalytics.snowplow.media/end_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Percent progress event

percent_progress_event

Event
Media player event fired when a percentage boundary set in tracking options is reached
Schema URIiglu:com.snowplowanalytics.snowplow.media/percent_progress_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
percentProgress
integer
Optional. The percent of the way through the media
Warehouse query
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'

Media ping event

ping_event

Event
Media player event fired periodically during main content playback, regardless of other API events that have been sent.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ping_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Play event

play_event

Event
Media player event sent when the player changes state to playing from previously being paused.
Schema URIiglu:com.snowplowanalytics.snowplow.media/play_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Seek end event

seek_end_event

Event
Media player event sent when a seek operation completes.
Schema URIiglu:com.snowplowanalytics.snowplow.media/seek_end_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Seek start event

seek_start_event

Event
Media player event sent when a seek operation begins.
Schema URIiglu:com.snowplowanalytics.snowplow.media/seek_start_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Player events

Error event

error_event

Event
Media player event tracked when the resource could not be loaded due to an error.
Schema URIiglu:com.snowplowanalytics.snowplow.media/error_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"errorCode": "E522",
"errorName": "forbidden",
"errorDescription": "Playback failed"
}
Schema
PropertyDescription
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.
Warehouse query
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'

Fullscreen change event

fullscreen_change_event

Event
Media player event fired immediately after the browser switches into or out of full-screen mode.
Schema URIiglu:com.snowplowanalytics.snowplow.media/fullscreen_change_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"fullscreen": true
}
Schema
PropertyDescription
fullscreen
boolean
Required. Whether the video element is fullscreen after the change
Warehouse query
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'

Picture-in-picture change event

picture_in_picture_change_event

Event
Media player event fired immediately after the browser switches into or out of picture-in-picture mode.
Schema URIiglu:com.snowplowanalytics.snowplow.media/picture_in_picture_change_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"pictureInPicture": true
}
Schema
PropertyDescription
pictureInPicture
boolean
Required. Whether the video element is showing picture-in-picture after the change.
Warehouse query
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'

Playback rate change event

playback_rate_change_event

Event
Media player event sent when the playback rate has changed.
Schema URIiglu:com.snowplowanalytics.snowplow.media/playback_rate_change_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"previousRate": 1,
"newRate": 1.5
}
Schema
PropertyDescription
previousRate
number
Optional. Playback rate before the change (1 is normal)
newRate
number
Required. Playback rate after the change (1 is normal)
Warehouse query
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'

Quality change event

quality_change_event

Event
Media player event tracked when the video playback quality changes automatically.
Schema URIiglu:com.snowplowanalytics.snowplow.media/quality_change_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"previousQuality": "1080p",
"newQuality": "720p",
"bitrate": 1500,
"framesPerSecond": 30,
"automatic": true
}
Schema
PropertyDescription
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.
Warehouse query
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'

Ready event

ready_event

Event
Media player event fired when the media tracking is successfully attached to the player and can track events.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ready_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Volume change event

volume_change_event

Event
Media player event sent when the volume has changed.
Schema URIiglu:com.snowplowanalytics.snowplow.media/volume_change_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"previousVolume": 30,
"newVolume": 50
}
Schema
PropertyDescription
previousVolume
integer
Optional. Volume percentage before the change.
newVolume
integer
Required. Volume percentage after the change.
Warehouse query
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'

Ad events

Ad click event

ad_click_event

Event
Media player event fired when the user clicked on the ad.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_click_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"percentProgress": 50
}
Schema
PropertyDescription
percentProgress
integer
Optional. The percent of the way through the ad
Warehouse query
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'

Ad break start event

ad_break_start_event

Event
Media player event that signals the start of an ad break.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_break_start_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Ad break end event

ad_break_end_event

Event
Media player event that signals the end of an ad break.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_break_end_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Ad complete event

ad_complete_event

Event
Media player event that signals the ad creative was played to the end at normal speed.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_complete_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Ad pause event

ad_pause_event

Event
Media player event fired when the user clicked the pause control and stopped the ad creative.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_pause_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"percentProgress": 50
}
Schema
PropertyDescription
percentProgress
integer
Optional. The percent of the way through the ad
Warehouse query
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'

Ad quartile event

ad_quartile_event

Event
Media player event fired when a quartile of ad is reached after continuous ad playback at normal speed.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_quartile_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"percentProgress": 50
}
Schema
PropertyDescription
percentProgress
integer
Required. The percent of the way through the ad
Warehouse query
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'

Ad resume event

ad_resume_event

Event
Media player event fired when the user resumed playing the ad creative after it had been stopped or paused.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_resume_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"percentProgress": 50
}
Schema
PropertyDescription
percentProgress
integer
Optional. The percent of the way through the ad
Warehouse query
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'

Ad skip event

ad_skip_event

Event
Media player event fired when the user activated a skip control to skip the ad creative.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_skip_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{
"percentProgress": 50
}
Schema
PropertyDescription
percentProgress
integer
Optional. The percent of the way through the ad
Warehouse query
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'

Ad start event

ad_start_event

Event
Media player event that signals the start of an ad.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_start_event/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically: Depends on the tracker used
Example
{}
Schema
PropertyDescription
Warehouse query
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'

Context entities

Media player entity

media_player

Entity
Schema for a context entity for media events that describes the media player and playback state
Schema URIiglu:com.snowplowanalytics.snowplow/media_player/jsonschema/2-0-0
Tracker compatibility
Web: Mobile: Tracked automatically:
Example
{
"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
PropertyDescription
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.

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 propertyMedia eventsAffected calculation of metric
pausedplay_event, pause_eventtimePlayed, timePaused, timePlayedMuted, contentWatched
currentTimetimePlayed, timePaused, timePlayedMuted, contentWatched
mutedtimePlayedMuted
playbackRateplayback_rate_change_eventavgPlaybackRate
buffer_start_event, buffer_end_event, play_eventtimeBuffering
ad_start_eventads
ad_skip_eventadsSkipped
ad_click_eventadsClicked
ad_break_start_eventadBreaks
ad_start_event, ad_quartile_event, ad_complete_eventtimeSpentAds
ad_start_event, ad_complete_event, ad_skip_eventtimePlayed, 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

Entity
Schema for a context entity for media player events that tracks a session of a single media player usage
Schema URIiglu:com.snowplowanalytics.snowplow.media/session/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically:
Example
{
"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
PropertyDescription
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).

Media ad

ad

Entity
Schema for a context entity with information about the currently played ad
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically:
Example
{
"name": "Snowplow 5s ad",
"adId": "2d9bd9ac-abbd-419a-b934-9a2965cba339",
"creativeId": "fb819c48-5760-4d94-9c5b-4fa52f61a998",
"podPosition": 2,
"duration": 5,
"skippable": true
}
Schema
PropertyDescription
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.

Media ad break

ad_break

Entity
Schema for a context entity, shared with all ad events belonging to the ad break.
Schema URIiglu:com.snowplowanalytics.snowplow.media/ad_break/jsonschema/1-0-0
Tracker compatibility
Web: Mobile: Tracked automatically:
Example
{
"name": "pre-roll",
"breakId": "fb819c48-5760-4d94-9c5b-4fa52f61a998",
"startTime": 0,
"breakType": "linear",
"podSize": 2
}
Schema
PropertyDescription
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.

How to track?

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 tableTable description
snowplow_media_player_baseThis 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_pageviewThis view removes impressions from the '_base' table to summarise media plays on a page_view by media_id level.Docs
snowplow_media_player_media_statsThis 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_viewsThis derived table aggregated individual views of ads during media playback.Docs
snowplow_media_player_media_adsThis 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