VAST 3.0 标准详解:标签作用与格式全解析

VAST(Video Ad Serving Template)是由 IAB(Interactive Advertising Bureau)制定的视频广告投放模板标准。它定义了一套统一的 XML 模式,用于在视频播放器与广告服务器之间传递广告素材、追踪事件和交互行为。本文将全面介绍 VAST 3.0 的各种标签作用及格式。


一、VAST 3.0 概述

1.1 什么是 VAST

VAST 是一套基于 XML 的通信协议,解决了视频广告生态中"广告服务器"与"视频播放器"之间的标准化交互问题。在车载音频广告、流媒体视频广告等场景中,播放器通过向广告服务器发送 VAST 请求,获取包含广告素材和追踪信息的 XML 响应。

1.2 VAST 3.0 相比 2.0 的主要增强

特性 VAST 2.0 VAST 3.0
错误追踪 支持 <Error> 标签
交互事件 有限 新增 mute/unmute/pause/resume/skip 等
广告包裹 仅 InLine 支持 Wrapper + InLine 嵌套
扩展机制 有限 丰富的 <Extensions> 自定义能力
VPAID 支持 内置 VPAID 交互广告支持
序列广告 支持 Ads 多序列投放

1.3 VAST 的工作流程

┌──────────────┐     VAST请求      ┌──────────────┐
│  视频播放器   │ ───────────────→ │  广告服务器   │
│ (客户端)      │                  │  (ADS)       │
│              │ ←─────────────── │              │
│              │     VAST XML响应  │              │
└──────┬───────┘                  └──────────────┘
       │
       │ 播放广告素材
       │ 触发追踪事件
       ▼
┌──────────────┐
│  素材CDN      │
└──────────────┘

二、VAST 3.0 XML 整体结构

一个完整的 VAST 3.0 InLine 广告 XML 如下:

<?xml version="1.0" encoding="UTF-8"?>
<VAST version="3.0">
  <Ad id="2245779">
    <InLine>
      <AdSystem>AdSpeed</AdSystem>
      <AdTitle>测试活动1</AdTitle>
      <Description>这是一条音频广告</Description>
      <Advertiser>广告主名称</Advertiser>
      <Pricing>1.50</Pricing>
      <Error><![CDATA[https://example.com/error?errorCode=[ERRORCODE]]]></Error>
      <Impression id="AdSpeed"><![CDATA[https://example.com/impression]]></Impression>
      <Creatives>
        <Creative id="cr_2245779">
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
              <Tracking event="start"><![CDATA[https://example.com/track?type=start]]></Tracking>
              <Tracking event="firstQuartile"><![CDATA[https://example.com/track?type=firstQuartile]]></Tracking>
              <Tracking event="midpoint"><![CDATA[https://example.com/track?type=midpoint]]></Tracking>
              <Tracking event="thirdQuartile"><![CDATA[https://example.com/track?type=thirdQuartile]]></Tracking>
              <Tracking event="complete"><![CDATA[https://example.com/track?type=complete]]></Tracking>
              <Tracking event="mute"><![CDATA[https://example.com/track?type=mute]]></Tracking>
              <Tracking event="unmute"><![CDATA[https://example.com/track?type=unmute]]></Tracking>
              <Tracking event="pause"><![CDATA[https://example.com/track?type=pause]]></Tracking>
              <Tracking event="resume"><![CDATA[https://example.com/track?type=resume]]></Tracking>
              <Tracking event="skip"><![CDATA[https://example.com/track?type=skip]]></Tracking>
              <Tracking event="fullscreen"><![CDATA[https://example.com/track?type=fullscreen]]></Tracking>
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough><![CDATA[https://example.com/click]]></ClickThrough>
              <ClickTracking><![CDATA[https://example.com/clicktrack]]></ClickTracking>
              <CustomClick><![CDATA[https://example.com/customclick]]></CustomClick>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="audio/mpeg" bitrate="128" width="0" height="0">
                <![CDATA[https://example.com/ad.mp3]]>
              </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
      <Extensions>
        <Extension type="AdId">
          <![CDATA[2245779]]>
        </Extension>
        <Extension type="Google_DAI_Custom">
          <![CDATA[<CustomData>...</CustomData>]]>
        </Extension>
      </Extensions>
    </InLine>
  </Ad>
</VAST>

三、各标签详解

3.1 <VAST> — 根元素

VAST XML 的根元素,通过 version 属性声明版本号。

属性 类型 必填 说明
version String 版本号,固定为 "3.0"
<VAST version="3.0">
  <!-- 广告内容 -->
</VAST>

注意:当无可用广告时,应返回空的 VAST XML(<VAST version="3.0"/>),而非 HTTP 空响应或错误码,播放器据此判断本次无广告。


3.2 <Ad> — 广告元素

VAST 中的一条广告。一个 <VAST> 可以包含多个 <Ad>(序列广告)。

属性 类型 必填 说明
id String 广告唯一标识,通常对应广告系统的 Line Item ID
sequence Integer 序列广告中的播放顺序(从 1 开始)
conditionalAd Boolean 是否为条件广告

子元素(二选一):

子元素 说明
<InLine> 直接包含广告的所有信息(素材、追踪等)
<Wrapper> 指向另一个 VAST URL,需二次请求获取实际广告
<Ad id="2245779">
  <InLine>...</InLine>
</Ad>

3.3 <InLine> — 内联广告

包含广告的全部详细信息,播放器无需再发起额外请求即可获取广告素材。

子元素 必填 说明
<AdSystem> 广告系统标识(如 “Google Ad Manager”、“AdSpeed”)
<AdTitle> 广告标题,描述广告内容
<Description> 广告描述信息
<Advertiser> 广告主名称
<Pricing> 广告投放价格(用于竞价场景)
<Error> 错误追踪 URL,广告加载失败时触发
<Impression> 曝光追踪 URL 列表,广告展示时触发
<Creatives> 创意列表容器
<Extensions> 扩展信息容器

3.4 <Wrapper> — 包装广告

Wrapper 不直接包含广告信息,而是指向另一个 VAST URL。广告服务器返回 Wrapper 后,播放器需要再发起一次请求获取实际的 InLine 广告。

子元素 必填 说明
<AdSystem> 广告系统标识
<VASTAdTagURI> 指向下一级 VAST 的 URL
<Error> 错误追踪 URL
<Impression> 曝光追踪 URL(Wrapper 级别)
<Creatives> 创意列表(可为空)
<Ad id="wrapper_001">
  <Wrapper>
    <AdSystem>ThirdPartyADS</AdSystem>
    <VASTAdTagURI><![CDATA[https://thirdparty.com/vast?adId=123]]></VASTAdTagURI>
    <Impression id="wrapper"><![CDATA[https://example.com/imp]]></Impression>
  </Wrapper>
</Ad>

Wrapper 嵌套限制:IAB 建议 Wrapper 嵌套层级不超过 5 层,避免链路过长导致延迟。


3.5 <Error> — 错误追踪

广告在加载或播放过程中发生错误时,播放器向此 URL 发起请求。支持 [ERRORCODE] 宏替换。

<Error><![CDATA[https://example.com/error?errorCode=[ERRORCODE]]]></Error>

常见错误码:

错误码 含义
100 XML 解析错误
101 VAST Schema 验证失败
102 VAST 版本不支持
200 广告超时
201 视频播放器无法解析 XML
300 通用 Wrapper 错误
301 Wrapper 超时
302 Wrapper 达到最大嵌套层级
303 无 VAST 响应
400 通用线性广告错误
401 文件未找到
402 VPAID 错误
403 广告创意列表为空
500 通用非线性广告错误

3.6 <Impression> — 曝光追踪

广告成功展示时触发,是广告计费的核心依据。一条广告可以有多个 <Impression>(不同追踪方各自一个)。

属性 类型 必填 说明
id String 追踪方标识(如 “AdSpeed”、“DoubleClick”)
<Impression id="AdSpeed"><![CDATA[https://example.com/impression]]></Impression>

重要<Impression> 在广告素材开始播放时触发一次,是计费的主要依据。通常应配合服务端去重逻辑,避免重复计费。


3.7 <Creatives><Creative> — 创意元素

<Creatives> 是创意容器,内部包含一个或多个 <Creative>

<Creative> 属性
属性 类型 必填 说明
id String 创意唯一标识
sequence Integer 同一广告内多个创意的播放顺序
adId String 广告 ID(与父 <Ad> 的 id 关联)
<Creative> 子元素(三选一)
子元素 说明
<Linear> 线性广告(音/视频广告,播放前后插播)
<NonLinearAds> 非线性广告(叠加层、图片广告等)
<CompanionAds> 伴随广告(展示在播放器旁边的横幅等)
<Creatives>
  <Creative id="cr_2245779">
    <Linear>...</Linear>
  </Creative>
</Creatives>

3.8 <Linear> — 线性广告

线性广告是指在音/视频播放前、中、后插入的广告内容,广告播放期间用户无法跳过主内容。

子元素 必填 说明
<Duration> 广告时长,格式为 HH:MM:SS(如 00:00:15
<TrackingEvents> 追踪事件容器
<VideoClicks> 视频点击行为容器
<MediaFiles> 媒体文件列表
<Icons> 广告图标(如"跳过"按钮、了解更多等)
<Linear>
  <Duration>00:00:15</Duration>
  <TrackingEvents>...</TrackingEvents>
  <VideoClicks>...</VideoClicks>
  <MediaFiles>...</MediaFiles>
</Linear>

3.9 <Duration> — 广告时长

格式为 HH:MM:SS(时:分:秒),也可使用 HH:MM:SS.mmm(含毫秒)。

<Duration>00:00:15</Duration>
<Duration>00:01:30.500</Duration>

播放器根据此值计算进度事件(firstQuartile / midpoint / thirdQuartile / complete)的触发时间点。


3.10 <TrackingEvents><Tracking> — 追踪事件

<TrackingEvents> 是追踪事件的容器,内部包含多个 <Tracking> 元素。每个 <Tracking> 通过 event 属性标识事件类型,文本内容为追踪 URL。

<Tracking> 属性
属性 类型 必填 说明
event String 追踪事件名称
offset String 进度事件的时间偏移(仅用于 progress 事件)
VAST 3.0 支持的追踪事件

进度事件(播放器自动触发):

事件名 触发时机
start 广告开始播放
firstQuartile 广告播放至 25%
midpoint 广告播放至 50%
thirdQuartile 广告播放至 75%
complete 广告播放完成
progress 自定义进度点(需配合 offset 属性)

交互事件(用户操作触发):

事件名 触发时机
mute 用户静音
unmute 用户取消静音
pause 用户暂停播放
resume 用户恢复播放
fullscreen 用户进入全屏
exitFullscreen 用户退出全屏
skip 用户跳过广告
close 用户关闭广告
<TrackingEvents>
  <Tracking event="start"><![CDATA[https://example.com/track?type=start]]></Tracking>
  <Tracking event="firstQuartile"><![CDATA[https://example.com/track?type=firstQuartile]]></Tracking>
  <Tracking event="midpoint"><![CDATA[https://example.com/track?type=midpoint]]></Tracking>
  <Tracking event="thirdQuartile"><![CDATA[https://example.com/track?type=thirdQuartile]]></Tracking>
  <Tracking event="complete"><![CDATA[https://example.com/track?type=complete]]></Tracking>
  <Tracking event="mute"><![CDATA[https://example.com/track?type=mute]]></Tracking>
  <Tracking event="unmute"><![CDATA[https://example.com/track?type=unmute]]></Tracking>
  <Tracking event="pause"><![CDATA[https://example.com/track?type=pause]]></Tracking>
  <Tracking event="resume"><![CDATA[https://example.com/track?type=resume]]></Tracking>
  <Tracking event="skip"><![CDATA[https://example.com/track?type=skip]]></Tracking>
  <Tracking event="fullscreen"><![CDATA[https://example.com/track?type=fullscreen]]></Tracking>
</TrackingEvents>

进度事件触发原理:播放器根据 <Duration> 计算各时间点。例如 15 秒的广告:

  • start: 0 秒
  • firstQuartile: 3.75 秒
  • midpoint: 7.5 秒
  • thirdQuartile: 11.25 秒
  • complete: 15 秒

3.11 <VideoClicks> — 视频点击行为

定义用户点击广告时的行为。

子元素 必填 说明
<ClickThrough> 点击跳转的目标 URL(用户点击广告后打开的页面)
<ClickTracking> 点击追踪 URL(记录用户点击行为,可多个)
<CustomClick> 自定义点击追踪 URL
<VideoClicks>
  <ClickThrough><![CDATA[https://advertiser.com/landing]]></ClickThrough>
  <ClickTracking><![CDATA[https://example.com/clicktrack]]></ClickTracking>
  <CustomClick><![CDATA[https://example.com/customclick]]></CustomClick>
</VideoClicks>

ClickThrough vs ClickTrackingClickThrough 是用户跳转的落地页 URL,ClickTracking 仅用于统计点击次数,不影响跳转行为。


3.12 <MediaFiles><MediaFile> — 媒体文件

<MediaFiles> 是媒体文件容器,内部包含一个或多个 <MediaFile>。播放器根据自身能力选择最合适的媒体文件。

<MediaFile> 属性
属性 类型 必填 说明
delivery String 传输方式:progressive(渐进式下载)或 streaming(流式)
type String MIME 类型(如 audio/mpegvideo/mp4
bitrate Integer 比特率(kbps)
width Integer 视频宽度(像素),音频广告为 0
height Integer 视频高度(像素),音频广告为 0
codec String 编码格式
apiFramework String API 框架(如 “VPAID”)
scalable Boolean 是否可缩放
maintainAspectRatio Boolean 是否保持宽高比
<MediaFiles>
  <MediaFile delivery="progressive" type="audio/mpeg" bitrate="128" width="0" height="0">
    <![CDATA[https://cdn.example.com/ad.mp3]]>
  </MediaFile>
</MediaFiles>

多码率适配:可以为同一广告提供多个不同 bitrate 的 <MediaFile>,播放器根据网络状况自适应选择。


3.13 <Extensions><Extension> — 扩展信息

VAST 3.0 的扩展机制,用于传递标准 VAST 之外的自定义数据。不同广告系统使用 Extensions 传递各自的自定义参数。

<Extension> 属性
属性 类型 必填 说明
type String 扩展类型标识
<Extensions>
  <Extension type="AdId">
    <![CDATA[2245779]]>
  </Extension>
  <Extension type="Google_DAI_Custom">
    <![CDATA[<CustomData>...</CustomData>]]>
  </Extension>
  <Extension type="Pricing">
    <![CDATA[1.50]]>
  </Extension>
</Extensions>

常见 Extension type

  • AdId:Google Ad Manager 广告 ID
  • Google_DAI_Custom:Google DAI 自定义参数
  • Pricing:价格信息
  • encoding:编码信息
  • mediaVerification:媒体验证 URL

3.14 <NonLinearAds> — 非线性广告(补充)

非线性广告叠加在视频内容上方播放,不中断主内容。

<Creative>
  <NonLinearAds>
    <TrackingEvents>...</TrackingEvents>
    <NonLinear width="300" height="50">
      <StaticResource creativeType="image/png"><![CDATA[https://example.com/banner.png]]></StaticResource>
      <NonLinearClickThrough><![CDATA[https://example.com/click]]></NonLinearClickThrough>
    </NonLinear>
  </NonLinearAds>
</Creative>

3.15 <CompanionAds> — 伴随广告(补充)

伴随广告与视频广告同步展示,通常显示在播放器周围的区域。

<Creative>
  <CompanionAds>
    <Companion id="companion1" width="300" height="250">
      <StaticResource creativeType="image/jpeg"><![CDATA[https://example.com/companion.jpg]]></StaticResource>
      <CompanionClickThrough><![CDATA[https://example.com/click]]></CompanionClickThrough>
    </Companion>
  </CompanionAds>
</Creative>

四、VAST 3.0 宏替换

VAST 3.0 支持在追踪 URL 中使用宏(Macro),播放器在发送追踪请求前将宏替换为实际值。

说明
[ERRORCODE] 错误码(用于 <Error> 标签)
[CONTENTPLAYHEAD] 当前播放位置(如 00:00:07.500
[ASSETURI] 当前播放的素材 URI
[PODSEQUENCE] 广告序列序号
[ADPLAYHEAD] 广告当前播放位置
[MIMETYPE] 媒体文件 MIME 类型
[BREAKMAXADLENGTH] 广告时段最大广告时长
[DEVICEIP] 用户设备 IP
[DEVICEUA] 用户设备 User-Agent
<Tracking event="start"><![CDATA[https://example.com/track?position=[CONTENTPLAYHEAD]&asset=[ASSETURI]]]></Tracking>

五、VAST 3.0 与 VMAP 的关系

VMAP(Video Multiple Ad Playlist)是 VAST 的上层协议,用于描述视频内容中广告插入点的位置和数量。VMAP 本身不包含广告内容,而是包含指向 VAST URL 的引用。

<VMAP version="1.0">
  <AdBreak breakType="linear" breakId="preroll" timeOffset="start">
    <AdSource allowMultipleAds="false" followRedirects="true">
      <AdTagURI template="0"><![CDATA[https://example.com/vast?adId=123]]></AdTagURI>
    </AdSource>
  </AdBreak>
  <AdBreak breakType="linear" breakId="midroll" timeOffset="50%">
    <AdSource allowMultipleAds="false" followRedirects="true">
      <AdTagURI template="0"><![CDATA[https://example.com/vast?adId=456]]></AdTagURI>
    </AdSource>
  </AdBreak>
  <AdBreak breakType="linear" breakId="postroll" timeOffset="end">
    <AdSource allowMultipleAds="false" followRedirects="true">
      <AdTagURI template="0"><![CDATA[https://example.com/vast?adId=789]]></AdTagURI>
    </AdSource>
  </AdBreak>
</VMAP>
对比项 VAST VMAP
定位 描述单个广告的详细内容 描述广告插入点的位置和顺序
层级 广告内容层 广告调度层
包含素材 否(通过 AdTagURI 引用 VAST)
典型用途 广告服务器返回给播放器 内容管理系统返回给播放器

六、实际应用示例:车载音频广告

以下是一个实际的车载音频广告 VAST 3.0 响应示例,展示了完整的标签嵌套结构:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<VAST version="3.0">
  <Ad id="2245779">
    <InLine>
      <AdSystem>AdSpeed</AdSystem>
      <AdTitle>测试活动1</AdTitle>
      <Error><![CDATA[https://iovopen-test.radio.cn/v36/txAd/txAdTest?callbackId=xxx&creativeId=cr_2245779&appId=app001&adDeliveryPlanId=2245779&adDeliveryPlanName=%E6%B5%8B%E8%AF%95%E6%B4%BB%E5%8A%A81&eventType=13&deviceId=dev001&deviceType=%E8%BD%A6%E8%BD%BD%E5%B1%8F&os=0&miaozhenCampaignId=miaoZhenCampaignId&errorCode=[ERRORCODE]]]></Error>
      <Impression id="AdSpeed"><![CDATA[https://iovopen-test.radio.cn/v36/txAd/txAdTest?callbackId=xxx&creativeId=cr_2245779&adDeliveryPlanId=2245779&eventType=6]]></Impression>
      <Creatives>
        <Creative id="cr_2245779">
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
              <Tracking event="start"><![CDATA[https://iovopen-test.radio.cn/v36/txAd/txAdTest?eventType=1]]></Tracking>
              <Tracking event="firstQuartile"><![CDATA[https://iovopen-test.radio.cn/v36/txAd/txAdTest?eventType=2]]></Tracking>
              <Tracking event="midpoint"><![CDATA[https://iovopen-test.radio.cn/v36/txAd/txAdTest?eventType=3]]></Tracking>
              <Tracking event="thirdQuartile"><![CDATA[https://iovopen-test.radio.cn/v36/txAd/txAdTest?eventType=4]]></Tracking>
              <Tracking event="complete"><![CDATA[https://iovopen-test.radio.cn/v36/txAd/txAdTest?eventType=5]]></Tracking>
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough><![CDATA[https://iovimage.radio.cn/mz/audios/202605/168e8acc-8cf2-4120-a52f-b77e50403c27.mp3]]></ClickThrough>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="audio/mpeg" bitrate="128"><![CDATA[https://iovimage.radio.cn/mz/audios/202605/168e8acc-8cf2-4120-a52f-b77e50403c27.mp3]]></MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
      <Extensions>
        <Extension type="AdId"><![CDATA[2245779]]></Extension>
      </Extensions>
    </InLine>
  </Ad>
</VAST>

关键设计要点

  1. <Error> 携带 [ERRORCODE]:播放器在广告加载/播放失败时,将 [ERRORCODE] 替换为实际错误码后请求此 URL
  2. <Impression> 是计费依据:广告成功展示时触发一次,服务端需做去重
  3. 5 个进度事件 + 交互事件start/firstQuartile/midpoint/thirdQuartile/complete 覆盖广告完整播放周期
  4. <MediaFile>typeaudio/mpeg:车载音频场景下使用音频 MIME 类型
  5. <Extensions> 传递自定义参数:用于广告系统间的数据交换

七、标签层级关系总览

VAST (version="3.0")
└── Ad (id, sequence)
    ├── InLine
    │   ├── AdSystem
    │   ├── AdTitle
    │   ├── Description (可选)
    │   ├── Advertiser (可选)
    │   ├── Pricing (可选)
    │   ├── Error (支持 [ERRORCODE] 宏)
    │   ├── Impression (id) — 可多个
    │   ├── Creatives
    │   │   └── Creative (id, sequence, adId)
    │   │       ├── Linear
    │   │       │   ├── Duration (HH:MM:SS)
    │   │       │   ├── TrackingEvents
    │   │       │   │   └── Tracking (event, offset?) — 可多个
    │   │       │   ├── VideoClicks
    │   │       │   │   ├── ClickThrough
    │   │       │   │   ├── ClickTracking — 可多个
    │   │       │   │   └── CustomClick — 可多个
    │   │       │   ├── MediaFiles
    │   │       │   │   └── MediaFile (delivery, type, bitrate, width, height) — 可多个
    │   │       │   └── Icons (可选)
    │   │       ├── NonLinearAds (可选)
    │   │       └── CompanionAds (可选)
    │   └── Extensions
    │       └── Extension (type) — 可多个
    └── Wrapper (替代 InLine)
        ├── AdSystem
        ├── VASTAdTagURI
        ├── Error
        ├── Impression
        └── Creatives (可选)

八、总结

VAST 3.0 是数字视频/音频广告投放的核心标准,其标签设计覆盖了广告投放的完整生命周期:

阶段 关键标签 作用
广告定义 <VAST>, <Ad>, <InLine>/<Wrapper> 定义广告结构和来源
广告信息 <AdSystem>, <AdTitle>, <Description>, <Advertiser>, <Pricing> 广告元数据
素材描述 <Creatives>, <Creative>, <Linear>, <MediaFiles>, <MediaFile> 广告素材信息
播放控制 <Duration>, <VideoClicks> 时长和点击行为
曝光追踪 <Impression> 计费依据
进度追踪 <TrackingEvents>, <Tracking> 播放进度监控
错误追踪 <Error> 异常监控和排查
扩展信息 <Extensions>, <Extension> 自定义数据传递

理解 VAST 3.0 的标签结构对于实现广告投放系统、广告追踪系统和播放器集成至关重要。在实际开发中,建议参考 IAB 官方规范文档,并结合业务需求灵活运用 Extensions 扩展机制。


参考文档

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐