VMAP

What is VMAP?

VMAP, which stands for Video Multiple Ad Playlist, enables publishers to control the timing of ad breaks across their content using a single ad request. In VMAP, these ad break positions are called cue points. Publishers can organize ad pods to appear at specific cue points within the video stream, such as predefined slots like Start (Preroll), Midroll, or End (Postroll), or based on a percentage of the content's duration. In SpringServe, this VMAP feature is referred to as a Pod Schedule.

Pod Schedules offer the following capabilities:

  • Flexibility to manage cue points directly through the UI - in the ad break management section of pod schedules.

  • Ability to add ad pods and routers to predefined Start, Mid-roll, or Post-roll slots, at specific times, or based on a percentage of the content.

  • Dynamic specification of cue points within a real-time ad request.

  • Customizable ad break duration in the ad pod settings, including the number of ads and their individual durations.

  • Full support for all SpringServe macros, which flow into the ad pod tags when provided.

  • Dynamic insertion of content metadata more effective ad targeting.

How do I create a Pod Schedule in the UI?

  1. Navigate to the Pod Schedules Tab
    In the Supply section of the platform, find and select the tab labeled 'Pod Schedules,' where you can create and manage schedules and generate VMAP tags

image-20241002-175723.png
  1. Create a New Pod Schedule
    Click the image-20241002-175946.png button to begin building your schedule by following the on-screen steps.

    Note: Before creating a schedule, ensure you have enough Ad Pod supply tags to fill the ad break slots. For details on creating ad pods, see [here]

  2. Configure the Schedule
    The first tab, Settings, requires you to provide:

    • A Schedule Name

    • Select the type of cue point placement: Percent, Time, or Dynamic and hit Apply. This will

image-20241002-182214.png
  • Percent: Ideal for cases where the exact timing of ad breaks is unknown. For example, if the content is 10 minutes long, with ad breaks scheduled at 25% and 75%, the ads will play at 2 minutes 30 seconds and 7 minutes 30 seconds, respectively.

  • Time: Best for publishers who know the precise times for ad breaks. Ad breaks can be scheduled down to the exact second.

  • Dynamic: This option gives publishers real-time control over VMAP cue points. It requires using the cuepoints or cuepoint_ms macro. For more details on Dynamic VMAP, refer to the section below.

  1. Ad Breaks Tab: Adding Routers or Ad Pods to the Pod Schedule

    1. Here You’ll choose the routers or ad pods to include in your Pod Schedule. Click the image-20241002-185324.png button and select either Add Supply Tag(s) or Add Router(s). You can add both to the same Pod Schedule if needed. Select the ad breaks you want to include, ensure they are listed in the correct order, and click Save

  1. Arrange the Ad Breaks
    Once you’ve selected the ad pods for your schedule, you can organize them by time or percentage.

  • Time-Based Example:

    • 60-second pod plays at 20 seconds into the content

    • Dynamic Pod 1 plays at 6 minutes and 46 seconds

    • 90-second pod plays at 10 minutes and 6 seconds

 

Scheduling by Percentage
If you are uncertain about the exact length of the content, you can schedule the ad breaks based on a percentage of the total content duration.

  1. Generate the Schedule Tag
    Once you’ve added and arranged the ad pods, click Apply to finalize the schedule. A schedule tag will then be generated in the Export Schedule tab. The macros available in this tag work the same way as they do for standard managed supply tags.

 

How do I call my Pod Schedule Dynamically?

Dynamic VMAP operates based on the presence of either the cuepoints={{CUE_POINTS}} or cuepoints_ms={{CUE_POINTS_MS}} macros in the VMAP request. When a VMAP request includes one of these macros, the resulting VMAP response will provide the ad pods or routers, including the schedule within the timeOffset attribute. In cases where both macros are present in the VMAP request, the system prioritizes the cuepoints={{CUE_POINTS}} macro, meaning its value will be used for determining ad placements and timing.

Macro

Accepted Values

Notes

Macro

Accepted Values

Notes

{{CUE_POINTS}}

start,0

end,-1

integer

start,0 = Pre-roll

end,-1 = Post-roll

integers are read in seconds so 106 = 1:46 (1 minute: 46 seconds)

{{CUE_POINTS_MS}}

Integer or decimal

Will translate the numeric value to milliseconds

ex: 1061.8 = 00:17:41.800
AND
1061800 = 00:17:41.800

Sample VMAP request:

https://tv.springserve.com/vmap/11?w=1920&h=1080&cb=[CACHEBUSTER]&ip=[IP]&ua=[USER_AGENT]&app_bundle=[APP_BUNDLE]&app_name=[APP_NAME]&app_store_url=[APP_STORE_URL]&did=[DEVICE_ID]&cuepoints=0,100,200,300,-1

Response:

<vmap:VMAP xmlns:vmap="http://www.iab.net/vmap-1.0" version="1.0"> <vmap:AdBreak breakId="26" breakType="linear" timeOffset="start"> <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="1"> <vmap:AdTagURI templateType="vast3"> <![CDATA[ https://bc-ssb-pdx.springserve.com/vast/473671?_ccp=ps.11&w=1920&h=1080&cb=[CACHEBUSTER]&ip=[IP]&ua=[USER_AGENT]&app_bundle=[APP_BUNDLE]&app_name=[APP_NAME]&app_store_url=[APP_STORE_URL]&did=[DEVICE_ID]&cuepoints=0,100,200,300,-1 ]]> </vmap:AdTagURI> </vmap:AdSource> </vmap:AdBreak> <vmap:AdBreak breakId="27" breakType="linear" timeOffset="00:01:40"> <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="1"> <vmap:AdTagURI templateType="vast3"> <![CDATA[ https://bc-ssb-pdx.springserve.com/vast/444815?_ccp=ps.11&w=1920&h=1080&cb=[CACHEBUSTER]&ip=[IP]&ua=[USER_AGENT]&app_bundle=[APP_BUNDLE]&app_name=[APP_NAME]&app_store_url=[APP_STORE_URL]&did=[DEVICE_ID]&cuepoints=0,100,200,300,-1 ]]> </vmap:AdTagURI> </vmap:AdSource> </vmap:AdBreak> <vmap:AdBreak breakId="28" breakType="linear" timeOffset="00:03:20"> <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="1"> <vmap:AdTagURI templateType="vast3"> <![CDATA[ https://bc-ssb-pdx.springserve.com/vast/444777?_ccp=ps.11&w=1920&h=1080&cb=[CACHEBUSTER]&ip=[IP]&ua=[USER_AGENT]&app_bundle=[APP_BUNDLE]&app_name=[APP_NAME]&app_store_url=[APP_STORE_URL]&did=[DEVICE_ID]&cuepoints=0,100,200,300,-1 ]]> </vmap:AdTagURI> </vmap:AdSource> </vmap:AdBreak> <vmap:AdBreak breakId="29" breakType="linear" timeOffset="00:05:00"> <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="1"> <vmap:AdTagURI templateType="vast3"> <![CDATA[ https://bc-ssb-pdx.springserve.com/vast/432769?_ccp=ps.11&w=1920&h=1080&cb=[CACHEBUSTER]&ip=[IP]&ua=[USER_AGENT]&app_bundle=[APP_BUNDLE]&app_name=[APP_NAME]&app_store_url=[APP_STORE_URL]&did=[DEVICE_ID]&cuepoints=0,100,200,300,-1 ]]> </vmap:AdTagURI> </vmap:AdSource> </vmap:AdBreak> </vmap:VMAP>

How do I know if VMAP is working?

Once you have placed your VMAP tags and set them live you will begin seeing requests to the pod schedule in the quick stats of the Pod Schedule Tab. A Pod schedule Request shows the number of times the VMAP tag was requested. The Imps in this tab show the total number of ad impressions that served for the VMAP request.