mirror of
https://github.com/zoriya/v10.git
synced 2026-08-15 18:34:22 +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/spf
⚠️ Beta Experimental adoption in real projects.
Overview
@videojs/spf is a lightweight, bundle-size-optimized streaming engine for Video.js 10. It provides
HLS playback with adaptive bitrate switching, WebVTT captions, and MSE support.
Community
If you need help with anything related to Video.js 10, or if you'd like to casually chat with other members: