mirror of
https://github.com/zoriya/v10.git
synced 2026-08-11 08:29:47 +00:00
Replace the signal-as-event live-reload scheduler with a runner-driven model. The `resolveTrack` loader schedules its resolve work on a new `RecurringRunner` that re-runs the task on an injected `reschedule` policy; the separate `scheduleTrackReload` behavior and its per-type reload-epoch signals are deleted. Core (`core/tasks`): - `Task.run()` is now memoized (runs once, shares the result across calls) and gains `clone()` (fresh, pending, structurally identical) — added to `TaskLike`. - `RecurringRunner`: single-slot, id-keyed (dedup same id / abort-and-replace on new id), time-free. Each cycle runs `Promise.all([task.run(), reschedule(task, previous, signal)])` and re-runs a `clone()` while reschedule resolves `true`. - `Reschedule<T> = (task, previous, signal) => PromiseLike<boolean>` — invoked concurrently with the run, observes it via the memoized `run()`, owns its delay. - `delayedReschedule(cadence)` builds a Reschedule from a pure ms-cadence fn, start-anchored (subtracts the run's elapsed) so reloads are measured from load-start per RFC 8216 §6.3.4, preserving half-on-unchanged. Supporting: - `@videojs/utils/time`: add cancellable `sleep(ms, signal)`. - `media/hls/reload-policy`: `mediaPlaylistReloadDelay` (pure cadence; relocated scheduler logic — target-duration, half-on-unchanged, stop-on-ENDLIST, retry). - `resolve-track`: baked universal completeness gate + injected `reschedule`; engine composes `delayedReschedule(mediaPlaylistReloadDelay)`. WIP: not fully validated end-to-end against a live stream through this path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@videojs/utils
⚠️ Beta Close to stable. Experimental adoption in real projects.
Community
If you need help with anything related to Video.js 10, or if you'd like to casually chat with other members: