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?
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
Create a New Pod Schedule
Click the 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]
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
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
orcuepoint_ms
macro. For more details on Dynamic VMAP, refer to the section below.
Ad Breaks Tab: Adding Routers or Ad Pods to the Pod Schedule
Here You’ll choose the routers or ad pods to include in your Pod Schedule. Click the 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
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.
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 |
---|---|---|
| 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) |
| Integer or decimal | Will translate the numeric value to milliseconds ex: 1061.8 = 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.