Ad Verification

Set up ad verification and the HLS and DASH signalling it relies on.

Ad Verification

Ad verification is only supported when using VAST 3.x or 4.0.

Measure ad viewability by customizing your player to extract verification data from the manifest file and send it to an ad verification system via the Open Measurement Interface Definition (OMID).

Ad Verification Workflow for Live Streams

Live stream ad verification workflow: Uplynk requests ads for an upcoming break and stitches the selected ads into the manifest, then the player sends data via OMID to the verification system, which verifies ad viewability
📘

Ad verification works with our Prebid feature. However, it has been omitted from this workflow for the sake of simplicity.

Ad Verification Workflow for VOD

VOD ad verification workflow: after Uplynk stitches the selected ads into the manifest and the player plays them, the player sends data via OMID to the verification system, which verifies ad viewability
📘

Ad verification works with our Prebid feature. However, it has been omitted from this workflow for the sake of simplicity.

Setup

Ad verification requires an Interactive Advertising Bureau (IAB) account. If you do not currently have an account, please create one.

Setting up ad verification requires updating your player to:

  1. Identify the type of ad verification data that will be inserted into the manifest file.
  2. Extract ad verification data from the manifest file.
  3. Send verification data to the ad verification system via OMID.
📘

Steps 2 and 3 are outside the scope of this document. Please refer to the documentation provided by your ad verification system to learn how to provide ad verification data via OMID.

Ad Verification Data

Add ad verification data to the manifest by including one or more of the following query string parameter(s) in the playback URL:

Query String ParameterDescription
timedmeta.events.adsInserts tracking event data from the VAST response. This data is reported within an EXT-X-DATERANGE ad marker tag whose class/scheme identifier is urn:uplynk:ad-data:events.
Example: timedmeta.events=complete,midpoint
timedmeta.extensions.adsInserts custom VAST extensions data. This data is reported within an EXT-X-DATERANGE ad marker tag whose class/scheme identifier is urn:uplynk:ad-data:data:extensions.
Example: timedmeta.extensions=waterfall,geo
timedmeta.schemas.adsInserts ad viewability data. This data is reported within an EXT-X-DATERANGE ad marker tag whose class/scheme identifier is urn:uplynk:ad-data:omsdk.
Example: timedmeta.schemas.ads=omsdk

Initiating a playback session with one of the above query string parameters includes the requested data from the ad node returned by the Preplay API within the manifest file. Information on how this data is inserted into the manifest file for HLS and DASH is provided below.

💡

Test your ad verification workflow by passing staticomsdk=1 as a query string parameter in the playback URL for the desired live event or live channel. This parameter, which inserts a static JSON payload into the manifest, cannot be used to test the ad verification workflow for VOD content.

📘

An ad marker tag (i.e., EXT-X-DATERANGE) will be inserted for each parameter defined in the playback URL. For example, if you specify both timedmeta.events.ads and timedmeta.extensions.ads, then two ad marker tags will be added to the manifest file.

📘

Timed metadata does not currently return data that allows a player to signal their position in a stream. This means that players must still use data from the Ping API to signal their position in a stream.

HLS

Inserts a Base64-encoded JSON payload into the X-DATA attribute of the EXT-X-DATERANGE tag of an HLS manifest.

Annotated HLS EXT-X-DATERANGE tag identifying the CLASS attribute, the START-DATE ad timestamp of January 1 1970, and the Base64-encoded JSON payload in X-DATA

For each ad, the START-DATE attribute of the EXT-X-DATERANGE tag will have the same value as the corresponding EXT-X-PROGRAM-DATE-TIME tag. The specified timestamp doesn't reflect playback time. Instead, the first ad in a stream will be assigned a timestamp of 1970-01-01T00:00:00+00:00. Each subsequent ad will be assigned a value that takes place after the previous ad.

DASH

For each ad, an <Event> node will be inserted within an <EventStream> node in that ad's period within the DASH manifest. This Event node will contain the JSON payload as shown below.

Annotated DASH manifest excerpt identifying the scheme identifier on the EventStream node, the unique start time on the Event node, and the ad verification JSON payload

In order to improve readability, a formatted version of the above sample JSON payload is provided below.

{
	"AdVerifications": [{
			"vendor": "iabtechlab.com-omid",
			"Verification": [{
					"browserOptional": "true",
					"apiFramework": "omid",
					"JavaScriptResource": "<![CDATA[https://s3-us-west-2.amazonaws.com/omsdk...]]>"
				}, {
					"VerificationParameters": "<![CDATA[iabtechlab]]>"
				}
			]
		}
	],
	"adID": "90000035",
	"creative": "ed85dfa6e5b74442a2df7d8bfe15bed5",
	"creativeID": null
}

Did this page help you?