Manifest Server API for Ad Insertion

23
Adobe ® Primetime Manifest Server API for Ad Insertion 25 November 2015

Transcript of Manifest Server API for Ad Insertion

Page 1: Manifest Server API for Ad Insertion

Adobe® Primetime

Manifest Server API for Ad Insertion

25 November 2015

Page 2: Manifest Server API for Ad Insertion

Contents

Manifest Server API for Ad Insertion.....................................................................3

Overview of Manifest Server Interactions................................................................................3

Sending a Command to the Manifest Server..........................................................................4

Manifest Server Query Parameters............................................................................................................4

Ad Insertion Requests.............................................................................................................6

Optional Query Parameters by Client and Situation...................................................................................6

Multiple Bit Rate Streams...........................................................................................................................8

Overview of Replacing VOD Timelines....................................................................................8

VOD Timeline Format.................................................................................................................................8

Replacing VOD Timelines...........................................................................................................................9

Ad Tracking............................................................................................................................10

Enable Client-Side Ad Tracking................................................................................................................10

Overview of Non-TVSDK Client-Side Tracking.........................................................................................10

API for Non-TVSDK Players to Interact with the Manifest Server............................................................12

Video Player Requirements...................................................................................................13

About Cookies.......................................................................................................................13

Support for WebVTT Captions..............................................................................................13

JSON Format for URL for requesting Variant Manifest Playlist.............................................14

JSON Formats for Tracking URLs.........................................................................................14

Overview of EXT-X-MARKER Directive.................................................................................20

Manifest Server API for Ad InsertionLast updated 11/25/2015

Page 3: Manifest Server API for Ad Insertion

Manifest Server API for Ad Insertion

Overview of Manifest Server Interactions

The manifest server coordinates the systems that provide content, provide ads, play video, and track ads. It receivesM3U8-encoded playlists (manifests) that client video players receive from content providers, stitches in ads from adproviders, and passes those manifests, with ads stitched in, to video players. It supports both client-side andserver-side ad tracking. It conducts its interactions using an HTTP-based web service interface.

A typical configuration contains:

• The Primetime manifest server• The Primetime creative repackaging system (CRS)• A client, controlling a video player• A publisher, usually with a content management system• A content delivery network (CDN)• An ad server• A receiver for ad tracking reports

The workflow varies based on a number of factors, such as if the CDN is Akamai, or if the client is performing adtracking. For a diagram of the workflow for client-side ad tracking, see Client-Side Tracking Workflow.

The manifest server interacts with video-delivery clients by receiving and responding to HTTP GET requests. Theresponses are M3U8-encoded manifests describing ad-stitched content, optionally including a JSON structure(sidecar) containing detailed ad-tracking instructions (see JSON Formats for Tracking URLs).

A typical workflow looks like the following:

1. The publisher sends the content URL and information for the ad server to the client.

2. The client uses the information from the publisher to generate a manifest server URL and sends a GET requestto that URL.

3. The manifest server establishes a session with the client.4. The manifest server obtains content from the CDN, including information about where to place ad breaks.5. The manifest server passes the client-supplied information to the ad server and receives ads and ad-tracking

URLs from the ad server. If a supplied ad is not in HLS format, the manifest server sends it to CRS for conversionto that format.

6. The manifest server stitches ads into the playlist and sends the new playlist to the client as a file in M3U8 format.

Note: If the original request contained query parameter settings pttrackingmode=simple orptplayer=ios-mobileweb, the manifest server sends back a URL in a JSON structure (see JSON Formatfor URL for requesting Variant Manifest Playlist), and the client sends a GET request to that URL to obtainthe M3U8-format playlist.

7. The client plays the content with the stitched-in ads and sends reports at the specified times to the specifiedURLs.

Primetime ad insertion supports clients on many video-delivery platforms. Not all clients are built on the PrimetimeTVSDK package, but all clients send GET requests to the same basic URL. Query parameters distinguish onerequest from another; they tell the manifest server which kind of client it's talking to and what that client wants. Theytell the manifest server what sort of ad-tracking information to provide.

3Manifest Server API for Ad Insertion

25 November 2015

Page 4: Manifest Server API for Ad Insertion

The manifest server uses the cross-origin sharing standard (CORS). It looks for an Origin header in the requestsit receives. If the header is present, it replies with

• Access-Control-Allow-Origin: string from the Origin header• Access-Control-Allow-Credentials: true• Access-Control-Allow-Methods: GET

If not, it replies with:

• Access-Control-Allow-Origin: *• Access-Control-Allow-Methods: GET

Sending a Command to the Manifest Server

Use HTTP-based commands to interact with the manifest server.

Send an HTTP GET request to a URL constructed using the following pattern:

http://{manifest-server:port}/auditude/variant/ {PublisherAssetID}/{Content URL (base64)}.m3u8 ?{query parameters}

Required. Publisher's unique ID for the specific content.PublisherAssetID

Required. URL of the content M3U8 file, Base64 encoded to be safe within themanifest server URL. The content URL must point to a variant M3U8 file, even ifthere is only one bit rate stream.

Content URL

Some are required, some optional. These constitute the most varied part of therequest. They tell the manifest server which sort of client is making the requestand what it wants the manifest server to do.

Query parameters

For example:

http://manifest.auditude.com/auditude/variant/ {publisherAssetID}/{Content URL (base64)}.m3u8 ?u={Asset ID}&z={zone}&_sid_=0&pttrackingmode=simple&pttrackingversion=v2&live=false

Manifest Server Query Parameters

Query parameters tell the manifest server what sort of client sent the request and what that client wants the manifestserver to do. Some are required and some have specific acceptable formats or values.

The complete URL consists of the base URL followed by a question mark, then parameterName=value arguments,separated by ampersands:

Base URL?name1=value1&name2=value2& . . .&namen=valuen

Recognized Parameters

The manifest server recognizes the following parameters. It processes them or passes them, along with allunrecognized parameters, to the ad server.

Valid ValuesRequiredDescriptionKey

<MD5 Hash value >YesAsset ID.u

4Manifest Server API for Ad Insertion

25 November 2015

Page 5: Manifest Server API for Ad Insertion

Valid ValuesRequiredDescriptionKey

IntegerYesZone ID for the asset to beprovided to AdobePrimetime ad decisioning.

z

Alpha-numericYesUnique ID that the manifestserver uses to generate thesession ID.

__sid__

ios-mobilewebiOS/SafariPlayer making the request.ptplayer

true or falseAkamai, iOS/SafariStream is live (true) orVOD. (false).

live

simple, sstm, orsimplesstm

NoEnable ad tracking; eithercustom client-side (simple),server-side (sstm), or hybrid(simplesstm).

pttrackingmode

v1 or v2To enable customclient-side tracking

Custom client-side trackingversion.

pttrackingversion

DPISimple or DPIScte35For custom ad cuesThe Adobe-supplied nameof the custom ad cue format

ptcueformat

present in the raw live /linear M3U8.

<VOD timeline> (see VODTimeline Format)

NoBreak opportunities oroverrides for the contentstream.

pttimeline

true or falseNoThe client is in a C3window. If true, replace only

enableC3

local avails; otherwise,replace all avails.

<URL-safe string>AkamaiUnique ID of the content ,assigned and maintained bypublisher.

ptassetid

0 to 1800No (default = 1800)Duration (seconds) of adstitching window: how far

ptadwindow

back to look for ads when aDVR user joins the stream.

AkamaiAuto-generated by adinsertion and used by

ptrendition

Akamai. Do not add orremove.

true or falseFor TS segmentauthorization tokens

Enable TS segmentauthorization tokens

pttoken

See list at Client TypesWhen targeting rulesdepend on device type

Client device typeg

<URL-safe string> in formatkey1=value1;key2=value2;.

. .

NoKeywords for customtargeting

k

5Manifest Server API for Ad Insertion

25 November 2015

Page 6: Manifest Server API for Ad Insertion

Ad Insertion Requests

All requests for ad insertion use the same URL structure and the same basic query parameters. Additional queryparameters enable the manifest server to work with a variety of clients and situations.

The basic query parameters are u, z, and _sid_.

The asset ID, u, tells the manifest server which content to stitch the ads into, so it can obtain appropriate ads fromthe ad server. The asset ID is the MD5 hash of the ad_request_id from the Adobe Primetime ad decisioningmetadata.

The ad server and zone ID determine which ads the manifest server stitches into your content. When configuringthe ad insertion system for a personal web server (PWS), you specify an Adobe Primetime ad decisioning account,which determines the ad server that the manifest server uses with that PWS.You cannot change ad servers.Youalso specify a default zone ID.You can use that value for z or supply a different one.

The manifest server maintains sessions for individual clients or groups of clients to ensure that the sequences ofAPI interactions for different clients stay separate. The _sid_ that you send initially to the manifest server shouldbe unique within your environment. The manifest server uses it to construct a globally unique ID, which it sendsback to you.

The remaining query parameters pertain to different clients and situations.

Optional Query Parameters by Client and Situation

Beyond the basic query parameters, optional query parameters enable the manifest server to work with differentclients and situations.

Ad Insertion with Akamai

When the Akamai edge server acts as the content delivery network (CDN), it works as an intermediary between theclient and the manifest server. In this case the ptassetid and live query parameters provide required informationto Akamai.

The ptassetid parameter is the publisher's ID for its asset. Akamai uses this, rather than the base64-encoded URLthat you supply as part of the request URL, to identify the playlist to provide to the manifest server for ad insertion.

The live parameter distinguishes between live content and video on demand (VOD). The manifest server needsthis information to support its streamlined interface with Akamai.

Here is a sample URL showing the parameters that pertain to Akamai:

http://. . .master.m3u8?. . .&ptassetid=pubAsset&live=true

Ad Insertion from TVSDK on Xbox

A player based on Primetime TVSDK on Xbox need not supply any additional query parameters beyond the basicones.

Ad Insertion from TVSDK on Roku

A player based on Primetime TVSDK on Roku need not supply any additional query parameters beyond the basicones.

6Manifest Server API for Ad Insertion

25 November 2015

Page 7: Manifest Server API for Ad Insertion

Ad Insertion from TVSDK on iOS with Safari

A player based on Primetime TVSDK on iOS using the Safari browser must specify the ptplayer and live parametersin addition to the basic query parameters.

The manifest server recognizes the ptplayer value ios-mobileweb and eliminates the pre-roll from the ad-stitchedmanifest it returns.

The live parameter tells the manifest server whether to return live or VOD content.

Here is a sample URL showing the parameters that pertain to iOS with Safari:

http://. . .master.m3u8?. . .&ptplayer=ios-mobileweb&live=false

Ad Insertion Using a Custom Ad Cue Format

Adobe provides names for ad cue formats that it does not support directly in the Primetime package. To use sucha format, supply its Adobe-provided name as the value of the ptcueformat parameter.

Here is a sample URL specifying a custom ad cue format:

http://. . .master.m3u8?. . .&ptcueformat=[custom format name]

Ad Insertion Using Ad Cues to Create a FreeWheel Timeline for VOD

For VOD content containing ad cues to be parsed and included in a FreeWheel ad request, set the value of theptcueformat parameter to DPIsimple.

Here is a sample URL that specifies using a FreeWheel timeline for VOD:

http://. . .master.m3u8?. . .&ptcueformat=DPISimple&live=false

Ad Insertion Using a Custom Timeline for VOD

To ask the manifest server to insert ads into VOD content according to a timeline you supply, set the value of thepttimeline parameter to a string specifying the timeline. See VOD Timeline Format.

Here is a sample URL that uses a custom timeline for VOD:

http://. . .master.m3u8?. . .&live=false&pttimeline=B,60,2,p;C,120,1;B,30,2,m;C,300,1

It specifies an initial break of one minute containing up to two ads, followed by a two-minute content segment,followed by a 30-second break containing up to two ads, followed by a five-minute content segment.

Ad stitching for a custom content timeline for VOD content behaves as follows:

• The ad appears at the closest break boundary after the ad placement time specified by the ad server.

• Segments are at least two seconds long.

Authorizing TS Segments

HTTP live streaming (HLS) delivers transport stream (TS) segments using a variant stream-level M3U8 playlist.Theclient picks one playlist stream from the variant list, then downloads its TS segments one-by-one. In normal operation,the requested content can require cookie authorization, which the manifest server handles invisibly in the background.It extracts the cookie from the raw content and appends an appropriate token to the URL to be used in requestingthe selected playlist stream.

When the initial query parameters include pttoken=true, the publisher requires a cookie to be used in requestingeach TS segment, rather than just once for the whole stream. The manifest server attaches the cookie as a queryparameter to each TS segment URL in the stream playlist it sends back.

7Manifest Server API for Ad Insertion

25 November 2015

Page 8: Manifest Server API for Ad Insertion

Multiple Bit Rate Streams

Client requests for ad insertion typically specify more than one bit rate in the M3U8-formatted playlist. The manifestserver generates and returns a new M3U8 file containing a separate M3U8 link for each bit rate. It also generatesa unique group ID to tie these M3U8s together.

The client uses the links returned by the manifest server to construct ad insertion requests in the following format:

http://manifest.auditude.com/auditude/{live/vod}/{publisherAssetID}/{rendition}/ {groupID}/{base64-encoded url of the bit rate stream}.[m3u8]?{Query parameters}

The ptassetid parameter is specific to Akamai and functions like publisherAssetID.

The manifest server sets {live/vod}.

The manifest server sets {publisherAssetID} to an ID assigned by the publisher. It is different from the asset IDspecified in the u query parameter.

The manifest server sets {base64-encoded url of the bit rate stream}. Each stream has its own URL.

The manifest server sets {rendition} and uses it to match the bit rate of the ad to the bit rate of the content. Thebit rate of the ad cannot exceed the bit rate of the content unless the ad rendition with the lowest bit rate does so.

The manifest server sets {groupID} and uses it to ensure that it places ads consistently, no matter which bit raterenditions the client requests ads for.

The client sets {Query parameters}. They are the same as for other ad insertion requests.

Overview of Replacing VOD Timelines

The ad timeline appropriate to one playing of VOD content may be inappropriate for subsequent plays.You canreplace a VOD timeline without changing the content.

Situations in which you might wish to replace a VOD timeline include:

• Replace local ads, but leave national ads during a C3 window.• Replace burnt-in ads after the C3 window closes.• Dynamically replace old C3 ads with newer ads of greater duration.• Insert fewer ads or none at all.

You can replace the ad timeline by submitting a new ad insertion request with the original M3U8 file and a differentvalue of the pttimeline query parameter.

VOD Timeline Format

You can specify or override timelines for ad breaks in VOD content using a formatted list of ad and content segmentscalled pods.

Pods

A timeline consists of a sequence of pods, separated by semicolons. A pod is a content segment or an ad break.The following types of pods exist:

8Manifest Server API for Ad Insertion

25 November 2015

Page 9: Manifest Server API for Ad Insertion

B,duration,maximum_number_of_ads,positionAd Break

Duration is in seconds, with precision of .001 (milliseconds); number of ads is an integer.Position is one of the following:

None — no adn

Pre-ad — before the contentp

Mid-ad — within the contentm

Post-ad — after the contentt

For example, B,60,2,p represents a one-minute break for up to 2 ads before the content.

C,duration,number_of_lotsContent segment(chapter)

Duration is in seconds, with precision of .001 (milliseconds); number of lots (sections ofcontent) is an integer. For example, C,300,1 represents a single five-minute section ofcontent.

Replacing VOD Timelines

Replace a VOD timeline by sending a new ad insertion request to the manifest server with an appropriately setpttimeline query parameter.

1. Prepare an ad insertion request in the usual manner.

2. Set the ptcueformat query parameter to DPIScte35.

3. Set the enableC3 query parameter to true or false as appropriate.

4. Create a pttimeline parameter using the VOD timeline format:

a) Specify each content block (chapter) with duration = 0 and number_of_lots = 1.b) Specify each ad block as usual, but set lots = 0 to remove a break. Set duration = 0 to use the ad break's

duration (from the M3U8 file).

Example: Replacing a VOD Timeline

This example assumes the VOD content is in Original.m3u8 with a timeline ofC,120,1;B,60,2,m;C,120,1;B,60,2,m;C,120,1;

The following manifest server request replaces the breaks in Original.m3u8 with a 30-second pre-roll, followed bytwo breaks of duration two minutes each.

http://manifest.auditude.com/auditude/variant/pubAsset/Original.m3u8?. . .&enableC3=false&pttimeline=B,30,2,p;C,0,1;B,120,4,m;C,0,1;B,120,4,m;C,0,1;

The following manifest server request removes the breaks in Original.m3u8 and adds a 30-second pre-roll and a30-second post-roll.

http://manifest.auditude.com/auditude/variant/pubAsset/Original.m3u8?. . .&enableC3=false&pttimeline=B,30,2,p;C,0,1;B,0,0,m;C,0,1;B,0,0,m;C,0,1;B,30,2,t;

9Manifest Server API for Ad Insertion

25 November 2015

Page 10: Manifest Server API for Ad Insertion

Ad Tracking

Most advertisers require more or less detailed information about when, for how long, and how successfully their adswere viewed.The most efficient approach is to have the client player send reports as it plays the ads, but the manifestserver also supports server-side and hybrid ad tracking.

When enabling ad tracking the client specifies one of the following approaches:

Along with the ad-stitched playlist, the server sends the client a JSON structure specifyingwhich events to report and which URLs to send those reports to.

Client Side

The client does not participate in ad tracking. The server sends whatever ad trackinginformation it can.

Server Side

This is like client-side tracking, but the client sends its reports to the manifest server, whichrelays them to the appropriate URLs. Advertisers receive the same information as with clientside tracking. This mode accommodates clients running with restricted internet access.

Hybrid

Enable Client-Side Ad Tracking

If your client software is not based on TVSDK, you can still enable client-side ad tracking by adding thepttrackingmode and pttrackingversion parameters to your manifest server request URL.

Client-side tracking is simplest when the client software includes Primetime TVSDK, because TVSDK and themanifest server already know how to interact. With client-side ad tracking enabled, you can also retrieve ad trackingmetadata using the Tracking API URL. For more details see Query Parameters.

To perform client-side ad tracking, use the tracking API URL.

Add the following query parameters to the manifest server request URL:

• pttrackingmode=simple• pttrackingversion={JSON format version}

For example:http://. . .?. . .&pttrackingmode=simple&pttrackingversion=v1

Overview of Non-TVSDK Client-Side Tracking

Publishers using devices that are not based on TVSDK can build video players that work with the Primetime manifestserver to enable client-side ad tracking.The interfaces to the manifest server for the live stream and video on demand(VOD) cases are slightly different.

The manifest server provides an API to enable custom players to request the following URLs, which they can useto report ad tracking events:

• Ad Impression

• Ad Quartile

• Ad pod progress

• Content pod progress

The manifest serverr API assumes that any video player using it meets the minimum requirements for doing so.

10Manifest Server API for Ad Insertion

25 November 2015

Page 11: Manifest Server API for Ad Insertion

Client-Side Tracking Workflow

The numbers in the diagram correspond to the sequence of interactions between the publisher's website or CMSand the player and between the player and the manifest server.

1. Player obtains a bootstrap manifest server URL from the publisher. The URL includes the elements describedin Sending a Command to the Manifest Server.

http://{manifest-server:port}/auditude/variant/ {PublisherAssetID}/{Content URL (base64)}.m3u8 ?{query parameters}

Required. Publisher's unique ID for the specific content.PublisherAssetID

Required. URL of the content M3U8 file, Base64 encoded to be safe within themanifest server URL. The content URL must point to a variant M3U8 file, even ifthere is only one bit rate stream.

Content URL

Some are required, some optional. These constitute the most varied part of therequest. They tell the manifest server which sort of client is making the requestand what it wants the manifest server to do.

Query parameters

For example:

http://manifest.auditude.com/auditude/variant/ {publisherAssetID}/{Content URL (base64)}.m3u8 ?u={Asset ID}&z={zone}&_sid_=0&pttrackingmode=simple&pttrackingversion=v2&live=false

2. Player adds query parameters to the bootstrap manifest server URL and sends an HTTP GET request to theresulting URL. For example:

http://{manifest-server:port}/{containerID}/{StreamModuleID}/{publisherAssetID}/ {Base 64 of the url of the content}.m3u8?_sid_={random number} &u={Ad Request Id} &z={Ad Zone Id} &pttrackingmode=simple &pttrackingversion=v1 &{Any other query parameters}

11Manifest Server API for Ad Insertion

25 November 2015

Page 12: Manifest Server API for Ad Insertion

3. The manifest server establishes a session for that player and generates a unique session ID. It creates a newvariant manifest URL, which it returns to the player as a JSON response to the HTTP request. The format of theJSON response appears in .

4. Player uses the URL from the JSON response to request a new variant M3U8 master playlist.

5. The manifest serverr provides a new variant M3U8, from which the player selects the appropriate single bit ratemanifest URL for playing the ad-stitched content. For example, the M3U8 returned by the manifest server mightlook like the following:

#EXTM3U#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000http://{manifest-server:port}/{containerID}/{StreamModuleID}/{publisherAssetID}/ 400/59b95e69-7dbd-46bc-bfca-2962fe48c37d/{Base 64 of the url of the 400kbps content}. [m3u8]?u={Ad Request Id}&z={Ad Zone Id}&{Any other query parameters}#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000http://{manifest-server:port}/{containerID}/{StreamModuleID}/{publisherAssetID}/ 700/59b95e69-7dbd-46bc-bfca-2962fe48c37d/{Base 64 of the url of the 700kbps content}. [m3u8]?u={Ad Request Id}&z={Ad Zone Id}&{Any other query parameters}#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000http://{manifest-server:port}/{containerID}/{StreamModuleID}/{publisherAssetID}/ 1000/59b95e69-7dbd-46bc-bfca-2962fe48c37d/{Base 64 of the url of the 1000kbps content}. [m3u8]?u={Ad Request Id}&z={Ad Zone Id}&{Any other query parameters}

6. Player modifies the selected URL as follows to request tracking information:

• Add the query parameter pttrackingposition to indicate that it wants tracking information only.

• (Live stream only) Set the value of the query parameter pttrackingposition to the absolute time of thesegment being played.

• Change the filename extension in the request from .m3u8 to .json.

As the video plays, the player tracks the playhead position and sends requests to the tracking URLs it received fromPrimetime ad insertion.

The tracking URLs that the player must send requests to are grouped by time offset from the beginning of play. Foreach time offset, there is a URL for each ad system to which to send tracking information. Additional details of theformat differ between live video and video on demand.

API for Non-TVSDK Players to Interact with the Manifest Server

To implement a video player without using the Primetime TVSDK package, use the optional pttrackingmode,pttrackingversion, and pttrackingposition query parameters to obtain URLs to which to send ad trackinginformation about the current video. The responses vary with the tracking version and whether the video stream islive or on demand.

Query Parameters

Example: pttrackingmode=simplepttrackingmode

Specifying simple tells the manifest server that you want tracking information.

Specify it on a request to fetch the M3U8 before you request tracking information. When youdon't specify it, or specify a value other than simple, you do not receive tracking information.

Example: pttrackingversion=v2pttrackingversion

12Manifest Server API for Ad Insertion

25 November 2015

Page 13: Manifest Server API for Ad Insertion

This parameter tells the manifest server which format to use to return tracking information(see JSON Formats for Tracking URLs).

Specify it on a request to fetch the M3U8 before you request tracking information. When youdon't specify it, or specify an invalid value, the manifest server uses v1.

Example: pttrackingposition=3.001pttrackingposition

This parameter tells the manifest server to return tracking information for the specified timeposition (in seconds) of the video as a JSON file.

For video on demand, the manifest server ignores the specified value and sends all of thetracking information it has for that session.

For live streams, the value is the absolute time of the segment being played, as obtained byquerying the video engine. When the value falls within the time range for which the manifestserver has stored tracking information, the manifest server returns that information. If thestored time range does not contain tracking information (for example, there are no ad breakswithin that time range, or they were not filled), the returned JSON file contains no trackinginformation.

The manifest server returns an HTTP 204 error if it does not have tracking information forthe specified range.

Video Player Requirements

All video players, whether based on TVSDK or not, must provide capabilities that the manifest server relies on toinsert ads and to enable ad tracking.

To use the Primetime ad insertion API, a video player must satisfy the following:

• Can track playhead position as content is played back.

• Can request tracking URLs at the times specified.

• Runs on a device platform that supports HLS v3 or later and supports PTS discontinuities, as marked byEXT-X-DISCONTINUITY tags.

• Runs on a platform that supports HTTP redirects and parsing JSON.

About Cookies

Primetime ad insertion neither sets nor relies on cookies, but it may help third-party ad servers to do so.

Primetime ad insertion does not set client cookies, nor does it rely upon client cookies for operation. It may, however,relay cookies from third-party ad servers to and from clients to enable features like frequency capping and ad loadmanagement. Primetime ad insertion does not record or keep the contents of such cookies.

Support for WebVTT Captions

The manifest server supports publisher-enabled WebVTT captions for all HLS video formats. When it receivesrequests to insert ads into WebVTT captioned content, it does so correctly.

13Manifest Server API for Ad Insertion

25 November 2015

Page 14: Manifest Server API for Ad Insertion

If the publisher includes WebVTT captions in the content, the manifest server sends the client a content stream withcaptions. WebVTT must be enabled by the publisher for the manifest server to support captions. When the clienthas WebVTT captions enabled, and sends a request to the manifest server, the manifest server manipulates thetimeline and WebVTT track and returns content with stitched ads and captions to the client.

The workflow for VOD content streams is as follows:

1. The client sends a content stream with WebVTT captions enabled to the manifest server.2. The manifest server manipulates the timeline to stitch ads into the content stream.3. The manifest server manipulates the WebVTT track to add captions to the content (including ads).4. The manifest server delivers the content stream to the client, with inserted ads and captions.

Note: If a WebVTT caption segment falls within a mid-roll ad, the viewer sees that caption play before andafter that mid-roll ad break. For example, in a 10-second caption segment with a 30-second mid-roll ad at the5-second mark, the viewer sees that caption segment for 5 seconds before the mid-roll ad break, and for 5seconds after the mid-roll.

Note: If a client requests that a video play in a specific language such as English, and then requests to playthe video in French, manifest server cannot detect that the client requested to change the language to French.Because the client doesn't communicate with the manifest server, the manifest server inserts the ad captioninto the video stream using the first language specified in the ad's M3U8 master file.

JSON Format for URL for requesting Variant Manifest Playlist

If pttrackingmode=simple or ptplayer=ios-mobileweb, the manifest server sends back a JSON-formatted filecontaining Master-M3U8, a URL for the client to use to request the M3U8 file describing the content.

This is the format of the JSON file containing the Master-M3U8 URL.

{"Master-M3U8": "http://manifest.auditude.com/auditude/variant/{publisherAssetID}/ {sessionId}/{Base 64 of the url of the content}.m3u8 ?u={Ad Request Id} &z={Ad Zone Id} &pttrackingmode=simple &pttrackingversion=v1 &{other query parameters}"}

JSON Formats for Tracking URLs

If the client requests tracking information, the manifest server sends back a JSON-formatted file. Its format andcontents depend on the value of the query parameter pttrackingversion

JSON Format for Tracking Version 1

The JSON file that the manifest server sends if pttrackingversion=v1 has the following general format:

{"start" : <start-time-of-first-sample-of-playback>,"end" : <end-time-of-last-sample-of-playback>,"adtracking" : [ {"time": <time-offset-relative-to-beginning-of-playback>,"trackingurls":[{

14Manifest Server API for Ad Insertion

25 November 2015

Page 15: Manifest Server API for Ad Insertion

"adsystem": <ad-system-of-url1>, "url" : <url1> }, { "adsystem": <ad-system-of-url2>, "url" : <url2> }, ...]}, ...]}

JSON Format for Tracking Version 2

The JSON file that the manifest server sends if pttrackingversion=v2 has the format of the following example,which comes from a typical JSON block. It has been shortened to avoid unnecessary repetition, so that the structureis clearer. An ellipsis (three dots, separated by spaces) indicates omitted information within some URLs and betweensome code blocks. Unshortened URLs appear on multiple lines, though they appear on a single line in the JSONfile.

{ "startTime" : 0.0, "endTime" : 362.508, "pods" : [ { "id" : "0", "startTime" : 0.0, "duration" : 60.0, "ads" : [ { "id" : "308150", "startTime" : 0.0, "duration" : 15.0, "companions" : [ { "id" : "103", "width" : 300, "height" : 250, "resourceType" : "static", "mimeType" : "image/jpeg", "url" : "http://a.newsinc.com/1103/1299867365505_Ford_2011_Library_default_300x250.jpg",

"trackingUrls" : [ { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/z=147611; u=19287a324825cc5aacb7e46183c72324; uid=ixutzMD0Se6OSWEmWT1ZdQ;cid=1785961691;s=6c7940cd;t=1429813545;br=1;sq=1;

pod=id%3a1%2cctype%3al%2cptype%3ap%2cdur%3a60%2clot%3a1%2ccpos%3a1; ax=0%2c0%2c0%2c0;w=2000;a=308150;a1=103/c300x250.jpeg" }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "clickThrough", "url" : "http://example.com?ClickThrough" } ] }, { "id" : "102", "width" : 300, "height" : 250, "resourceType" : "iframe", "mimeType" : "text/html", "url" : "http://ad.qa.auditude.com/adserver/s/a1=102;a=308150;w=2000;z=147611; u=19287a324825cc5aacb7e46183c72324; uid=ixutzMD0Se6OSWEmWT1ZdQ;cid=1785961691;s=6c7940cd;t=1429813545;br=1;sq=1;

pod=id%3a1%2cctype%3al%2cptype%3ap%2cdur%3a60%2clot%3a1%2ccpos%3a1; ax=0%2c0%2c0%2c0/c300x250.html", "trackingUrls" : [ { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "creativeView",

15Manifest Server API for Ad Insertion

25 November 2015

Page 16: Manifest Server API for Ad Insertion

"url" : "http://ad.qa.auditude.com/adserver/i/z=147611;u=19287a324825cc5aacb7e46183c72324; uid=ixutzMD0Se6OSWEmWT1ZdQ;cid=1785961691;s=6c7940cd;t=1429813545;br=1;sq=1;

pod=id%3a1%2cctype%3al%2cptype%3ap%2cdur%3a60%2clot%3a1%2ccpos%3a1; ax=0%2c0%2c0%2c0;w=2000;a=308150;a1=102/c300x250.html" }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "clickThrough", "url" : "http://example.com?ClickThrough" } ] } ], "trackingUrls" : [ { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "impression", "url" : "http://ad.qa.auditude.com/adserver/e?type=adimp &cid=1785961691&z=147611&a=308150&s=6c7940cd&t=1429813545&w=2000 &uid=ixutzMD0Se6OSWEmWT1ZdQ&u=19287a324825cc5aacb7e46183c72324 &br=1&sq=1&pod=id:1,ctype:l,ptype:p,dur:60,lot:1,cpos:1&ax=0,0,0,0" }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS &a=308150&a1=105&ref=urn:asset:308150:105&unit=percent&progress=0 &cid=1785961691&z=147611&a=308150&s=6c7940cd&t=1429813545&w=2000 &uid=ixutzMD0Se6OSWEmWT1ZdQ&u=19287a324825cc5aacb7e46183c72324 &br=1&sq=1&pod=id:1,ctype:l,ptype:p,dur:60,lot:1,cpos:1&ax=0,0,0,0" }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad4.qa.auditude.com/test.txt?set=1&adprogress=0" }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/z=147611; . . ." }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "impression", "url" : "http://ad.qa.auditude.com/adserver/e?type=adimp& . . ." }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/; . . ." }, { "startTime" : 0.0, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." }, { "startTime" : 3.75, "adSystems" : "Auditude", "event" : "first", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." }, { "startTime" : 3.75, "adSystems" : "Auditude", "event" : "first", "url" : "http://ad4.qa.auditude.com/test.txt?set=1&adprogress=25" }, { "startTime" : 3.75, "adSystems" : "Auditude", "event" : "first",

16Manifest Server API for Ad Insertion

25 November 2015

Page 17: Manifest Server API for Ad Insertion

"url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." },

. . .

{ "startTime" : 15.0, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." }, { "startTime" : 15.0, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad4.qa.auditude.com/test.txt?set=1&adprogress=100" }, { "startTime" : 15.0, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." } ] },

. . .

{ "id" : "308128", "startTime" : 213.0, "duration" : 15.0, "companions" : [ ], "trackingUrls" : [ { "startTime" : 213.0, "adSystems" : "Auditude", "event" : "impression", "url" : "http://ad.qa.auditude.com/adserver/e?type=adimp . . ." }, { "startTime" : 213.0, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." }, { "startTime" : 213.0, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad4.qa.auditude.com/test.txt?set=1&adprogress=0" }, { "startTime" : 213.0, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/z=147611; . . ." }, { "startTime" : 213.0, "adSystems" : "Auditude", "event" : "impression", "url" : "http://ad.qa.auditude.com/adserver/e?type=adimp& . . ." }, { "startTime" : 213.0, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/;uid=mbAXWlBCTsai4x_FbjJycg;

u=4316135f47263eee860b2174fecd3bba;t=1429813545;s=115f9058;z=147612;cid=2050307395;br=5;

pod=id:5,ctype:l,dur:120,lot:6,cpos:3;sq=5;ax=0,0,0,0;a1=105;a=308133;w=1000/c0x0" }, { "startTime" : 213.0, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ."

17Manifest Server API for Ad Insertion

25 November 2015

Page 18: Manifest Server API for Ad Insertion

},

. . .

{ "startTime" : 228.0, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." }, { "startTime" : 228.0, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad4.qa.auditude.com/test.txt?set=1&adprogress=100" }, { "startTime" : 228.0, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . ." } ] },

. . .

{ "id" : "102", "width" : 300, "height" : 250, "resourceType" : "iframe", "mimeType" : "text/html", "url" : "http://ad.qa.auditude.com/adserver/s/a1=102;a=307893;w=1500;z=147611; u=894a4267cd8f1e648eb0bdf878ce3f0a;uid=FmuZ2UwpSjmtBjMc7yLtzw; cid=159311145;s=cd097e73;t=1429813545;br=1;sq=1; pod=id%3a1%2cctype%3al%2cdur%3a80%2clot%3a1%2ccpos%3a1; ax=0%2c0%2c0%2c0/c300x250.html", "trackingUrls" : [ { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/z=147611; u=894a4267cd8f1e648eb0bdf878ce3f0a;uid=FmuZ2UwpSjmtBjMc7yLtzw; cid=159311145;s=cd097e73;t=1429813545;br=1;sq=1; pod=id%3a1%2cctype%3al%2cdur%3a80%2clot%3a1%2ccpos%3a1; ax=0%2c0%2c0%2c0;w=1500;a=307893;a1=102/c300x250.html" }, { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "clickThrough", "url" : "http://www.example.com?clickThrough" } ] } ], "trackingUrls" : [ { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "impression", "url" : "http://ad.qa.auditude.com/adserver/e?type=adimp&cid=159311145 &z=147611&a=307893&s=cd097e73&t=1429813545&w=1500&uid=FmuZ2UwpSjmtBjMc7yLtzw

&u=894a4267cd8f1e648eb0bdf878ce3f0a&br=1&sq=1 &pod=id:1,ctype:l,dur:80,lot:1,cpos:1&ax=0,0,0,0" }, { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS . . ." }, { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "start",

18Manifest Server API for Ad Insertion

25 November 2015

Page 19: Manifest Server API for Ad Insertion

"url" : "http://ad4.qa.auditude.com/test.txt?set=1&adprogress=0" }, { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/z=147611; u=894a4267cd8f1e648eb0bdf878ce3f0a;uid=FmuZ2UwpSjmtBjMc7yLtzw; cid=159311145;s=cd097e73;t=1429813545;br=1;sq=1; pod=id%3a1%2cctype%3al%2cdur%3a80%2clot%3a1%2ccpos%3a1; ax=0%2c0%2c0%2c0;w=1500;a=307893;a1=105/c512x272.mp4" }, { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "impression", "url" : "http://ad.qa.auditude.com/adserver/e?type=adimp& . . ." }, { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "creativeView", "url" : "http://ad.qa.auditude.com/adserver/i/; . . ." }, { "startTime" : 347.508, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS& . . .0" },

. . .

{ "startTime" : 362.508, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad4.qa.auditude.com/test.txt?set=1&adprogress=100" }, { "startTime" : 362.508, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS &a=307885&a1=105&ref=urn:asset:307885:105&unit=percent&progress=100 &uid=mbAXWlBCTsai4x_FbjJycg&u=4316135f47263eee860b2174fecd3bba&t=1429813545 &s=115f9058&z=147612&cid=2050307395&br=7&pod=id:7,ctype:l,dur:120,lot:6,cpos:4

&sq=6&ax=0,0,0,0" } ] } ], "trackingUrls" : [ { "startTime" : 302.508, "adSystems" : "Auditude", "event" : "start", "url" : "http://ad.qa.auditude.com/adserver/e?type=podprogress&event=start

&uid=mbAXWlBCTsai4x_FbjJycg&u=4316135f47263eee860b2174fecd3bba&t=1429813545&s=115f9058 &z=147612&cid=2050307395&br=7&pod=id:7,ctype:l,dur:120,lot:6,cpos:4" }, { "startTime" : 362.508, "adSystems" : "Auditude", "event" : "complete", "url" : "http://ad.qa.auditude.com/adserver/e?type=podprogress&event=complete &uid=mbAXWlBCTsai4x_FbjJycg&u=4316135f47263eee860b2174fecd3bba&t=1429813545 &s=115f9058&z=147612&cid=2050307395&br=7&pod=id:7,ctype:l,dur:120,lot:6,cpos:4"

} ] } ]}

19Manifest Server API for Ad Insertion

25 November 2015

Page 20: Manifest Server API for Ad Insertion

Overview of EXT-X-MARKER Directive

The manifest server returns master playlists in M3U8 format, conforming to the proposed HTTP Live Streamingstandard. It consists of a set of variant transport streams (TSs), each containing renditions of the same content fordifferent bit rates and formats. Adobe Primetime ad insertion adds the EXT-X-MARKER directive tag, to be interpretedby client video players.

The draft standard at HTTP Live Streaming describes the contents and format of variant playlists.The EXT-X-MARKERtag directs the client to invoke a callback. It contains the following components:

Unique identifier (string) for this callback event within the context of the program stream.ID

Type (string) of the callback event: PodBegin, PodEnd, PrerollPodBegin, PrerollPodEnd,AdBegin, or AdEnd

TYPE

Length of time (in seconds) from the start of the segment carrying the tag for which thedirective remains valid.

DURATION

Optional. The offset (in seconds) relative to the beginning of the segment playback, whenthe callback must be invoked.

OFFSET

Base64-encoded string enclosed in double quotes containing the data to pass to theapplication when invoking the callback. It contains ad tracking information that conforms toVMAP1.0 and VAST3.0 specifications.

DATA

When constructing the callback, interpret the EXT-X-MARKER components as follows:

• When the tag contains OFFSET, fire the callback at the specified offset relative to the beginning of content playbackin that segment. Otherwise, fire the callback as soon as the content in that segment starts playing.

• Use DURATION to track the ad content's progress and to request URLs for tracking events.

• Pass ID, TYPE, and DATA to the callback.

Use the PrerollPodBegin, and PrerollPodEnd values for TYPE to decide which TS segment to play first in live/linearstreams.

The manifest server includes EXT-X-MARKER tags in the following segments:

• The first segment in the ad break, to track the beginning of an ad pod.

• The first segment of the ad, to track the start/complete/progress of an individual ad within an ad pod.

• The last segment in the ad break, to track the end of an ad pod.

The manifest server sends a VMAP1.0-conformant XML document to track the start and end of each ad break. It isa filtered version of the actual VMAP1.0 response returned by the ad server, and primarily contains the trackingevents as shown here:

<?xml version="1.0"?><AdTrackingFragments><AdTrackingFragment><vmap:VMAP xmlns:vmap="http://www.iab.net/vmap-1.0" version="1.0"> <vmap:AdBreak breakType="linear" breakId="mypre" timeOffset="start"> <vmap:TrackingEvents> <vmap:Tracking event="breakStart"> http://MyServer.com/breakstart.gif </vmap:Tracking> <vmap:Tracking event="breakEnd"> http://MyServer.com/breakend.gif </vmap:Tracking> <vmap:Tracking event="error"> http://MyServer.com/error.gif

20Manifest Server API for Ad Insertion

25 November 2015

Page 21: Manifest Server API for Ad Insertion

</vmap:Tracking> </vmap:TrackingEvents> </vmap:AdBreak></vmap:VMAP></AdTrackingFragment></AdTrackingFragments>

For each ad creative the manifest server inserts into the program content, it sends a VAST3.0-conformant XMLdocument to track that ad. Each XML document contains an <InLine> element describing the linear ad creativeinserted, or a <Wrapper> element in the case of wrapper ads (that is, linked or redirected ads), and any associatedcompanion ads and extensions. If the VAST response contains a sequence attribute, such as when the ad is partof an ad pod, the document includes that attribute. The following is a sample VAST3.0-conformant XML documentfor tracking an individual ad:

<?xml version="1.0"?><AdTrackingFragments><AdTrackingFragment><VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" xsi:noNamespaceSchemaLocation="http://service.videoplaza.com/schema/iab/vast-3.0.xsd"><Ad id="903395"> <InLine> <AdSystem version="1.0">Auditude</AdSystem> <AdTitle/> <Error>http://ad.qa.auditude.com/adserver/?ErrAd1=[ERRORCODE]</Error> <Impression id="urn:aeid:903395">http://ad.qa.auditude.com/adserver/e?type=adimp&amp; cid=127860991&amp; z=50183&amp; a=903395&amp; s=ef8c51dc&amp; t=1355309735&amp; w=100000&amp; uid=_CxLm0b1SeKD8KXco__5TQ&amp; l=1355280906&amp; u=956c3cd141086a1da44dcae8ea4ed14a&amp; br=1&amp; sq=1&amp; pod=id:1,ctype:l,ptype:p,dur:400,lot:8,cpos:1,edur:400,elot:8&amp; ax=0,0,1720,0/?ContentPosition=[CONTENTPLAYHEAD] ?Cashcash=[CACHEBUSTING] ?Asset=[ASSETURI] </Impression> <Creatives> <Creative> <Linear> <Duration>00:00:15</Duration> <TrackingEvents> ... <Tracking event="firstQuartile"> http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS&amp; a=903395&amp; a1=105&amp; ref=urn:asset:903395:105&amp; unit=percent&amp; progress=25&amp; cid=127860991&amp; z=50183&amp; a=903395&amp; s=ef8c51dc&amp; t=1355309735&amp; w=100000&amp; uid=_CxLm0b1SeKD8KXco__5TQ&amp; l=1355280906&amp; u=956c3cd141086a1da44dcae8ea4ed14a&amp; br=1&amp; sq=1&amp; pod=id:1,ctype:l,ptype:p,dur:400,lot:8,cpos:1,edur:400,elot:8&amp;

21Manifest Server API for Ad Insertion

25 November 2015

Page 22: Manifest Server API for Ad Insertion

ax=0,0,1720,0/?ContentPosition=[CONTENTPLAYHEAD] ?Cashcash=[CACHEBUSTING] ?Asset=[ASSETURI] </Tracking> <Tracking event="midpoint"> http://ad.qa.auditude.com/adserver/e?type=AD_PROGRESS&amp; a=903395&amp; a1=105&amp; ref=urn:asset:903395:105&amp; unit=percent&amp; progress=50&amp; cid=127860991&amp; z=50183&amp; a=903395&amp; s=ef8c51dc&amp; t=1355309735&amp; w=100000&amp; uid=_CxLm0b1SeKD8KXco__5TQ&amp; l=1355280906&amp; u=956c3cd141086a1da44dcae8ea4ed14a&amp; br=1&amp; sq=1&amp; pod=id:1,ctype:l,ptype:p,dur:400,lot:8,cpos:1,edur:400,elot:8&amp; ax=0,0,1720,0/?ContentPosition=[CONTENTPLAYHEAD] ?Cashcash=[CACHEBUSTING] ?Asset=[ASSETURI] </Tracking> <Tracking event="firstQuartile"> http://www.Tweeeen.com/?ContentPosition=[CONTENTPLAYHEAD] ?Cashcash=[CACHEBUSTING] ?Asset=[ASSETURI] </Tracking> <Tracking event="midpoint"> http://www.Fiftyyyy.com/?ContentPosition=[CONTENTPLAYHEAD] ?Cashcash=[CACHEBUSTING] ?Asset=[ASSETURI] </Tracking> ... </TrackingEvents> <VideoClicks> <ClickTracking> http://www.MP4-Vid-ClickTrack.com/?ContentPosition=[CONTENTPLAYHEAD] ?Cashcash=[CACHEBUSTING] ?Asset=[ASSETURI] </ClickTracking> <ClickThrough> http://www.cnn.com/?ContentPosition=[CONTENTPLAYHEAD] ?Cashcash=[CACHEBUSTING] ?Asset=[ASSETURI] </ClickThrough> ... </VideoClicks> <AdParameters>campaign_id=7012</AdParameters> <MediaFiles> ... </MediaFiles> </Linear> </Creative> <Creative> <CompanionAds> <Companion id="103" width="300" height="250"> <StaticResource creativeType="image/jpeg"> http://ad.qa.auditude.com/adserver/c/z=50183; l=1355280906; u=956c3cd141086a1da44dcae8ea4ed14a; uid=_CxLm0b1SeKD8KXco__5TQ; cid=127860991; s=ef8c51dc; t=1355309735;

22Manifest Server API for Ad Insertion

25 November 2015

Page 23: Manifest Server API for Ad Insertion

br=1; sq=1; pod=id%3a1%2cctype%3al%2cptype%3ap%2cdur %3a400%2clot%3a8%2ccpos%3a1%2cedur%3a400%2celot%3a8; ax=0%2c0%2c1720%2c0; w=100000; a=903395; a1=103/c300x250.jpeg </StaticResource> <CompanionClickThrough> http://ad.qa.auditude.com/adserver/l/a=903395%3Ba1=103 %3Ba2=1%3Bz=50183%3Bl=1355280906%3Bu=956c3cd141086a1da44dcae8ea4ed14a %3Bcid=127860991%3Bs=ef8c51dc%3Buid=_CxLm0b1SeKD8KXco__5TQ %3Bt=1355309735%3Bbr=1%3Bsq=1%3Bpod=id%3a1%2cctype%3al%2cptype %3ap%2cdur%3a400%2clot%3a8%2ccpos%3a1%2cedur%3a400%2celot%3a8 %3Bax=0%2c0%2c1720%2c0 </CompanionClickThrough> <AdParameters>campaign_id=7012</AdParameters> </Companion> </CompanionAds> </Creative> ... </Creatives> <Extensions> <Extension type="Behavior"> ... </Extension> </Extensions> </InLine> </Ad> </VAST></AdTrackingFragment></AdTrackingFragments>

23Manifest Server API for Ad Insertion

25 November 2015