我收回了 Video.js 的控制权,16 年后我们重写了它,体积缩小了 88%
文章摘要
Video.js 的创始人 Steve Heffernan 在 2026 年 3 月发布了 Video.js v10.0.0 Beta 版本。这是一次从零开始的完全重写,不仅仅是 Video.js 本身的重写,还整合了 Plyr、Vidstack 和 Media Chrome 这四个开源视频播放器项目的力量。这些项目合计拥有超过 75,000 个 GitHub star,每月播放量达到数百亿次。
Steve 在 16 年前创建了 Video.js,最初目的是帮助从 Flash 到 HTML5 视频的过渡。虽然项目在众多贡献者的帮助下不断成长,但代码库和 API 一直反映着一个不同的 Web 开发时代。此次重建旨在使播放器现代化,既适应当今开发者的构建方式,也为下一个重大过渡——AI 增强功能和开发——奠定基础。
v10 的核心改进集中在以下方面:
体积大幅缩减:默认包体积缩小了 88%。这一巨大的节省主要来自将自适应比特率(ABR)支持解耦。即使在移除 ABR 后进行更公平的比较,v10 默认视频播放器(HTML 版本)仍然比前一版本小 66%。具体数据:Video.js v8 核心版 gzip 后 75.2 kB,而 v10 HTML 视频播放器仅 25.1 kB,React 版本更是只有 18.0 kB。背景视频场景下,HTML 版仅 6.9 kB,React 版仅 3.5 kB。
全新流媒体引擎 SPF:作为 v10 的一部分,团队启动了一个名为 SPF(Streaming Processor Framework)的新引擎项目。它基于函数式组件构建,可以组合成面向特定用途的、更小的流媒体引擎。例如,如果你有一个短视频应用且只需简单的自适应流需求,你的引擎不会包含 DRM 和广告相关代码。对于简单的 HLS 用例,Video.js v10 使用 SPF 的文件大小仅为 Video.js v8(含 ABR)的 19%。
框架原生支持:v10 提供了一流的 React、TypeScript 和 Tailwind 支持。架构上将核心逻辑与 DOM 渲染分离,使用基于 store 的状态管理系统(灵感来自 Zustand),使开发者可以使用熟悉的框架模式进行深度定制。团队还计划为 Svelte、Vue 等框架提供”地道的”实现。
可组合架构:从单体控制器转向可组合、可 tree-shake 的组件。开发者可以只打包所需的功能,构建自定义解决方案而不产生不必要的开销。
AI 友好设计:代码库和文档经过专门设计,使 AI 代理在协助构建播放器时能够表现出色。
HN 评论精华
Video.js 与原生 HTML5 Video 的区别:有用户质疑为什么还需要 Video.js,认为原生 HTML5 视频元素已经足够好了。回复者解释说,虽然原生元素确实有了很大改进,但 Video.js 提供了:跨浏览器一致的控件、分析和 DRM 等高级功能、可配置的界面、以及跨流媒体格式(MP4、HLS、DASH)和服务的统一 API。
包体积是否重要的争论:一些人质疑,对于动辄几 MB 的视频文件来说,更小的播放器包体积有什么意义。贡献者解释说,页面加载时间和视频启动时间对用户参与度至关重要,tree-shaking 确保只打包需要的功能。
流媒体格式讨论:社区讨论了 HLS 和 DASH 的优劣。评论者指出 HLS 在 iOS 上有广泛支持且 Chrome 近期也原生支持,而 DASH 在长时间流方面有技术优势。
字幕/无障碍功能:贡献者确认了可选的自定义字幕渲染计划,并提到目前出于包体积和法律考虑,依赖浏览器原生实现。有用户反馈了高对比度模式下的对比度问题和键盘导航限制。
多框架支持:用户询问了 Svelte、Vue 和 React Native 集成的计划。团队确认将提供多个框架的”地道”实现,通过将核心逻辑与 DOM 渲染分离来支持未来更多平台。