Passing validation is not the same as passing delivery
A normal XML validator can tell you whether the tag is structurally valid. It cannot tell you whether the fourth wrapper in a chain times out on a Samsung panel, whether the MP4 is encoded in a way a Roku box will reject, or whether a buyer-side HTTPS check will silently zero-fill the impression.
That is why CTV failures often look random in launch week. The tag technically works, but the player environment is stricter than the test harness you used before trafficking.
The IAB Tech Lab's recent VAST 4.3 and CTV addendum work is a good reminder that connected TV is not just browser video on a bigger screen. Resolution expectations, measurement behavior, asset handling, and device runtimes all matter more.
Why browser QA misses TV-specific breakpoints
Desktop validation usually happens on fast office networks, modern browsers, and player stacks that tolerate redirect latency. Real CTV traffic lands on constrained consumer networks, device SDKs with tighter wrapper budgets, and native playback engines that are much less forgiving about codecs and HTTPS drift.
That gap explains why a tag can pass basic QA on Friday and underdeliver on Monday. The XML did not change. The execution environment did.
The failures that show up first in production
- Wrapper chains that resolve eventually on a desktop connection but exceed the practical hop budget on a TV device.
- Media files that are legal VAST but not a CTV-safe encoding profile for the device or SDK in play.
- HTTP tracking and creative URLs that survive QA but are blocked when the device runtime enforces HTTPS only.
- VPAID or other interactive assumptions that still appear in a third-party response long after the receiving platform stopped accepting them.
- Missing mezzanine or incomplete metadata in environments that expect a richer asset package for SSAI or premium CTV delivery.
- Player-specific requirements such as Roku RAF measurement handling or Google IMA wrapper limits that were never exercised in the original test harness.
Most CTV outages are not caused by a broken root document. They are caused by a chain of individually small assumptions that only fail when the real device is in the loop.
<Linear> <Duration>00:00:15</Duration> <MediaFiles> <MediaFile delivery="progressive" type="video/mp4" width="1920" height="1080" bitrate="4500"> <![CDATA[https://cdn.example.com/ads/brand-15s-h264-aac.mp4]]> </MediaFile> <Mezzanine delivery="streaming" type="video/mp4" width="1920" height="1080"> <![CDATA[https://cdn.example.com/ads/brand-15s-master.mp4]]> </Mezzanine> </MediaFiles></Linear>Get VAST spec updates, platform guides, and release notes in your inbox.
A practical CTV preflight before launch
- Resolve the full wrapper chain and count real hops, not just the redirects visible in the first partner handoff.
- Confirm that every URL in the chain is HTTPS, including impressions, errors, click trackers, and companion assets.
- Verify that at least one MP4 H.264 asset is available for device classes that do not tolerate web-oriented encodes.
- Check whether the receiving stack expects mezzanine, higher-resolution creative, or extra metadata for SSAI and premium CTV paths.
- Reject any path that still depends on VPAID when the destination is tvOS, Fire TV, Roku, webOS, or another CTV runtime.
- Test on the actual player class that will serve the campaign, not just a browser inspector or desktop sample app.
Match QA to the actual receiving stack
Before launch, validate the raw XML, then inspect the live wrapper chain, then check the receiving player class. Google IMA on web, Google IMA on tvOS, Roku RAF, and server-side stitched playback each fail differently.
For example, Google IMA commonly makes teams think in terms of a four-hop wrapper ceiling, while Roku RAF forces a second conversation about practical timeout budgets, measurement beacons, and how ads are rendered in the actual device runtime.
If the campaign matters, your launch gate should be player-specific, not just schema-specific. That is the difference between catching the expensive misses early and learning about them from underdelivery after launch.
Related guides on vastlint
Platform wrapper limits, followAdditionalWrappers behavior, and why extra hops quietly kill delivery.
What IMA expects across web, mobile, and CTV, including wrapper limits and VPAID policy.
Roku-specific constraints around wrapper timing, media formats, and tracking behavior.
How tvOS behaves when playback runs through the Google IMA SDK for tvOS.
Fire TV format, HTTPS, and runtime assumptions that often cause launch-week regressions.
Authoritative references
The official IAB Tech Lab overview and version history for VAST, including VAST 4.3.
The CTV addendum covering newer creative expectations, device-oriented support, and CTV-specific updates.
Roku's guide to client-side and server-side ad insertion, tracking, and RAF-specific implementation details.
Google's IMA setup guide and runtime model for requesting ads, managing ad playback, and handling events.
Run the tag before it burns a week of delivery
Use the validator for a fast structural check, then use the inspector to follow every wrapper hop and spot the CTV-specific breakpoints before the campaign goes live.
Inspect a wrapper chain