Spots

A Bare Mezzanine URL Validates Like VAST 4.0. SSAI at 4.1 Needs Four Attributes.

The trafficking UI shows green. The MP4 preview plays in the browser. The SSAI log shows the break went unfilled, or the living-room stream got a soft re-encode from the 800 kbps MediaFile because the stitcher never treated your master as a master. The XML often still looks fine. The failure is a version handoff nobody re-trafficked. What changed between 4.0 and 4.1

IAB added <Mezzanine> in VAST 4.0 for server-side

IAB added <Mezzanine> in VAST 4.0 for server-side ad insertion and addressable TV. In 4.0 the element could be a bare URI inside <MediaFiles>:

VAST 4.1 kept the element but made delivery

VAST 4.1 kept the element but made delivery, type, width, and height required on <Mezzanine>, with optional codec, fileSize, and mediaType so a pipeline can decide whether to pull a multi-gigabyte file before it hits the CDN. That is not cosmetic metadata. It is how a stitcher knows the child is a transcode source with known geometry and MIME type, not another playable rendition.

Teams that bump version="4.2" on the root without

Teams that bump version="4.2" on the root without revisiting Mezzanine copy the 4.0 snippet from an old template. Generic XML validators and schema-only checks still see a well-formed element with a URL. The SSAI pipeline is stricter: without attributes it cannot safely qualify the asset, so it falls back to recompressing the highest MediaFile or rejects the creative outright.

Players and stitchers read different children under <MediaFiles>

Players and stitchers read different children under <MediaFiles>. Players pick among MediaFile renditions. Stitchers consume Mezzanine when it is complete. A tag that validates in a desktop preview tool never exercises that split. What you see in production Three outcomes show up once the tag hits a quality-aware stitcher:

Rejection or refill. The platform expected a mastering

Rejection or refill. The platform expected a mastering source for CTV and found a hollow Mezzanine. The pod slot refills or goes empty even though quartile trackers on the MediaFile still look configured.

Silent quality loss. A permissive stack transcodes from

Silent quality loss. A permissive stack transcodes from the best MediaFile instead of a mezzanine. Nothing throws. The ad airs blocky next to broadcast content.

False confidence from mixed signals. The same creative

False confidence from mixed signals. The same creative still carries deprecated VPAID signatures or a playable SIMID layer. Those paths never run in SSAI anyway, so QA on a web player masks the missing transcode contract on the element that actually matters for the stitch.

Identity fields do not fix this. UniversalAdId tells

Identity fields do not fix this. UniversalAdId tells downstream systems which creative ran. Mezzanine tells the stitcher which bits to transcode. Both can be wrong independently.

Paste the live tag URL into the VAST

Paste the live tag URL into the VAST tag tester to fetch the resolved inline, preview the progressive file, and see tracking fire in a browser context. That step proves the MediaFile path, not the mezzanine contract.

News

A Bare Mezzanine URL Validates Like VAST 4.0. SSAI at 4.1 Needs Four Attributes.

The trafficking UI shows green.

@spots #dev
Source: Dev.to
See more like this