Skip to main content

Playback URLs & manifest caching

This page gives the exact HLS and DASH playback URLs for a live stream, how to embed them in a player, and why manifests and segments are cached differently. Playback is delivered and cached by CDN PoPs through the stream's backing property — not by the live PoP directly. Replace <key> with your stream's 10-character emission point, shown on the Endpoints tab in your dashboard.

Playback URLs

FormatURL
HLShttps://<key>.prdrm.net/master.m3u8
DASHhttps://<key>.prdrm.net/index.mpd

Both URLs are always available regardless of which container a transcode profile targets.

:::warning Always use the CDN playback host Play from <key>.prdrm.net. Do not point viewers at the ingest host <key>.live.prdrm.net — that goes to the live PoP (SRS ingest), bypasses the CDN, and is for publishing only. See Live streaming overview. :::

Embedding in a player

The URLs work with hls.js, dash.js, and native players. CORS is enabled on the backing property (Access-Control-Allow-Origin: *), so browser players can fetch the manifest and segments cross-origin.

HLS with hls.js

<video id="video" controls></video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
const url = "https://YOUR_KEY.prdrm.net/master.m3u8";
const video = document.getElementById("video");
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
} else if (video.canPlayType("application/vnd.apple.mpegurl")) {
// Native HLS (Safari, iOS)
video.src = url;
}
</script>

DASH with dash.js

<video id="video" controls></video>
<script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>
<script>
const url = "https://YOUR_KEY.prdrm.net/index.mpd";
const player = dashjs.MediaPlayer().create();
player.initialize(document.getElementById("video"), url, true);
</script>

Manifest vs. segment caching

The backing property ships with system cache rules tuned for live. The split between a short manifest TTL and a longer segment TTL is what keeps playback smooth:

WhatPatternTTLWhy
Manifests~* \.(m3u8|mpd)$2sThe live edge advances every segment, so manifests change constantly and must stay fresh.
Segments~* \.(ts|m4s)$10sSegments are immutable within the rolling window, so they can be held a bit longer.

:::danger Do not over-cache live manifests Manifests must stay fresh because the live edge advances every segment — over-caching a manifest stalls playback. Caching segments longer than needed gains nothing because they are immutable within the rolling window. Keep the 2s manifest / 10s segment split. :::

These are system rules on the managed backing property. To inspect them, open the property from the stream's Endpoints tab. Treat them as the template for any custom HLS/DASH caching you write elsewhere — see HLS rule examples and DASH rule examples for the actual rule definitions.

CORS

A system header rule sets Access-Control-Allow-Origin: * on responses so browser-based players (hls.js, dash.js) can fetch the manifest and segments from any origin. No extra configuration is needed for web playback.

Next steps