wai: HTTP playlists, live delivery and rendition switching — one renderer, sealed playlists, strict signatures #175
Loading…
Reference in a new issue
No description provided.
Delete branch "wai/w3-4-playlists-abr"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
HTTP playlists, live delivery and rendition switching: one HLS and one DASH renderer for every packager, playlists sealed in a receipt that a live client can follow through skipped revisions, and integer rendition switching whose every decision is reproducible.
EXTINF.wai http mpdtakes the classical MPD's timescale and period, and its output is checked for adjacency.dash_readreads the stated XML subset (Appendix I).wai::sig::verify_strictrefuses non-canonical and small-order keys and small-order R, and checks S < L. The playlist receipt uses it, and the Python verifier refuses the same.unmet.http-conformance/gains playlist, live, DASH, signature and switching cases.http_verify.pyandwai_http_vectorsagree on every case.falsify/run.sh, run in CI.Checked locally on macOS arm64:
http_verify.py;falsify/run.sh;The forge CI runs on this pull request.
🤖 Generated with Claude Code
The wai CLI writes a variant's WAI media playlist aligned with its classical one and wai.m3u8 (union, floor, computed bandwidths) from an objects list, and wai.mpd on the same timeline; seal-playlist writes mr/<manifest_hash>.json for a playlist in its rendered form (with --parent for a live revision); check-playlist reports signed, or the reason it is not, and checks the parent and adjacency. Without video_manifest the two receipt commands say so. The origin serves .m3u8 and .mpd to be revalidated on every use. hls::{WaiSegment, WaiPart, WaiLayer}::of build entries from envelopes, a layer's N from its refines.layer. Co-Authored-By: Claude Opus 5.5 <[email protected]>One HLS and one DASH renderer for WAI: wai-pack's floor playlist, masters, WAI multivariant and media playlists and both MPDs are now written by wai::hls_render::render_hls_with, http_binding::hls::{wai_media_playlist, render_multivariant} and http_binding:💨:render_mpd; the WAI media playlist is wai_media_playlist over the floor playlist, so its adjacency is checked as it is written. Every golden byte is unchanged but one line, by the generator (wai-pack conformance regen), for http-delivery: - the classical master's variant is ../classic/floor-<c>.m3u8, which resolves to the same playlist from every class's directory, so each class's master is the classical one with only the session-data line added (http-delivery §11.1, §11.8: no other line changes); before, each class's master rewrote the variant URI; - a #WAI-LAYER line follows its segment's EXTINF, before the URI (http-delivery §10.4, where its reader finds it); before, it followed the URI, where a reader takes it as the next segment's. The golden lists no layer, so no golden byte moves for this. packaging §8.3 and pack_verify.py say and derive the same; pack_verify.py holds 540/540, wai-pack conformance check holds every vector, clippy is clean under -D warnings, and the catalog test reads the layered playlist with http-delivery's reader, holds it adjacent to the floor's, and holds a class's master to the classical one. Co-Authored-By: Claude Opus 5.5 <[email protected]>05783dbb) into wai/w3-4-playlists-abr: wai-pack's catalogs re-ported onto the one HLS and DASH renderer dfa465020c