Christian PillsburyandClaude Opus 4.8 557d8bd72f refactor(spf): drive live reload via a RecurringRunner instead of an epoch signal (WIP)
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>
2026-06-25 09:59:24 -07:00
2026-05-19 12:48:40 -07:00
2026-04-15 15:28:38 -07:00

Video.js v10

package-badge discord-badge pnpm

Modern, modular, and composable media player framework for Web and React.

🚧 Beta - close to stable. Experimental adoption in real projects. 🚧

Video.js v10 is close to stable. Try it out in real projects and share your feedback 🙏.

Timeline

  • Technical Preview (Complete): Initial showcase for Demuxed.
  • Alpha (Complete): See milestone
  • Beta (Complete): See milestone
  • GA (Mid 2026): See milestone ← WIP
  • Video.js (End of 2026): Video.js core/contrib parity and supported plugins migrated.

Documentation

If you'd like to get started and learn more, you can find our documentation on our website:

Community

If you need help with anything related to Video.js 10, or if you'd like to casually chat with other members:

Contributing

We'd love for you to join our community channels above and give us feedback! Feedback on any of the following would help us:

  • Player skin designs
  • Component structures and APIs
  • Package structure and exports
  • Repo, workspace, contributor guides

Please see our contributing guide for getting set up locally and making code or docs changes.

Code of Conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

S
Description
[Beta] Video.js v10 - open source media player framework for Web and React.
Readme
57 MiB
Languages
TypeScript 81.9%
MDX 10.9%
CSS 2.6%
Astro 2.5%
JavaScript 1.2%
Other 0.8%