VASTlint

VAST error codes / Linear and media errors

VAST error 405: Problem displaying media file

Short answer: A supported MediaFile was found but the player failed to display it.

Debug this tag now

If you only have a live URL, test it first. If the failure is in the wrapper chain, inspect each hop. Validate resolved XML when you already have the response.

What your player reported

405 · Problem displaying MediaFile. Media player found a MediaFile with supported type but couldn’t display it. MediaFile may include: unsupported codecs, different MIME type than MediaFile@type, unsupported delivery method, etc.

Wording from the IAB VAST 4.3 specification error table. Players may shorten or reformat it, but the code is the same.

What it means

The player selected a MediaFile whose type it accepts, then failed while opening the file. 403 means nothing in the list was acceptable, so the player never picked one. 402 means the chosen URL did not finish downloading. 405 means the bytes arrived and still would not play.

A file the player accepted and then could not play

405 means the player found a MediaFile whose type it supports and failed while displaying it. The spec lists the usual reasons: a codec the player does not decode, a file whose bytes do not match type, or a delivery method the player cannot use. The download itself finished. That is the split from 402.

403 is the step before the choice. No MediaFile matched. Adding HEVC inside another video/mp4 will not fix a 403 if the player rejected every type. 405 means the type matched and the contents did not. 401 is a general linear failure. If the player was specific enough to say the media file would not display, believe 405 and inspect the file it picked.

Codecs, MIME types, and delivery

type="video/mp4" only says the container family. A television that plays AVC and rejects HEVC will 405 on an HEVC file with that type. The attribute is not wrong enough for 403, and it is not right enough to play. List a rendition in a codec the device actually decodes, or stop sending the HEVC file to that player.

A type that names the wrong container fails the same way. video/mp4 pointing at a WebM file, or video/webm pointing at an MP4, passes a careless check and fails at decode. Fetch the URL and compare the bytes with the attribute. delivery="streaming" on a progressive MP4, or delivery="progressive" on an HLS playlist, is the same class of lie. The player opens the resource in the wrong mode.

A truncated file, or an MP4 whose moov atom is at the end, can arrive in full and still not start. The player has the bytes and cannot present a frame. That is 405. Moving the moov atom forward, or replacing the file, is the fix. Changing the VAST timeout is the fix for 402.

CTV and stitching

Connected-TV players are strict about the codec and about HTTPS. A file that plays in a desktop browser can 405 on the device the campaign bought. Test the live tag against the device, or against a player with the same codec support, after the XML validates. The validator checks that type, delivery, width, and height are present and shaped correctly. It does not decode the media. A valid tag can still 405.

When a stitcher transcodes, 405 can be the transcode output rather than the mezzanine you uploaded. 406 and 411 are the mezzanine codes: missing, or present and in the process of being rejected. 405 on a stitched stream is the rendition the device was handed. Ask which URL the device requested before you replace the mezzanine.

Common causes

  • type="video/mp4" on a file the device cannot decode, such as HEVC on a player that only plays AVC
  • The type attribute does not match the file: the attribute says video/mp4 and the URL is WebM, or the reverse
  • delivery="streaming" on a progressive MP4, or delivery="progressive" on an HLS playlist
  • A file that is truncated or whose moov atom sits at the end, so the player cannot start it

How to fix it

Compare the MediaFile type and delivery with the file the URL actually returns. Keep at least one progressive video/mp4 in a codec the target device plays. If the player never found a type it supports, the code is 403, and adding a codec inside an unsupported type will not change that.

The XML the player was holding

This is the shape that produces error 405. The player then calls the Error URL with [ERRORCODE] set to 405.

<MediaFile delivery="progressive" type="video/mp4" width="1920" height="1080" bitrate="4000">
  <![CDATA[https://cdn.example.com/spot-hevc.mp4]]>
</MediaFile>

VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.

VAST error codes are runtime buckets emitted by the player. They tell you where the failure happened, not which line of XML caused it. Paste the raw tag into the validator to map this code onto the exact element and rule.

Related vastlint rules

Related error codes

Debug this tag now

Validate the XML, follow the wrapper chain, or check it in CI before launch:

# CLI: exits non-zero on errors, ideal for pipelines
vastlint check creative.xml

Further reading