Manifests

Manifest parsing errors: when the playlist itself is the bug

Playback that fails immediately, on every asset from one packager and on some devices but not others, is usually not the media at all. The player could not read the playlist.

What it looks like

The player errors out before it has fetched a single media segment, or fetches segments from the wrong location, or plays on a desktop browser and fails on a television. Because the failure is at the parsing stage, the error message is often vague and the media itself is fine, which sends investigation in the wrong direction.

The usual causes

Manifests are text, generated by software, and consumed by parsers of wildly different strictness. Desktop players are forgiving; the parsers built into older television runtimes are not, and the same file can be accepted by one and rejected by the other.

  • Syntax that violates the specification: a missing or wrong EXT-X-VERSION, tags out of order, missing EXT-X-ENDLIST on an on-demand playlist, an MPD with a required attribute absent.
  • Features newer than the player understands - low-latency HLS tags, newer DASH profiles, unusual timing structures - on a device whose player predates them.
  • Relative segment URLs that resolve against the wrong base after a redirect, or a DASH BaseURL that was never set.
  • Encoding problems: a byte-order mark at the start of the file, a wrong content type, or line endings a strict parser rejects.
  • A packager or a custom manifest manipulation step - for ads, for DRM signalling - producing output that is almost but not quite valid.

Validate before it ships

Manifest validity is easy to check automatically and rarely is. Apple's mediastreamvalidator for HLS and the DASH-IF conformance tool for MPEG-DASH both belong in the encoding pipeline, run against every packaged asset before it is published, with failures blocking publication. That alone removes most of the syntax category.

Compatibility needs a policy: decide the oldest player you support on each platform, and restrict the manifest features you use to what that player understands. Serve absolute URLs or a well-defined base and test what happens after a redirect, because the base URL resolution rules differ between players. Serve the correct content type and no byte-order mark.

Handle it in the player and test on devices

When parsing does fail, the player should surface it as a parsing error with the manifest URL rather than as a generic playback failure, so it is distinguishable in analytics from network and media problems. And because the strict parsers live in television runtimes, a manifest change is a device-matrix change: a new packager version or a new ad-insertion step should be checked on the oldest Tizen, webOS and Roku devices in the matrix before it reaches viewers.