Skip to contentSkip to navigationSkip to topbar
On this page
Looking for more inspiration?Visit the
(information)
You're in the right place! Segment documentation is now part of Twilio Docs. The content you are used to is still here—just in a new home with a refreshed look.

Video Spec


Segment's video spec helps you define how customers engage with your video and ad content. This document covers the naming syntax and conventions for how you should send events when tracking video analytics.

(warning)

Not all destinations support video tracking

You should always check with the individual destination documentation to confirm.


Getting started

getting-started page anchor

Before you start implementing the Segment video spec, you should understand the overall structure and classification of events. The video spec has three distinct event categories:

  • Playback
  • Content
  • Ads

You can think of playback events being related to the actual playback of the video content. This means that these events are meant to track information about the video player (such as pause, resume, or play). Thus, you can think of playback events to be at the session level. For example, when a customer presses play on your video, you would start by sending a Video Playback Started event with a unique session_id. In particular, this event should fire after the last user action required for playback to begin.

Then, for the duration of that user's session with that specific video player, all subsequent events generated from this session/playback should be tied with the same aforementioned session_id. So if you had a web page that had two video players, you would have two separate sessions and session_ids, but if you only had one video player on the page but the playback played two video contents in a row, you would only have one session but two contents tied to it.

Playback event object

playback-event-object page anchor

All playback events share the same event properties that describe information about the current state of the player. Below is a table of the supported properties of this object.

PropertyTypeDescription
session_idStringThe unique ID of the overall session used to tie all events generated from a specific playback. This value should be the same across all playback, content, and ad events if they are from the same playback session.
content_asset_id, content_asset_idsString, Array[string]The Content Asset Id(s) of the video/videos playing or about to be played in the video player. For Video Playback Started events only, you should send the plural form with an Array of unique asset IDs. For all other playback events, you should send the singular form with the ID of the current content asset playing at the time of the event.
content_pod_id, content_pod_idsString, Array[string]The Content Pod Id(s) of the video/videos playing or about to be played in the video player. For Video Playback Started events only, you should send the plural form with an Array of unique pod IDs. For all other playback events, you should send the singular form with the ID of the current content pod playing at the time of the event.
ad_asset_idString, Array[string]The Ad Asset Id(s) of the ad/ads playing or about to be played in the video player. For Video Playback Started events only, you should send an Array of unique ad asset IDs. For all other playback events, you should send a string with the ID of the current ad asset playing at the time of the event.
ad_pod_idString, Array[string]The Ad Pod Id(s) of the ad/ads playing or about to be played in the video player. For Video Playback Started events only, you should send an Array of unique ad pod IDs. For all other playback events, you should send a string with the ID of the current ad pod playing at the time of the event.
ad_typeEnum {pre-roll, mid-roll, post-roll}The type of ad playing at the time of the event. Values can include pre-roll, mid-roll, and post-roll.
positionIntegerThe current index position in seconds of the playhead, including the duration of any ads seen (if available). If the playback is a livestream, check the documentation for relevant destinations for details on how to correctly pass the playhead position.
total_lengthIntegerThe total duration of the playback in seconds. This should include the duration of all your content and ad included in this playback session. For livestream playback, send null.
bitrateIntegerThe current kbps.
framerateFloatThe average fps.
video_playerStringThe name of the video player (for example, youtube or vimeo).
soundIntegerThe sound level of the playback represented in a 0 to 100 scale where 0 is muted and 100 is full volume.
full_screenBooleantrue if playback is currently in full screen mode and false otherwise.
ad_enabledBooleanfalse if the user has adblock or any other ad blockers, otherwise true if they can view your video ads.
qualityStringThe quality of the video, for example, highres, hd1080, or 480p.
methodStringFor Video Playback Interrupted events only, you can send this property denoting how the playback was interrupted (such as browser redirect, device lock, or call).
livestreamBooleanIf the playback will be a livestream, send true, otherwise false.

Below is the full list of Video Playback Events.

Video playback started

video-playback-started page anchor

This event is tracked when a user presses Play after the last user action required for playback to begin (for example, after user login/authentication).

1
{
2
"action": "track",
3
"event": "Video Playback Started",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_ids": ["0129370"],
8
"content_pod_ids": ["segA", "segB"],
9
"ad_asset_id": ["ad123", "ad097"],
10
"ad_pod_id": ["adSegA", "adSegB"],
11
"ad_type": ["mid-roll", "post-roll"],
12
"position": 0,
13
"total_length": 392,
14
"bitrate": 100,
15
"framerate": 29.00,
16
"video_player": "youtube",
17
"sound": 88,
18
"full_screen": false,
19
"ad_enabled": true,
20
"quality": "hd1080",
21
"livestream": false
22
}
23
}

Collected when a user presses Pause.

1
{
2
"action": "track",
3
"event": "Video Playback Paused",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 278,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false
19
}
20
}

Video playback interrupted

video-playback-interrupted page anchor

Collected when the playback stops unintentionally (from network loss, browser close/redirect, or app crash). With this event you can pass method as a property to denote the cause of the interruption.

1
{
2
"action": "track",
3
"event": "Video Playback Interrupted",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 278,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false,
19
"method": "network loss"
20
}
21
}

Video playback buffer started

video-playback-buffer-started page anchor

Collected when playback starts buffering content or an ad.

1
{
2
"action": "track",
3
"event": "Video Playback Buffer Started",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 278,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false
19
}
20
}

Video playback buffer completed

video-playback-buffer-completed page anchor

Collected when playback finishes buffering content or an ad.

1
{
2
"action": "track",
3
"event": "Video Playback Buffer Completed",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 278,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false
19
}
20
}

Video playback seek started

video-playback-seek-started page anchor

Collected when a user manually seeks a certain position of the content or ad in the playback. Pass in the seek_position to denote where the user is seeking to, and pass in the position property to denote where the user is seeking from.

1
{
2
"action": "track",
3
"event": "Video Playback Seek Started",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 278,
10
"seek_position": 320,
11
"total_length": 392,
12
"bitrate": 100,
13
"framerate": 29.00,
14
"video_player": "youtube",
15
"sound": 55,
16
"full_screen": false,
17
"ad_enabled": false,
18
"quality": "hd1080",
19
"livestream": false
20
}
21
}

Video playback seek completed

video-playback-seek-completed page anchor

Collected after a user manually seeks to a certain position of the content or ad in the playback. Pass in the position property to denote where the user desires to begin the playback from.

1
{
2
"action": "track",
3
"event": "Video Playback Seek Completed",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 320,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false
19
}
20
}

Collected when playback is resumed, by the user, after being paused.

1
{
2
"action": "track",
3
"event": "Video Playback Resumed",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 278,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false
19
}
20
}

Video playback completed

video-playback-completed page anchor

Collected when playback is complete and only when the session is finished.

1
{
2
"action": "track",
3
"event": "Video Playback Completed",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 392,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false
19
}
20
}

Collected when user navigates away from a playback/stream.

1
{
2
"action": "track",
3
"event": "Video Playback Exited",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"content_asset_id": "0129370",
8
"content_pod_id": "segA",
9
"position": 392,
10
"total_length": 392,
11
"bitrate": 100,
12
"framerate": 29.00,
13
"video_player": "youtube",
14
"sound": 55,
15
"full_screen": false,
16
"ad_enabled": false,
17
"quality": "hd1080",
18
"livestream": false
19
}
20
}

Underneath the playback level, we now have the pod level. A pod can be seen as a "group" or "segment" of either the content or advertisement.

Consider, for example, a playback session that might have some content and one mid-roll advertisement. This would mean that you would have two content pods (since the mid-roll ad split the content playback into two sections) while you might have one ad pod for the mid-roll ad. In this instance, you'd start and complete the first pod of content; you'd start and complete the ad; you'd start and complete the second pod of content. All of this would happen within one playback start.

All content events share the same event properties that describe information about the current video content the user is interacting with. Below is a table of the supported properties of this object.

PropertyTypeDescription
session_idStringThe unique ID of the overall session used to tie all events generated from a specific playback. This value should be same across all playback, content, and ad events if they are from the same playback session.
asset_idStringThe unique ID of the content asset.
pod_idStringThe unique ID of the content pod.
titleStringThe title of the video content.
descriptionStringShort description of the video content.
keywordsArray[string]An array of arbitrary keywords or tags that describe or categorize the video content.
seasonStringThe season number if applicable.
episodeStringThe episode number if applicable.
genreStringThe genre of the content. For example,comedy or action.
programStringThe name of the content program or show if applicable.
publisherStringThe content creator, author, producer, or publisher.
positionIntegerThe current index position in seconds of the playhead into the content/asset. This position must exclude the duration of any ads played. If the playback is a livestream, check the documentation for relevant destinations for details on how to correctly pass the playhead position.
total_lengthIntegerThe total duration of the content/asset in seconds. This should exclude the duration of any ads included in the playback of this asset. For livestream playback, send null.
channelStringThe channel in which the video content is playing, such as espn or my blog.
full_episodeBooleantrue if content is a full episode and false otherwise.
livestreamBooleanIf the playback is a livetream, send true, otherwise false.
airdateISO 8601 Date StringAn ISO 8601 Date String(link takes you to an external page) representing the original air date or published date.
bitrateIntegerThe current kbps.
framerateFloatThe average fps.

Below is the full list of Video Content Events.

Collected when a video content segment starts playing within a playback.

1
{
2
"action": "track",
3
"event": "Video Content Started",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"asset_id": "0129370",
8
"pod_id": "segA",
9
"program": "Planet Earth",
10
"title": "Seasonal Forests",
11
"description": "David Attenborough reveals the greatest woodlands on earth.",
12
"season": "1",
13
"position": 0,
14
"total_length": 3600,
15
"genre": "Documentary",
16
"publisher": "BBC",
17
"full_episode": true,
18
"keywords": ["nature", "forests", "earth"]
19
}
20
}

Heartbeats that you can fire every n seconds to track how far into the content the user is currently viewing as indicated by the position.

1
{
2
"action": "track",
3
"event": "Video Content Playing",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"asset_id": "0129370",
8
"pod_id": "segA",
9
"program": "Planet Earth",
10
"title": "Seasonal Forests",
11
"description": "David Attenborough reveals the greatest woodlands on earth.",
12
"season": "1",
13
"position": 10,
14
"total_length": 3600,
15
"genre": "Documentary",
16
"publisher": "BBC",
17
"full_episode": true,
18
"keywords": ["nature", "forests", "earth"]
19
}
20
}

Collected when a video content segment completes playing within a playback. That is, position and total_length are equal.

1
{
2
"action": "track",
3
"event": "Video Content Completed",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"asset_id": "0129370",
8
"pod_id": "segA",
9
"program": "Planet Earth",
10
"title": "Seasonal Forests",
11
"description": "David Attenborough reveals the greatest woodlands on earth.",
12
"season": "1",
13
"position": 3600,
14
"total_length": 3600,
15
"genre": "Documentary",
16
"publisher": "BBC",
17
"full_episode": true,
18
"keywords": ["nature", "forests", "earth"]
19
}
20
}

Just like Content events, Ad Events also live underneath the playback level and at the pod level. A given ad pod can have multiple ad assets (or just one) and a playback session might have multiple ad pods. For example, if your video playback has two pre-roll, one mid-roll, and one post-roll ads, you would have three ad pods:

  • ad pod 1: plays the two pre-roll ads
  • ad pod 2: plays the one mid-roll ad
  • ad pod 3: plays the one post-roll ad

All ad events share the same event properties that describe information about the current ad content the user is interacting with. Below is a table of the supported properties of this object.

PropertyTypeDescription
session_idStringThe unique ID of the overall session used to tie all events generated from a specific playback. This value should be same across all playback, content, and ad events if they are from the same playback session.
asset_idStringThe unique ID of the ad asset.
pod_idStringThe unique ID of the ad pod.
pod_positionIntegerThe position of the ad asset relative to other assets in the same pod.
pod_lengthIntegerThe number of ad assets the current ad pod contains.
typeEnum {pre-roll, mid-roll, post-roll}The ad type. You can send either pre-roll, mid-roll, or post-roll.
titleStringThe title of the video ad.
publisherStringThe ad creator, author, producer, or publisher.
positionIntegerThe current index position, in seconds, of the playhead with respect to the length of the ad.
total_lengthIntegerThe total duration of the current ad asset in seconds.
load_typeEnum {linear, dynamic}dynamic if ads are loaded dynamically and linear if ads are same for all users.
contentObject[ContentEventObject]For video destinations that require content metadata to be sent with ad events, you can send all the content metadata nested under this property (such as content.asset_id or content.title) as a Content Event Object.
quartileIntegerFor Video Ad Playing events, this property can be set to indicate when a specific ad quartile has been reached (1,2, or 3). If you are using a Segment client-side library to track your video events you don't need to send this property as Segment's libraries will automatically track quartiles.
(information)

Info

Since some video destinations require sending Content metadata along with Ad metadata, you may need to send your content properties also in all your ad events under properties.content depending on the video destination you're using.

1
{
2
"action": "track",
3
"event": "Video Ad Started",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"asset_id": "0129370",
8
"pod_id": "segA",
9
"type": "pre-roll",
10
"title": "The New New Thing!",
11
"position": 0,
12
"total_length": 30,
13
"publisher": "Apple",
14
"load_type": "dynamic"
15
}
16
}
1
{
2
"action": "track",
3
"event": "Video Ad Playing",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"asset_id": "0129370",
8
"pod_id": "segA",
9
"type": "pre-roll",
10
"title": "The New New Thing!",
11
"position": 5,
12
"total_length": 30,
13
"publisher": "Apple",
14
"load_type": "dynamic"
15
}
16
}
1
{
2
"action": "track",
3
"event": "Video Ad Completed",
4
"userId": "userId",
5
"properties": {
6
"session_id": "12345",
7
"asset_id": "0129370",
8
"pod_id": "segA",
9
"type": "pre-roll",
10
"title": "The New New Thing!",
11
"position": 30,
12
"total_length": 30,
13
"publisher": "Apple",
14
"load_type": "dynamic"
15
}
16
}

When you fire a Video Playback Resumed event, you should immediately call a Segment heartbeat event (Video Content Playing or Video Ad Playing depending on what the playback resumed to). This should effectively mean that you are also resuming your 10 second heartbeats (since they should've been paused after sending Video Playback Paused event).


It's important to analyze the performance of your video content. To keep track of quality changes, you can track a Video Quality Updated event when there is a change in video quality with the following properties:

  • bitrate
  • framerate
  • startupTime
  • droppedFrames

Below is an example of how one might implement the video spec:

  1. User presses play on a video:
1
analytics.track('Video Playback Started', {
2
session_id: '12345',
3
content_asset_ids: ['0129370'],
4
content_pod_ids: ['segA', 'segB'],
5
ad_asset_ids: [ 'ad123', 'ad097' ],
6
ad_pod_ids: ['adSegA', 'adSegB'],
7
ad_types: ['mid-roll', 'post-roll'],
8
position: 0,
9
total_length: 392,
10
bitrate: 100,
11
video_player: 'youtube',
12
sound: 88,
13
full_screen: false,
14
ad_enabled: false,
15
quality: 'hd1080'
16
});
  1. Playback starts to play content:
1
analytics.track('Video Content Started', {
2
session_id: '12345',
3
asset_id: '0129370',
4
pod_id: 'segA',
5
title: 'Interview with Tony Robbins',
6
description: 'short description',
7
keywords: ['entrepreneurship', 'motivation'],
8
season: '2',
9
episode: '177',
10
genre: 'entrepreneurship',
11
program: 'Tim Ferris Show',
12
publisher: 'Tim Ferris',
13
position: 0,
14
total_length: 360,
15
channel: 'espn',
16
full_episode: true,
17
livestream: false,
18
airdate: '1991-08-13'
19
});
  1. User views content for 20 seconds and we have 10 second heartbeats:
1
analytics.track('Video Content Playing', {
2
session_id: '12345',
3
asset_id: '0129370',
4
pod_id: 'segA',
5
title: 'Interview with Tony Robbins',
6
description: 'short description',
7
keywords: ['entrepreneurship', 'motivation'],
8
season: '2',
9
episode: '177',
10
genre: 'entrepreneurship',
11
program: 'Tim Ferris Show',
12
publisher: 'Tim Ferris',
13
position: 10,
14
total_length: 360,
15
channel: 'espn',
16
full_episode: true,
17
livestream: false,
18
airdate: '1991-08-13'
19
});
1
analytics.track('Video Content Playing', {
2
session_id: '12345',
3
asset_id: '0129370',
4
pod_id: 'segA',
5
title: 'Interview with Tony Robbins',
6
description: 'short description',
7
keywords: ['entrepreneurship', 'motivation'],
8
season: '2',
9
episode: '177',
10
genre: 'entrepreneurship',
11
program: 'Tim Ferris Show',
12
publisher: 'Tim Ferris',
13
position: 20,
14
total_length: 360,
15
channel: 'espn',
16
full_episode: true,
17
livestream: false,
18
airdate: '1991-08-13'
19
});
  1. Playback is paused and resumed:
1
analytics.track('Video Playback Paused', {
2
session_id: '12345',
3
content_asset_id: '0129370',
4
content_pod_id: 'segA',
5
ad_asset_id: null,
6
ad_pod_id: null,
7
ad_type: null,
8
position: 21,
9
total_length: 392,
10
video_player: 'youtube',
11
sound: 88,
12
bitrate: 100,
13
full_screen: false,
14
ad_enabled: false,
15
quality: 'hd1080'
16
});
1
analytics.track('Video Playback Resumed', {
2
session_id: '12345',
3
content_asset_id: '0129370',
4
content_pod_id: 'segA',
5
ad_asset_id: null,
6
ad_pod_id: null,
7
ad_type: null,
8
position: 21,
9
total_length: 392,
10
sound: 88,
11
bitrate: 100,
12
full_screen: false,
13
video_player: 'youtube',
14
ad_enabled: false,
15
quality: 'hd1080'
16
});
  1. Mid-roll ad starts playing:
1
analytics.track('Video Ad Started', {
2
session_id: '12345',
3
asset_id: 'ad123',
4
pod_id: 'adSegA',
5
type: 'mid-roll',
6
title: 'Segment Connection Modes',
7
publisher: 'Segment',
8
position: 0,
9
total_length: 21,
10
load_type: 'dynamic'
11
});
  1. User watches the full 21 second ad and we have 10 second heartbeats:
1
analytics.track('Video Ad Playing', {
2
session_id: '12345',
3
asset_id: 'ad123',
4
pod_id: 'adSegA',
5
type: 'pre-roll',
6
title: 'Segment Connection Modes',
7
publisher: 'Segment',
8
position: 10,
9
total_length: 21,
10
load_type: 'dynamic'
11
});
1
analytics.track('Video Ad Playing', {
2
session_id: '12345',
3
asset_id: 'ad123',
4
pod_id: 'adSegA',
5
type: 'pre-roll',
6
title: 'Segment Connection Modes',
7
publisher: 'Segment',
8
position: 20,
9
total_length: 21,
10
load_type: 'dynamic'
11
});
1
analytics.track('Video Ad Completed', {
2
session_id: '12345',
3
asset_id: 'ad123',
4
pod_id: 'adSegA',
5
type: 'pre-roll',
6
title: 'Segment Connection Modes',
7
publisher: 'Segment',
8
position: 21,
9
total_length: 21,
10
load_type: 'dynamic'
11
});
  1. Content resumes, user finishes the full content:
1
analytics.track('Video Content Playing', {
2
session_id: '12345',
3
asset_id: '0129370',
4
pod_id: 'segB',
5
title: 'Interview with Tony Robbins',
6
description: 'short description',
7
keywords: ['entrepreneurship', 'motivation'],
8
season: '2',
9
episode: '177',
10
genre: 'entrepreneurship',
11
program: 'Tim Ferris Show',
12
publisher: 'Tim Ferris',
13
position: 31,
14
total_length: 360,
15
channel: 'espn',
16
full_episode: true,
17
livestream: false,
18
airdate: '1991-08-13'
19
});

(Video Content Playing hearbeats every 10 seconds)

1
analytics.track('Video Content Completed', {
2
session_id: '12345',
3
asset_id: '0129370',
4
pod_id: 'segB',
5
title: 'Interview with Tony Robbins',
6
description: 'short description',
7
keywords: ['entrepreneurship', 'motivation'],
8
season: '2',
9
episode: '177',
10
genre: 'entrepreneurship',
11
program: 'Tim Ferris Show',
12
publisher: 'Tim Ferris',
13
position: 360,
14
total_length: 360,
15
channel: 'espn',
16
full_episode: true,
17
livestream: false,
18
airdate: '1991-08-13'
19
});
  1. 11 second post-roll ad plays after content finishes:
1
analytics.track('Video Ad Started', {
2
session_id: '12345',
3
asset_id: 'ad097',
4
pod_id: 'adSegB',
5
type: 'post-roll',
6
title: 'Segment Cross Domain IDs',
7
publisher: 'Segment',
8
position: 0,
9
total_length: 11,
10
load_type: 'dynamic'
11
});
1
analytics.track('Video Ad Playing', {
2
session_id: '12345',
3
asset_id: 'ad097',
4
pod_id: 'adSegB',
5
type: 'post-roll',
6
title: 'Segment Cross Domain IDs',
7
publisher: 'Segment',
8
position: 10,
9
total_length: 11,
10
load_type: 'dynamic'
11
});
1
analytics.track('Video Ad Completed', {
2
session_id: '12345',
3
asset_id: 'ad097',
4
pod_id: 'adSegB',
5
type: 'post-roll',
6
title: 'Segment Cross Domain IDs',
7
publisher: 'Segment',
8
position: 11,
9
total_length: 11,
10
load_type: 'dynamic'
11
});
  1. Playback finishes:
1
analytics.track('Video Playback Completed', {
2
session_id: '12345',
3
content_asset_id: null,
4
content_pod_id: null,
5
ad_asset_id: 'ad907',
6
ad_pod_id: 'adSegB',
7
ad_type: null,
8
position: 392,
9
total_length: 392,
10
sound: 88,
11
bitrate: 100,
12
full_screen: false,
13
video_player: 'youtube',
14
ad_enabled: false,
15
quality: 'hd1080'
16
});

Below is an example of how a playback that has three mid-roll ads interspersed within the content:

Playback with three mid-roll ads interspersed within content.