Skip to content
Novus Examples

VAST and SCTE-35 ad-signalling fixtures

VAST ad responses and SCTE-35 splice descriptors covering linear break signalling, wrappers, and companion creatives — for testing ad-decision integration and manifest-manipulation logic without calling a real ad server.

8 of 8 files
Preview of VAST 4.2 — Inline Linear Ad Response
xml
1.8 KB

VAST 4.2 — Inline Linear Ad Response

A complete VAST 4.2 inline response for a linear pre-roll: two progressive MP4 media files at different bitrates, quartile tracking, an impression beacon and a click-through. Every URL points at the reserved example.invalid domain, so nothing can ever be fetched and no real ad server is contacted. For testing VAST parsing and player integration without a live ad stack.

Preview of VAST 4.2 — Wrapper (Redirect) Response
xml
896 B

VAST 4.2 — Wrapper (Redirect) Response

A VAST wrapper — a response that carries no media of its own, only a VASTAdTagURI pointing at another VAST document plus its own tracking beacons that must be fired in addition to the resolved ad's. Wrapper chains are where real ad integrations break: unbounded redirect depth, timeouts, and tracking dropped part-way down the chain. Pairs with the inline response it nominally redirects to.

Preview of VMAP 1.0 — Pre-, Mid- and Post-Roll Schedule
xml
1 KB

VMAP 1.0 — Pre-, Mid- and Post-Roll Schedule

A VMAP playlist scheduling three linear ad breaks — pre-roll at start, mid-roll at eight seconds, and post-roll at end — each pointing at a VAST tag. VMAP describes WHEN breaks occur while VAST describes WHAT plays in them. The mid-roll offset lines up with the period boundary in the multi-period DASH manifest, so the two can be tested together.

Preview of SCTE-35 — Splice Insert (Break Start)
xml
528 B

SCTE-35 — Splice Insert (Break Start)

An SCTE-35 splice_insert as XML: the cue that tells a downstream packager a linear ad break starts. outOfNetworkIndicator marks entry into the break, ptsTime is 8 seconds on the 90 kHz PTS clock, and the 30-second break auto-returns. This is the signal a manifest manipulator converts into an HLS EXT-X-CUE-OUT or a new DASH period.

Preview of SCTE-35 — Time Signal With Segmentation Descriptor
xml
801 B

SCTE-35 — Time Signal With Segmentation Descriptor

The modern SCTE-35 form: a time_signal command carrying a segmentation descriptor rather than a bare splice_insert. Type 34 marks a provider placement opportunity start, and the delivery restrictions declare that this break may not be filled for web delivery — the field that ad-insertion logic is supposed to honour and frequently ignores. Includes a base64 UPID identifying the content.

Preview of VAST 4.2 — Empty (No Ad) Response
xml
93 B

VAST 4.2 — Empty (No Ad) Response

A valid VAST document containing no Ad element — the correct response when an ad server has nothing to serve. It arrives as HTTP 200 with a well-formed body, so it is not an error condition, and a player must resume content immediately rather than waiting for a timeout. Frequently mishandled: players stall on the break or log a spurious failure. The smallest meaningful VAST document there is.

Preview of VAST 3.0 — Linear Ad With Companion Banners
xml
1.3 KB

VAST 3.0 — Linear Ad With Companion Banners

A VAST 3.0 response pairing a linear spot with two companion banners in the standard IAB sizes, at the older schema version many ad servers still emit. Companions render alongside the video rather than in it, so they exercise a separate slot-matching path — the player has to find a matching container or correctly ignore them when required is none. All URLs point at example.invalid.

Preview of SCTE-35 — Splice Insert (Break End / Return to Network)
xml
472 B

SCTE-35 — Splice Insert (Break End / Return to Network)

The matching return cue for the break-start splice_insert in this group: the same spliceEventId with outOfNetworkIndicator false, signalling the feed is coming back from the ad break. It carries no BreakDuration because the return is explicit rather than automatic. Pairing start and end cues by event id is exactly what an ad-insertion implementation has to get right, and this is the pair to test it on.