Skip to content

Archive playback

The recorded archive is available over the same protocols as live: HLS and DASH. There is also an API for querying recorded ranges and previews.

Archive playback works only for streams with recording enabled (dvr) — otherwise the request is rejected with a clear error.

Rewind

A playlist rewound N seconds back from now:

http://server/streaming/v/<stream>/rewind/<seconds>/index.m3u8

For example, rewind/3600/ is a one-hour timeshift. Rewind seamlessly stitches the archive to the live edge: the playlist starts in the archive and continues with live, with no duplicates or gaps at the seam; LL-HLS (blocking reload, delta updates) keeps working. Recording gaps become a standard EXT-X-DISCONTINUITY.

Playback by absolute time

The archive interval is set with from/to parameters (UTC in milliseconds) on the regular URLs:

http://server/streaming/v/<stream>/index.m3u8?from=<utc_ms>&to=<utc_ms>
http://server/streaming/v/<stream>/Manifest.mpd?from=<utc_ms>&to=<utc_ms>

The archive HLS playlist is a closed VOD playlist. In DASH, recording gaps become Periods, and the timeline is selected with ?timeline=compact|wallclock — see DASH.

Which ranges are recorded

Recorded intervals are served by the HTTP API:

http://server/streaming/dvr-range/<stream>
http://server/streaming/dvr-ranges/<stream>

Note

TODO: dvr-range / dvr-ranges response format.

Archive frame previews

  • A JPEG frame from the screenshot track: http://server/streaming/dvr-preview-jpeg/<stream>/<track>/image/<utc_ms>.jpg
  • An MP4 fragment of an archive moment: http://server/streaming/dvr-preview-mp4/<stream>/<utc_ms> — a short fragment from a keyframe; the server picks the lowest-resolution track for the preview itself.

Next steps