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 | |
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 |
[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:
|
[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.client_ip] | The remote IP address that the Frequency SSAI request came from. If the |
[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 |
[session.user_agent] | The |
[session.uuid] | Alternative to
|
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:
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.
Marker Type | Description | Positioning | Purpose |
---|---|---|---|
#EXT-X-ASSET | Content-level metadata | During ad breaks | Improve programmatic ad decisioning
|
Field Name | Description | Type | URI Encode | |
---|---|---|---|---|
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]