橙色交通锥辨识度太高,反倒遮住了 VideoLAN 最有意思的一面。VLC 只是公众入口。播放器背后,还有可嵌入的引擎、各类语言绑定、编解码程序、光盘库、广播工具,以及一个让这些项目共享组织归属的非营利组织。有些组件随 VLC 一同发布;另一些组件的价值,恰恰在于其他应用可以单独采用它们,同时保留自己的界面。[1][2]

正因各层用途有别,理解 VideoLAN 需要一张生态图;只把它看成一个著名下载项目,会遗漏许多重要关系。这张图分为四层:用户直接操作的 VLC 应用;向其他软件开放播放引擎的 libVLC;dav1d、x264、libdvdnav 和 libbluray 等专用库;以及把项目、贡献者、商标、活动与资金联结起来的治理层。各层彼此交叠,承担的任务各不相同。弄清问题应归哪一层处理,可以避免工程团队为了一个解码器引入整套媒体技术栈,也可以避免团队真正需要维护完善的播放器引擎时,还在自行拼装底层零件。

VLC 是集成与分发界面

VLC 把纷杂的媒体世界封装进一个应用:文件、网络流、字幕、硬件解码器、渲染器、音频设备、播放列表、滤镜和各平台专用界面,全都收在一个熟悉的播放按钮背后。也正是依托这层界面,VideoLAN 才能把自己的社区描述为横跨 40 个国家的开发者群体,项目范围也从流媒体工具延伸到编解码器和光盘库。[1] 用户也因此常把每一项能力都归到“VLC”名下,实际工作却经常发生在与其他软件共享的库中。

当前的 3.0 版本页面直观呈现了维护负担。页面称 VLC 3.0.23 为 Vetinari 分支的第 24 次更新,列出的工作既有第三方库更新,也有解复用器稳定性和安全修复,还感谢德国主权科技基金(Sovereign Tech Fund)对维护工作的资助。[8] 成熟播放器更像一套持续对齐各方变化的发行系统:上游编解码器不断演进,操作系统逐渐老化,文件解析器直面恶意输入,数百个模块仍须共同给出一致的用户体验。

这就是 VLC 在整个体系里的角色:承担集成与分发。若任务是“给用户一个跨平台播放器”,VLC 这一层便是直接答案。若任务是“在自家产品中嵌入可靠的播放能力”,下一层更切题。

libVLC 把播放器变成引擎

VideoLAN 将 libVLC 描述为 VLC 底层的核心引擎,也是一套可嵌入其他应用的接口。它是依照 LGPL 2.1 发布的 C 库,拥有数百个运行时加载的插件,版本线跟随 VLC 应用:版本 3 是稳定线,版本 4 是开发线。官方绑定把这套 C 接口延伸到 C++、Objective-C 与 Swift、Java 与 Kotlin 以及 .NET;社区绑定又把它带入 Python、Rust、Go 等语言环境。[2]

这套 API 清楚展示了“嵌入 VLC”的实际含义。应用先用 libvlc_media_player_new 创建媒体播放器对象,通过 libvlc_media_player_set_media 指定媒体,再以 libvlc_media_player_event_manager 获取事件管理器,最后调用 libvlc_media_player_playlibvlc_media_player_set_pause 等函数控制播放。[3] 宿主应用掌握产品界面与生命周期,libVLC 则负责界面背后的媒体处理。

这种抽象层次与从 shell 启动 VLC 程序截然不同。产品拿到的是播放器引擎,用户界面仍归产品自己掌握。当广泛的格式与网络支持比从单个元素自行拼出媒体管线更重要时,libVLC 很有吸引力。相应代价同样具体:产品会接手 libVLC 的原生部署、插件打包、平台集成、主版本迁移和事件驱动生命周期。“VLC 已经能播放它”足以证明能力存在,距离部署计划仍有一段路。

dav1d 与 x264 分居编解码通道两端

专用编解码项目让这张图更不寻常。dav1d 是 AV1 解码器,由 VideoLAN 与 FFmpeg 社区共同开发,并由开放媒体联盟(Alliance for Open Media)赞助。它的目标集中而基础:高速、小巧、便于移植、正确处理多线程,并采用宽松的 BSD 二条款许可证。[4] 播放器窗口、播放列表和容器工作流都在它的职责之外。它把 AV1 比特流解码成图像,交给调用它的应用或框架。

x264 位于通道的另一端。它是一套将视频编码为 H.264/AVC 的库和命令行应用,能够控制码率、参考帧、B 帧、延迟与心理视觉优化。官方页面也明确写出分发范围:x264 可依照 GPL 或商业许可证使用,许多 VLC 以外的应用与服务也在使用它。[5]

把 dav1d、x264 与 VLC 并列,VideoLAN 的实际轮廓随之显现。它的工作远远超出为自家播放器积累功能,还会在媒体链路中职责划分明确的环节托管可复用代码。浏览器、编辑器、转码器、流媒体服务或硬件产品都可以采用其中一个库,而它们的用户始终看不到交通锥。反过来,选择 libVLC 以后,编解码器来源和许可证审查仍然存在,只是被放到了更宽泛引擎的下层。

VideoLAN 与 FFmpeg 的关系进一步说明了这一点。FFmpeg 既开放 ffmpegffplayffprobe 等命令行工具,也为开发者准备了 libavcodeclibavformatlibavfilter 等库,用于处理编解码器、容器、协议与媒体加工。[9] 因此,VideoLAN 与 FFmpeg 在不同层次会是合作者、上游、下游,也会成为彼此的备选方案。dav1d 明确由两个社区共同开发;x264 可经由 FFmpeg 使用;VLC 自己的开发者页面也把 FFmpeg 的 libavcodec 列入组件库。[4][5][13] “哪个项目胜出?”通常问错了方向。更有用的问题是,在正在开发的产品中,播放、转换、探查或某一种编解码任务,分别该交给哪个项目。

光盘库维系棘手的互操作性

这些光盘项目说明了小型库为何能在更广阔的多媒体公地中延续。libdvdnav 把 DVD 播放呈现为一串不时被导航事件中断的逻辑数据块流。应用反复请求下一个数据块,并对用户操作作出响应;DVD 虚拟机及其内部播放状态则由库封装。libdvdread 负责更底层的读取工作。[6] 这套 API 将菜单逻辑和交互式光盘行为集中在库内,供所有需要 DVD 导航的播放器复用。

libbluray 面向 Blu-ray 承担一项相关但独立的工作:导航、播放列表解析、菜单与 BD-J 支持。项目页面对能力范围写得格外清楚。规避 DRM 不在该库的能力范围内,因此仅凭它不足以播放受保护的商业光盘;AACS 与 BD+ 也在其承诺之外。[7] 法律与技术共同划出这条界线,把它明写出来也属于互操作工作的一部分。

即使流媒体占据消费者的注意力,这些库依然重要。几十年来,媒体软件不断接手旧格式、档案、专业收藏、信息亭、测试设备,以及用户对长期兼容的期待。可复用的导航库把维护工作集中在一处,让多款播放器共同受益。VideoLAN 的作用,在于正视这些麻烦,让每项麻烦都有名称明确的模块、源代码仓库、发布线与贡献入口。

相邻技术栈回答不同问题

两套相邻体系可以帮助我们看清 VideoLAN 的范围。任务若以检查、转换、过滤或底层组合为中心,FFmpeg 的命令行工具与 libav* 库最能发挥所长。[9] GStreamer 从另一个前提出发:应用以元素搭建管线,通过 pad 相连,协商媒体类型,再把插件组合成播放、采集、编辑、流式传输或其他数据流系统。[10]

libVLC 留给应用自行编排管线的空间较少,换来的是一套现成的播放引擎。GStreamer 让应用显式搭建图并负责协商。FFmpeg 则有一套深入处理格式、编解码器、滤镜与设备的工具箱和库。三者的适用范围彼此重叠,很难排成整齐的阶梯,同一产品也可以组合使用。选择取决于团队希望在哪一处掌握复杂度:

这张图的排序会随团队而变。延迟目标、硬件通路、移动端打包、许可证兼容性、安全更新责任,以及团队的原生代码经验,都足以改变答案。它的价值,在于把比较放到正确层次。

共同家园,以及清晰可见的人力集中

据 VideoLAN 介绍,项目于 2001 年转为开源,2009 年与巴黎中央理工学院(École Centrale Paris)完全分离,如今由一家自主的法国非营利组织支持,并设有成员名单公开的理事会。项目清单覆盖 VLC、libVLC、x264、dav1d、光盘库、组播与广播工具,以及其他多媒体项目。[1] 共同归属让这些项目得以延续,各仓库仍然保持独立,没有被合并成一个单体产品。

这些项目背后的劳动力与资金来源更为分散。VideoLAN 主席让-巴蒂斯特·肯普夫(Jean-Baptiste Kempf)在 2025 年 9 月的一次采访中表示,这家非营利组织一直由志愿贡献者持续改进;他本人每周仍投入约 30 到 40 小时。他还区分了协会与 2013 年起陆续成立的服务公司,后者雇用社区成员,并与商业客户合作。[11] 与此同时,最新的 VLC 3 维护版明确注明了公共资金支持。[8] 志愿劳动、商业服务与定向机构赞助是三条不同渠道,若把它们合并想象成供应商服务级别协议(SLA),便会误读 VideoLAN 的支持方式。

欧洲自由软件基金会(Free Software Foundation Europe)授予肯普夫的 2025 年欧洲 SFS 奖,同时映照出这种模式的力量与风险。奖项肯定他多年的维护工作,也肯定更广大的 VideoLAN 社区,并引用了他对多媒体社区资源有限的说明。[12] 即使应用声名远播,背后仍会集中依赖少数人的判断。采用方真正面对的图景,落在“一位英雄式维护者”与“庞大的匿名人群”这两种想象之外:一家小型机构协调可复用项目、专业贡献者、外部社区与阶段性资金,维系一套使用规模极大的软件。

这就是交通锥背后的多媒体公地。VLC 让公众看见它,libVLC 让其他产品借用引擎,编解码器与光盘库则让各个组件可以独立进入其他产品。相邻项目在各自抽象层相接处互操作,非营利组织为整个体系保留共同地址。看清这些层次之后,VideoLAN 更易评估,也远比一个“几乎什么文件都能打开”的播放器更有意思。

来源

  1. VideoLAN,“VideoLAN, a project and a non-profit organization”——项目历史、理事会、贡献者地域分布、托管项目与贡献渠道。
  2. VideoLAN,“libVLC”——引擎角色、运行时插件、许可证、版本线、支持平台,以及官方和社区绑定。
  3. VideoLAN,VLC 3.0 的 libvlc_media_player.h API 参考——媒体播放器创建、媒体指定、事件、播放、暂停与生命周期调用。
  4. VideoLAN,“dav1d”——AV1 解码器的范围、VideoLAN 与 FFmpeg 联合开发、赞助方、技术目标及 BSD 许可证。
  5. VideoLAN,“x264”——H.264/AVC 编码器的范围、功能、外部使用者,以及 GPL 与商业许可。
  6. VideoLAN,“libdvdnav & libdvdread”——DVD 导航 API、逻辑数据块流、事件处理与虚拟机封装。
  7. VideoLAN,“libbluray”——Blu-ray 导航、播放列表、菜单与 BD-J 的范围,以及规避 DRM 的限制。
  8. VideoLAN,“VLC 3.0.23 Vetinari”——VLC 3 的第 24 次更新、第三方库更新、稳定性与安全工作,以及主权科技基金的支持。
  9. FFmpeg,“About FFmpeg”——命令行工具,以及 libavcodeclibavformatlibavfilter 与其他开发库的作用。
  10. GStreamer Application Development Manual,“What is GStreamer?”——元素与管线模型、插件框架、媒体协商和应用范围。
  11. Adrien Tsagliotis,“VLC est le logiciel français le plus utilisé au monde”,Journal du Net(2025 年 9 月 18 日)——关于 VideoLAN 历史、志愿劳动、用户规模,以及协会与公司资金边界的独立采访。
  12. 欧洲自由软件基金会,“Jean-Baptiste Kempf receives the European SFS Award 2025 at SFSCON”——维护工作背景的独立资料,以及 NOI Techpark–Marco Parisi 按 CC BY-SA 4.0 授权的文章照片来源页。
  13. VideoLAN,“VLC media player”开发者页面——源代码、贡献流程,以及包含 FFmpeg libavcodec 在内的组件库清单。