Skip to main content

Frequency Documentation

Dynamic Ad Insertion

Overview

Frequency provides multiple advertising services. These include:

  • Advertising placement in all scheduled programs

  • Interactive, frame-accurate, tools for advertising insertion

  • Automated creation of advertising pods from imported “cue points” metadata

  • Single-click utility for stretching advertising pods to fill target program duration

  • Delivery of advertising markers in all output streams (HLS, MPEG-TS) via SCTE-35 markers

  • Server Side Ad Insertion (SSAI) for content provides and distribution partners when required

Distributor Advertising Integration Models

Below is a table of the advertising services required by each supported Frequency Studio integrated distribution partner. Note that all distributors require and accept Frequency’s SCTE-35 Markers, but only some require Frequency’s SSAIservices, while the remainder offer this service themselves.

Distribution Partner

SCTE-35 Markers

Frequency Server-Side Ad Insertion (SSAI)

The Roku Channel

X

X

Vizio Watch Free

X

Pluto

X

XUMO

X

X

STIRR

X

TiVo Plus

X

X

Brightcove Beacon

X

X

DistroTV

X

Samsung TV+

X

Sling TV

X

LG

X

Littlstar

X

Plex

X

Redbox

X

Features

Feature

Supported Formats

DAI Output

HLS, MPEG-TS

Cue Points

SCTE-35

SSAI supported templates

VAST 3.0

Ad Fallback

See Linear Creatives

Reporting

See ANALYZE

Cue Points

Frequency Studio's powerful tools allow you to create a publicly accessible HLS manifest compatible with most major SSAI providers and passes frame-accurate cuepoints which are setup either in MANAGE or during content ingestion to delineate ad avails in-stream. We currently support #EXT-X-VERSION:3 and pass cue point duration through EXT-X-CUE SCTE ad markers. These SCTE markers allow you to set ad pod duration and program identifiers to tie in to your EPG metadata in your preferred Ads Decisioning Server (ADS).

Example EXT-X-CUE Markers

#EXT-X-CUE-OUT:180.000
#EXT-X-CUE-IN

SSAI Provider Compatibility

Adobe Primetime

Amagi

Amazon Mediatailor

Google DAI

Wurl

Server Side Ad Insertion (SSAI)

Frequency SSAI can support the following VAST 3.0 / SSAI enabled Ads Decisioning Servers (ADS). If your provider is not on this list, please email ad-operations@frequency.com to certify your ad server for SSAI delivery.

ADS Support

Google Ad Manager 360

FreeWheel

SpringServe

SpotX

Linear Content Ad Behavior

In live streams, Frequency SSAI always performs ad replacement, preserving the total time between the ad markers as closely as possible. When ad markers include the DURATION attribute, we use the value to determine the duration of the ad break. Every CUE-OUT indicator must have a matching CUE-IN indicator in live workflows.

Pre-Roll Ads

Frequency SSAI can insert ads at the beginning of a playback session, before the main content begins in the manifest playback.

Mid-Roll Ads

Frequency SSAI tries to play complete ads, without clipping or truncation. Whenever Frequency SSAI encounters an ad marker that indicates an end to the ad break, it returns to the underlying content. This can mean shortening an ad that is currently playing. At the end of the duration, Frequency SSAI returns to the underlying content. If Frequency SSAI runs out of ads to play for the duration of an ad break it will default to the Ad Fallback Linear Creative. This usually happens when there aren't enough transcoded ads to fill up the duration of the ad break.

Dynamic Ad Variables

We can pass on the following dynamic ad variables into your ad tag. Some variables are generated by our vendor and the rest are obtained from the manifest and the player's session initialization request.

Variable

Description

[avail.index]

A number that represents the position of an ad avail in an index. At the start of a playback session, Frequency SSAI creates an index of all the ad avails in a manifest and stores the index for the remainder of the session. When Frequency SSAI makes a request to the ADS to fill the avail, it includes the ad avail index number. This parameter enables the ADS to improve ad selection by using features like competitive exclusion and frequency capping.

[avail.random]

A random number between 0 and 10,000,000,000 that Frequency SSAI generates for each request to the ADS. Some ad servers use this parameter to enable features such as separating ads from competing companies.

[scte.unique_program_id]

The value parsed by Frequency SSAI from the SCTE-35 splice_insert field unique_program_id. The ADS uses the unique program ID (UPID) to provide program-level ad targeting for live linear streams. If the SCTE-35 command is not splice insert, Frequency SSAI sets this to an empty value.

[session.avail_duration_ms]

The duration in milliseconds of the ad availability slot. The default value is 300,000 ms. Frequency SSAI obtains the duration value from the input manifest as follows:

      • For HLS, Frequency SSAI obtains the duration from the #EXT-X-CUE-OUT: DURATION or from values in the #EXT-X-DATERANGE tag. If the input manifest has a null, invalid, or 0 duration for the ad avail in those tags, Frequency SSAI uses the default.

[session.avail_duration_secs]

The duration in seconds of the ad availability slot, or ad avail. Frequency SSAI determines this value the same way it determines [session.avail_duration_ms].

[session.client_ip]

The remote IP address that the Frequency SSAI request came from. If the X-forwarded-for header is set, then that value is what Frequency SSAI uses for the client_ip.

[session.id]

A unique numeric identifier for the current playback session. All requests that a player makes for a session have the same id, so it can be used for ADS fields that are intended to correlate requests for a single viewing.

[session.referer]

Usually, the URL of the page that is hosting the video player. Frequency SSAI sets this variable to the value of the Referer header that the player used in its request to Frequency SSAI. If the player doesn't provide this header, Frequency SSAI leaves the [session.referer] empty. If you use a CDN or proxy in front of the manifest endpoint and you want this variable to appear, proxy the correct header from the player here.

[session.user_agent]

The User-Agent header that Frequency SSAI received from the player’s session initialization request. If you're using a CDN or proxy in front of the manifest endpoint, you must proxy the correct header from the player here.

[session.uuid]

Alternative to [session.id]. This is a unique identifier for the current playback session, such as the following:

  •                                           e039fd39-09f0-46b2-aca9-9871cc116cde
                                           
Player Data

We can pass on data received from the player to the ADS as long as the session initialization call from the player passes on the key-value pairs as the value of a single query parameter using URL encoded pairs. Example request:

https://3d17935a63e8465c831916dc43712b50.mediatailor.us-west-2.amazonaws.com/v1/master/ba62fe743df0fe93366eba3a257d792884136c7f/LINEAR-22-FREQUENCY_ONE-DEMO/22/hls/master/playlist.m3u8?ads.param?value2%3A

Advertising Reporting

We can provide reporting for SSAI events handled by Frequency in our ANALYZE tool.

HLS Asset Metadata

Frequency has the ability to condition HLS manifests to include Asset Metadata for advanced ad decisioning at the content-level. Below are the specifications for asset metadata when channel HLS outputs are enabled with this feature.

Table 3. HLS Chunklist Marker Specifications

Marker Type

Description

Positioning

Purpose

#EXT-X-ASSET

Content-level metadata

During ad breaks

Improve programmatic ad decisioning

  • Demand (real-time bidding)

  • Content-level targeting

  • Ad reporting (attribution to IDs / brands)



Table 4. Available Asset Information

Field Name

Description

Type

URI Encode

OpenRTB

CONTENT_ID

Frequency Video ID

String

Yes

Yes

CONTENT_PROGRAMID

Frequency Linear Program ID

String

Yes

No

CONTENT_EXTID

External Video ID

String

Yes

No

CONTENT_LEN

Linear Program Duration (in seconds)

Integer

No

Yes

CONTENT_BRAND

Frequency Brand Name

String

Yes

No

CONTENT_GENRE

Frequency Genre

String

Yes

Yes

CONTENT_CONTENTRATING

Parental Rating (such as MPAA rating value)

String

Yes

Yes

CONTENT_LANGUAGE

Language (ISO-639-1-alpha-2)

String

Yes

Yes

CONTENT_KEYWORDS

Keywords (comma-separated)

String

Yes

Yes

CONTENT_TITLE

Linear Program Title

String

Yes

Yes

CONTENT_FORMAT

Frequency Content Format

String

Yes

No

CONTENT_SERIES

Series Name

String

Yes

Yes

CONTENT_SEASON

Season number; blank if none

String

Yes

Yes

CONTENT_EPISODE

Episode Number; blank if none

IInteger

No

Yes

CONTENT_CONTEXT

Use 1 for Videos

Integer

No

Yes

CONTENT_PRODQ

Use 1 for Professionally Produced

Integer

No

Yes



HLS Chunklist Example

#EXT-OATCLS-SCTE35:/DAlAAAAAyiYAP/wFAUAAIMRf+/+0bb+Av4AUmNiAAEBAQAAM5uUog==
#EXT-X-ASSET:CONTENT_ID="2447371",CONTENT_FREQID="4312662727378189181",CONTENT_EXTID="ABC12345-oo0021-h4c3d",CONTENT_LEN=3600,CONTENT_BRAND="Publisher%20ABC",CONTENT_GENRE="Entertainment",CONTENT_RATING="TV14",CONTENT_LANGUAGE="en",CONTENT_KEYWORDS="key1,word2,%20cool",CONTENT_TITLE="Best%20Fails%20of%20the%20Month%20|EP%20203",CONTENT_FORMAT="Show",CONTENT_SERIES="Best%20Fails%20of%20the%20Month",CONTENT_SEASON="Season%202",CONTENT_EPISODE=3,CONTENT_CONTEXT=1,CONTENT_PRODQ=1
#EXT-X-CUE-OUT:60

SSAI Ad Tag With Macro Example

https://ad.decisioning.server/ads?
tag_id=442345
&ip=[session.ip]
&did=[player_params.did]
&duration=[scte.duration]
&resolution=1080p
&corr=[session.random]
&content_id=[asset.CONTENT_FREQID]
&content_genre=[asset.CONTENT_GENRE]
&content_title=[asset.CONTENT_TITLE]
&content_brand=[asset.CONTENT_BRAND]
&content_duration=[asset.CONTENT_LEN]
&content_series=[asset.CONTENT_SERIES]
&content_season=[asset.CONTENT_SEASON]
&content_episode=[asset.CONTENT_EPISODE]