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
| Format | URL |
|---|---|
| HLS | https://<key>.prdrm.net/master.m3u8 |
| DASH | https://<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:
| What | Pattern | TTL | Why |
|---|---|---|---|
| Manifests | ~* \.(m3u8|mpd)$ | 2s | The live edge advances every segment, so manifests change constantly and must stay fresh. |
| Segments | ~* \.(ts|m4s)$ | 10s | Segments 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
- Live streaming overview — the end-to-end model and stream lifecycle.
- HLS rule examples and DASH rule examples — the cache rules behind live delivery.