Hey, how can we help?

browse

Table of Contents


 

Overview

Wurl’s SSAI solution monetizes video delivery using Server-Side Ad Insertion. Ads can be routed through a Streamer’s Ad Decisioning Server (ADS) or split with a Content Company’s ADS.

When the SSAI detects ad markers in a video stream viewed by a user, ads are requested from an ad server using VAST 3.0.  The VAST request carries various data, including contextual metadata (e.g. genre), stream-related data (e.g. break duration), and device-level metadata (e.g. device ID).  The sections below discuss the Wurl SSAI workflow, Ad Marker Examples, and the integration and passing of metadata from the application/device to the SSAI via the playback URL and from the SSAI to the ad server via the VAST URL.

SSAI Workflow

  1. SCTE-35 markup in the HLS manifests are used to trigger an ad decision request. 
  2. When an ad maker is encountered during playback, the SSAI system sends a VAST request for advertising creatives which are stitched into the stream for that device.
  3. Wurl’s Manifest server initiates ad requests with Wurl’s ad router using VAST 3.0. The VAST URL passes information to an Ad Server via VAST Tag key value pairs.
  4. The Ad Server then responds with specific advertisements to be inserted.
  5. If an ad is requested for the first time, the Ad ingest workflow communicates with the ADS Graphic Engine to create multiple versions for each Ad, then transcodes the files using similar HLS profile to the content files (bit rates, frame rate, PIDs, resolution) and pushes it to the CDN.
  6. Ads requested that have the necessary transcoded files are served to the client via Wurl’s CDN.

Ad Markup Example

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:341316
#EXT-X-TARGETDURATION:6
#EXT-X-DISCONTINUITY-SEQUENCE:21382
#EXT-OATCLS-SCTE35:WURL1658742479
#EXT-X-ASSET:BreakType="",GENRE="A",CAID="",EPISODE="Ask%20Nasa",SEASON="NASA%27s%2050th%20Anniversary%20Documentary%20Season%201",SERIES="NASA%27s%2050th%20Anniversary%20Documentary"
#EXT-X-CUE-OUT:30
#EXT-X-KEY:METHOD=NONE
#EXT-X-DISCONTINUITY
#EXT-X-PROGRAM-DATE-TIME:2022-07-26T15:05:39.951109759Z
#EXTINF:6.006,epid=11246766:epdur=1800011:ct=M:tag=ad:aid=43876601:td=54146
https://wurl-integrationchannel-1-us.ono.wurl.tv/43876601/hls-v2/3000-00001.ts?e=1658848839&st=314c6bb251865c86e21bf01eaea3cfa1
#EXT-X-CUE-OUT-CONT:ElapsedTime=6.006,Duration=30,SCTE35=WURL1658742479
#EXT-X-KEY:METHOD=NONE
#EXTINF:6.006,epid=11246766:epdur=1800011:ct=M:tag=ad:aid=43876601:td=54146
https://wurl-integrationchannel-1-us.ono.wurl.tv/43876601/hls-v2/3000-00002.ts?e=1658848845&st=57f6d3cbb65e10a4abb83c19510c913f
#EXT-X-CUE-OUT-CONT:ElapsedTime=12.012,Duration=30,SCTE35=WURL1658742479
#EXT-X-KEY:METHOD=NONE
#EXTINF:6.006,epid=11246766:epdur=1800011:ct=M:tag=ad:aid=43876601:td=54146
https://wurl-integrationchannel-1-us.ono.wurl.tv/43876601/hls-v2/3000-00003.ts?e=1658848851&st=563fa354935887aa60791d29f8868867
#EXT-X-CUE-OUT-CONT:ElapsedTime=18.018,Duration=30,SCTE35=WURL1658742479
#EXT-X-KEY:METHOD=NONE
#EXTINF:6.006,epid=11246766:epdur=1800011:ct=M:tag=ad:aid=43876601:td=54146
https://wurl-integrationchannel-1-us.ono.wurl.tv/43876601/hls-v2/3000-00004.ts?e=1658848857&st=7b7143762b6cfa437287d70904817b4b
#EXT-X-CUE-OUT-CONT:ElapsedTime=24.024,Duration=30,SCTE35=WURL1658742479
#EXT-X-KEY:METHOD=NONE
#EXTINF:6.240,epid=11246766:epdur=1800011:ct=M:tag=ad:aid=43876601:td=54146
https://wurl-integrationchannel-1-us.ono.wurl.tv/43876601/hls-v2/3000-00005.ts?e=1658848863&st=439edf32a5204ae9456d3a7585a5c72a
#EXT-X-CUE-IN
#EXT-X-KEY:METHOD=NONE
#EXT-X-DISCONTINUITY
#EXTINF:6.006,epid=11246766:epdur=1800011:ct=M:tag=content:aid=42021818:td=54318
https://wurl-integrationchannel-1-us.ono.wurl.tv/42021818/hls-v2/3000-00001.ts?e=1658848870&st=1e62d96e6cf8ed2e88b20519e995cff0&wurl-info-i=74.01&wurl-info-p=30.00

Playback URL Metadata Delivery

Device-level metadata is passed by the Streamer's app/device via key values in the Playback URL.  These values are mapped and passed in the VAST request, replacing corresponding VAST macros.  Values that are not available dynamically should be left blank or hard-coded by the app in the playback URL.

Client applications should not depend on key names to fill in macro values - macro values should be filled in based on the macro string. For example, in the URL below, the macro “%7BDEVICE_ID%7D” ( url-encoded {DEVICE_ID} ) should be filled in with the device ID of the player, but the player should not assume the key name will always be “ads.device_id”. 

Example Playback URL w/ Device ID, DNT and US_PRIVACY Macros:

https://WURL_SSAI/channel_name/manifest.m3u8?ads.device_id=%7BDEVICE_ID%7D&ads.dnt=%7BDNT%7D&ads.us_privacy=%7BUS_PRIVACY%7D

 

Example resulting Playback URL request w/ DNT value blanked:

https://WURL_SSAI/channel_name/manifest.m3u8?ads.device_id=9f926419-c194-99c1-6590-4877bba29ab7&ads.dnt=1&ads.us_privacy=1YNN

 

VAST Tag Example

Macro values that are not available should be left blank or hardcoded.  Key value pairs highlighted in red below are delivered by the client application through the playback URL, while those in blue are derived from Wurl SSAI.

Example VAST Tag:

https://(PublisherAdServerurl)/vast/3.0/12345?​app_bundle​={{APP_BUNDLE}}&dnt={{DNT}}&did={{DEVICE_ID}}&app_name={{APP_NAME}}&us_privacy={{US_PRIVACY}}&content_genre={{GENRE}}&player_width=1920&player_height=1080&pod_max_dur=​{{POD_MAX_DUR}}​&cb={{CACHEBUSTER}}

 

Example resulting VAST call:

https://(PublisherAdServerurl)/vast/3.0/12345?​app_bundle=MyAppBundle&dnt=0&did=9f926419-c194-99c1-6590-4877bba29ab7&app_name=MyApp&us_privacy=1YNN&content_genre=GV&player_width=1920&player_height=1080&pod_max_dur=​120​&cb=123456789

 

Ad Server Integration Fields

Wurl's standard Ad Server Integration fields may be found on this page.

 

 

Previous
Next

Was this article helpful?

4 out of 5 found this helpful