vastlint

VAST XML for JW Player

JW Player (now part of LG Ad Solutions) is one of the most widely deployed web video players. It powers video and advertising on thousands of publisher sites and supports VAST across web, mobile SDKs (iOS, Android), and OTT/CTV via JW OTT Framework. This guide covers what your VAST tag needs to deliver successfully across JW Player environments.

Quick reference

VAST versions2.0, 3.0, 4.0, 4.1, 4.2, 4.3
VPAID2.0 JS on desktop web only. Blocked on mobile SDKs and OTT.
Wrapper chain limitUp to 5 hops (publisher-configurable)
Media formats (web)MP4 H.264, WebM VP8/VP9, HLS
HTTPSRequired (mixed-content blocking on modern browsers)

VPAID policy

JW Player 8+ supports VPAID 2.0 JavaScript on desktop web browsers. However, VPAID is not supported in JW Player's Android and iOS SDKs or in JW OTT (used on Fire TV, Roku, and Smart TVs). If your tag serves across multiple environments, always include a native MP4 fallback alongside any VPAID creative.

JW Player has aligned with the industry move away from VPAID. Use OMID via <AdVerifications> for viewability measurement in new campaigns.

→ vastlint rule: VAST-4.1-vpaid-in-interactive-context

Wrapper chains

JW Player supports wrapper chains up to 5 hops by default. Publishers may configure a lower limit. Chains longer than 3 hops increase latency and ad abandonment, particularly on mobile web. Keep chains to 2–3 hops for reliable delivery.

Media file selection

JW Player evaluates all <MediaFile> entries and selects the one that best matches the viewer's browser and network. Provide multiple bitrate options and include both MP4 and WebM for maximum browser coverage.

<MediaFiles>
  <!-- Desktop/laptop — high quality -->
  <MediaFile type="video/mp4" width="1920" height="1080"
             bitrate="4500" delivery="progressive">
    <![CDATA[https://cdn.example.com/ad-1080p.mp4]]>
  </MediaFile>
  <!-- WebM for browsers preferring VP9 -->
  <MediaFile type="video/webm" width="1920" height="1080"
             bitrate="3500" delivery="progressive">
    <![CDATA[https://cdn.example.com/ad-1080p.webm]]>
  </MediaFile>
  <!-- Mobile / slower connections -->
  <MediaFile type="video/mp4" width="1280" height="720"
             bitrate="1500" delivery="progressive">
    <![CDATA[https://cdn.example.com/ad-720p.mp4]]>
  </MediaFile>
</MediaFiles>

HTTPS requirement

Modern browsers block mixed content. Any HTTP URL in a VAST tag served on an HTTPS page will be blocked by the browser before JW Player can load it. This applies to media file URLs, impression pixels, tracking URLs, and any wrapper <VASTAdTagURI>.

Duration format

JW Player requires <Duration> in HH:MM:SS or HH:MM:SS.mmm format. Bare integers are not accepted.

<!-- ✅ Correct -->
<Duration>00:00:30</Duration>

<!-- ❌ Rejected -->
<Duration>30</Duration>

→ vastlint rule: VAST-2.0-duration-format

Skippable ads

JW Player renders a skip button when skipoffset is present on <Linear>. The value must be a time (HH:MM:SS) or percentage (20%). JW Player fires a skip tracking event when the viewer skips.

Companion ads

JW Player renders companion ads when the page registers companion ad slots via the JW Player advertising API. Companion ads require correct width and height attributes on <CompanionAd> for slot matching.

Ad pods (VAST 3.0+)

JW Player supports ad pods via VAST 3.0 <AdPod> sequences. Set sequence attributes on each <Ad> element to define pod order. JW Player respects the sequence and fires pod-level tracking events.

<VAST version="3.0">
  <Ad id="1" sequence="1">...</Ad>
  <Ad id="2" sequence="2">...</Ad>
</VAST>

Pre-flight checklist for JW Player

  • VAST version attribute matches elements used
  • Include native MP4 fallback if using VPAID
  • All URLs use HTTPS
  • Wrapper chain ≤ 3 hops
  • MP4 H.264 <MediaFile> at multiple bitrates
  • <Duration> in HH:MM:SS format
  • <Impression> with HTTPS URL present
  • Companion width and height attributes set (if using companions)

References

Validate your tag against all 118 IAB rules →