Client-Side Beaconing Using Dynamic Manifest Markers
Fire ad beacons from the client using Dynamic Manifest Markers embedded in the streaming manifest.
Uplynk supports server-side ad beaconing for ads inserted via Server-Side Ad Insertion (SSAI). When client-side ad beaconing is desired, Uplynk recommends using Dynamic Manifest Markers (DMMs).
DMMs place ad break and beaconing information directly in the streaming manifest, eliminating the need for additional API calls. This approach works for both VOD and linear content.
Client-Side Beaconing Using Dynamic Manifest Markers
PreplayV2 DMM
To enable raw URLs for the client to fire for ad beacons in DMMs, add the following parameter to the Uplynk URL:
ad.timedmeta=1
This is referred to as the PreplayV2 DMM because it provides information similar to what the Preplay version of the Uplynk URL contains. Use the dmm.beacons.ads=quartiles parameter if only quartile information is required.
When using client-side beaconing, you must disable server-side ad beaconing by adding this parameter to the Uplynk URL:
ad.sssb=1
The ad.timedmeta=1 and ad.sssb parameters work for both VOD and linear modes of operation.
Break Info DMM
To retrieve ad and ad break information, use the Break Info DMM by including the following URL parameter:
dmm.schemas.break=break_info
This parameter provides details such as break and ad duration, break and ad index, and number of ads in the current break. For more information, see Ads.
DMM Schema
PreplayV2 DMM
Use the ad.timedmeta=1 URL parameter to include the beaconing DMM in your manifest.
Example:
https://content.uplynk.com/585f5a45f46c4fbc888e09d533878d54.mpd?ad=mock&ad.timedmeta=1
Schema:
{
"_duration": 0, The duration in seconds of the ad
"adID": "", Ad identifier
"adUnit": "",
"api": "",
"companions": [], List of companion ads that go with the ad
"creative": "", If applicable, indicates the creative to display
"creativeID": "", Identifier of the creative to display
"customer_events": { Events for this ad
"impressions": [...], Each event type contains an array of URLs
"midpoints": [...],
...
},
"duration": 0, The duration in seconds of the ad
"events": { Events for this ad (used for AdProxy)
"impressions_pks": [...], Each event type contains an array of pks
"midpoints_pks": [...],
...
},
"extensions": [...], Custom set of VAST extensions returned by the ad server
"fw_parameters": {}, FreeWheel only, creative params name-value pairs
"height": 0, If applicable, indicates the height of the creative
"mimeType": "", Indicates the ad's Internet media type
"omsdk_id": "", Open Measurement SDK identifier
"width": 0 If applicable, indicates the width of the creative
}Sample:
{
"_duration": 6.144,
"adID": "9000084",
"adUnit": "",
"api": "",
"companions": [],
"creative": "f7cd47d988ae46d7b5d11e034937691b",
"creativeID": "9000084",
"customer_events": {
"clickthroughs": [
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=d8a605b1-546f-4754-9c6d-277336014384&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=ClickThrough"
],
"clicktrackings": [
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=b523a2d9-24b2-42e8-b92f-dc765390cbb6&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=ClickTracking"
],
"completes": [
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=1f109b24-1125-444b-9912-c316c44e5e14&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=complete"
],
"firstquartiles": [
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=a834b195-10a6-4ae8-a1c3-94e48ef88842&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=firstQuartile"
],
"impressions": [
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=1b833dd2-26bd-4d2e-ac9a-de794ffab2f4&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=impression1",
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=4da0fc39-326e-4acd-b593-b071f1fd3033&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=start"
],
"midpoints": [
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=44e4db28-2dc0-4b99-bb18-bc93c5b7e4ff&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=midpoint"
],
"thirdquartiles": [
"https://mockbeacons.downlynk.net/record-impression/?adId=9000084&ads_type=gam&campaign=mock-gam-fallback&creativeId=9000084&guid=e9693ad1-9e81-45bb-b170-17df44e794d1&origin=initial&response_guid=705b4f4e-7442-4efe-91a4-906808d718c6&tracker=thirdQuartile"
]
},
"duration": 6.144,
"events": {
"clickthroughs_pks": [
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--clickthroughs-0"
],
"clicktrackings_pks": [
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--clicktrackings-0"
],
"completes_pks": [
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--completes-0"
],
"firstquartiles_pks": [
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--firstquartiles-0"
],
"impressions_pks": [
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--impressions-0",
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--impressions-1"
],
"midpoints_pks": [
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--midpoints-0"
],
"thirdquartiles_pks": [
"d0bfc96a-d97a-4925-8e67-17ad063bdd80-0-0--thirdquartiles-0"
]
},
"extensions": [
{
"AdVerifications": [
{
"AdVerifications": [
{
"Verification": [
{
"JavaScriptResource": "https://s3-us-west-2.amazonaws.com/omsdk-files/compliance-js/omid-validation-verification-script-v1.js",
"apiFramework": "omid",
"browserOptional": "true"
},
{
"VerificationParameters": "iabtechlab"
}
],
"vendor": "iabtechlab.com-omid"
}
]
}
]
},
{
"activeview": [
{
"CustomTracking": [
{
"Tracking": [],
"event": "abandon"
},
{
"Tracking": [],
"event": "viewable_impression"
}
]
}
]
},
{
"geo": [
{
"Bandwidth": "4"
},
{
"BandwidthKbps": "20000"
},
{
"Country": "US"
}
]
},
{
"metrics": [
{
"AdEventId": "2d678a2546fe69d04763c5f5"
},
{
"FeEventId": "2d678a2546fe69d04763c5f5"
}
]
},
{
"waterfall": [
{
"fallback_index": "0"
}
]
}
],
"fw_parameters": {},
"height": 720,
"mimeType": "uplynk/m3u8",
"omsdk_id": "3beaecb8101842e1b5dd2040ac803ef2",
"width": 1280
}HLS
The DMM appears in child manifests within the X-DATA field of #EXT-X-DATERANGE tags identified by the "urn:uplynk:ad-data:break_info" class:
#EXT-X-DATERANGE:ID="581cd8d9f2d9444a9174f8295d8072a1:0:0:break_info:ads",START-DATE="2023-09-11T23:29:04.655000+00:00",DURATION=15.1623,CLASS="urn:uplynk:ad-data:break_info",X-DATA="eyJhZF9kdXIiOiAxNS4xNjIzLCAiYWRfaW5kZXgiOiAwLCAiYWRfb2Zmc2V0IjogMC4wLCAiYWRfc2xhdGUiOiAwLCAiYnJlYWtfZHVyX2FjdCI6IDMwLjIwMjMsICJicmVha19kdXJfcmVxIjogMzcuNjc0NjY2NjY2NjY2NjcsICJicmVha19pbmRleCI6IDAsICJkbW1fZGF0YV9ub3RfcmVhZHkiOiAwLCAibnVtX2FkcyI6IDIsICJpZCI6ICI1ODFjZDhkOWYyZDk0NDRhOTE3NGY4Mjk1ZDgwNzJhMTowOjA6YnJlYWtfaW5mbzphZHMiLCAiY2xhc3MiOiAidXJuOnVwbHluazphZC1kYXRhOmJyZWFrX2luZm8iLCAic3RhcnREYXRlIjogIjIwMjMtMDktMTFUMjM6Mjk6MDQuNjU1MDAwKzAwOjAwIiwgImR1cmF0aW9uIjogMTUuMTYyM30="The following is a sample X-DATA field base64-decoded for the Break Info DMM:
{
"ad_dur":15.1623,
"ad_index":0,
"ad_offset":0.0,
"ad_slate":0,
"break_dur_act":30.2023,
"break_dur_req":37.67466666666667,
"break_index":0,
"dmm_data_not_ready":0,
"num_ads":2,
"id":"581cd8d9f2d9444a9174f8295d8072a1:0:0:break_info:ads",
"class":"urn:uplynk:ad-data:break_info",
"startDate":"2023-09-11T23:29:04.655000+00:00",
"duration":15.1623
}DASH
The Break Info DMM is added to the manifest in an EventStream with schemeIdUri="urn:uplynk:ad-data:break_info":
<EventStream schemeIdUri="urn:uplynk:ad-data:break_info" timescale="90000" value="ad-data">
<Event duration="2706253" id="9281250" presentationTime="0">
{
"ad_dur":30.069479166666678,
"ad_index":0,
"ad_offset":0.0,
"ad_slate":0,
"break_dur_act":30.069479166666678,
"break_dur_req":0.0,
"break_index":0,
"dmm_data_not_ready":0,
"num_ads":1
}
</Event>
</EventStream>The EventStream for this DMM contains only one Event and only occurs inside Ad Periods.
PreplayV2 and Break Info DMMs in DASH
- The PreplayV2 and Break Info DMMs each have their own
EventStream. - Each
EventStreamcontains only oneEvent. - PreplayV2 and Break Info
EventStreamsonly occur inside AdPeriods, which you can identify through theAssetIdentifierwithschemeIdUri="urn:com:uplynk:ad-asset-id". - An Ad
Periodcan contain a combination of PreplayV2 and Break InfoEventStreams. - For linear content, the DMMs flow into the manifest when an ad break is approaching and are included in the MPD during the live window.
PreplayV2 and Break Info DMMs in HLS
The following #EXT-X-DATERANGE fields are duplicated into the base64-encoded information in the X-DATA field and mapped as described below:
| # EXT-X-DATERANGE | DMM |
|---|---|
| ID | id |
| DURATION | duration |
| CLASS | class |
| START-DATE | startDate |
The following example uses a VOD asset with four ad breaks. Linear playback follows the same logic.
When you play the asset with URL parameters to include both the PreplayV2 and Break Info DMMs:
https://content.uplynk.com/7fdef903b77e41e2b4fff438c326b2e9.m3u8?ad=dummy&ad.timedmeta=1&dmm.schemas.break=break_info
The served manifests include both the PreplayV2 and Break Info DMMs for every ad. The DMMs appear after #EXT-X-DISCONTINUITY tags and before ad segments.
In this example, the four ad breaks are filled with six ads as follows:
- Ad Break 1 @ 00:00:50
- {"ad_index": 0, "break_index": 0, "num_ads": 2}
- {"ad_index": 1, "break_index": 0, "num_ads": 2}
- Ad Break 2 @ 00:01:42
- {"ad_index": 0, "break_index": 1, "num_ads": 1}
- Ad Break 3 @ 00:02:44
- {"ad_index": 0, "break_index": 2, "num_ads": 2}
- {"ad_index": 1, "break_index": 2, "num_ads": 2}
- Ad Break 4 @ 00:03:30
- {"ad_index": 0, "break_index": 3, "num_ads": 1}

Updated 23 days ago
