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.