Internal QA

HLS video-quality floor test

The homepage hero clip, played with the theme's real attach logic — native HLS on Safari/iOS, hls.js startLevel:-1 elsewhere; muted, looping, click-to-play. “As shipped today” uses the full adaptive ladder (starts low, ramps up). Each floor pins one rendition via ?clientBandwidthHint=. Open DevTools → Network (filter .ts) and try the throttling dropdown to watch the adaptive card ramp while the pinned cards hold steady. The number under each video is the actual decoded resolution.

This browser's HLS path: detecting…

Hybrid upgrade · adaptive → measured floor → pinned hot-swap the proposed approach, fully instrumented

Click to start. A (adaptive) paints fast at 240p; once it settles on the rung your connection sustains, B is created pinned to that rung, played hidden (to stress the iOS multi-decoder question), and crossfaded in when buffered — then A is released. Every decision and event is logged below. Watch A paused unexpectedly on a real iPhone — that's the go/no-go signal.

Desktop cut · 16:9 (hybrid)

A = adaptive (shown) · B = pinned to the rung A settles on, preloaded & crossfaded in

idle
A: · B: · B buf: · visible:

          

Mobile cut · 9:16 (hybrid)

A = adaptive (shown) · B = pinned to the rung A settles on, preloaded & crossfaded in

idle
A: · B: · B buf: · visible:

          

Cache-reuse test · does our fetch() prime the player's cache? run on a real iPhone — the go/no-go for the prime-then-pin design

(1) fetch() every segment of a rung to prime the HTTP cache, timing it. (2) point a fresh <video> at that same pinned rung and time how long until it's fully buffered. If step 2 is ~instant vs the prime time, the player reused our cache. ⚠ Each rung is only a valid cold test on its first run — reload the page to retest.

Cut:
Prime mode:
— pick a rung to test —

    

Desktop cut · 16:9 Served ≥750px. UID cd26e16f

As shipped today (adaptive)

Full ladder 240p→1080p · startLevel:-1

Decoded: · Start: ABR log:

Floor: 240p

Pinned 426×240 @ 0.68 Mbps · hint=0.68

Decoded: · Start:

Floor: 360p

Pinned 640×360 @ 1.07 Mbps · hint=1.07

Decoded: · Start:

Floor: 480p

Pinned 852×480 @ 1.70 Mbps · hint=1.70

Decoded: · Start:

Floor: 720p

Pinned 1280×720 @ 3.60 Mbps · hint=3.60

Decoded: · Start:

Floor: 1080p

Pinned 1920×1080 @ 8.99 Mbps · hint=9.00

Decoded: · Start:

Mobile cut · 9:16 Served <750px. UID 8381e689

As shipped today (adaptive)

Full ladder 240p→1080p · startLevel:-1

Decoded: · Start: ABR log:

Floor: 240p

Pinned 240×426 @ 0.77 Mbps · hint=0.77

Decoded: · Start:

Floor: 360p

Pinned 360×640 @ 1.20 Mbps · hint=1.20

Decoded: · Start:

Floor: 480p

Pinned 480×852 @ 1.84 Mbps · hint=1.84

Decoded: · Start:

Floor: 720p

Pinned 720×1280 @ 3.56 Mbps · hint=3.55

Decoded: · Start:

Floor: 1080p

Pinned 1080×1920 @ 6.51 Mbps · hint=9.00

Decoded: · Start: