PipeWire 与 PulseAudio、JACK 是什么关系?
更新时间
PipeWire 不是要取代 PulseAudio 或 JACK 的“另一个音频系统”,而是一个低延迟、基于图的音视频处理引擎,它把 PulseAudio 和 JACK 原本各自负责的使用场景统一到同一套底层之上。按照官网的说法,PipeWire 的目标是“支持目前由 PulseAudio 和 JACK 分别处理的使用场景”,并对 PulseAudio、JACK、ALSA、GStreamer 应用提供无缝支持。也就是说,对普通应用而言,它尽量表现得像原来的系统;对底层架构而言,它是一层更通用的处理引擎。
三者的定位差异
| 维度 | PulseAudio | JACK | PipeWire |
|---|---|---|---|
| 主要场景 | 桌面音频播放、录音、混音 | 专业音频、低延迟实时处理 | 同时覆盖桌面与专业场景 |
| 架构 | 声音服务器 | 低延迟音频服务器 | 基于图的处理引擎 |
| 兼容方式 | 自身协议 | 自身协议 | 无缝支持 PulseAudio、JACK、ALSA、GStreamer 应用 |
| 安全模型 | — | — | 面向容器化应用设计,重点支持 Flatpak |
从表中可以看出,PipeWire 的定位是“统一层”:它既处理普通桌面音频,也处理实时多媒体,还让多进程应用能共享音视频内容。
为什么说它不是简单替代
官网明确列出了 PipeWire 的能力范围:
- 以最小延迟进行音频和视频的采集与回放
- 对音频和视频进行实时多媒体处理
- 多进程架构,让应用之间共享多媒体内容
- 无缝支持 PulseAudio、JACK、ALSA 和 GStreamer 应用
- 支持沙箱化应用,主要面向 Flatpak
关键在于最后两点。PipeWire 被设计成能与现有生态共存:PulseAudio 应用和 JACK 应用不需要被重写,就能在 PipeWire 上运行。同时,它把“与音视频设备交互”这件事放进了更强的安全模型里,使容器化、沙箱化的应用也能方便地访问设备——这是 PulseAudio 和 JACK 时代没有作为核心目标考虑的问题。
对使用者的实际含义
如果你只是普通桌面用户,发行版里的 PipeWire 通常已经能接管 PulseAudio 的日常音频工作。官网提到,支持音频用例的 PipeWire 应该已在大多数发行版中可用,但“大多数发行版不会默认启用音频部分”,需要按文档运行示例来验证。
如果你在做专业音频或低延迟工作,PipeWire 对 JACK 的兼容意味着原有 JACK 工作流有机会迁移到同一套引擎上,而不必同时维护两套音频栈。
想进一步确认时看哪里
- 获取与构建:官网 “Getting PipeWire” 一节给出了从 GitLab 克隆源码的方式,以及基于 Meson 的构建流程(
./autogen.sh --prefix=$PREFIX、make、make install)。官网建议不要直接安装这类构建,唯一开箱即用的$PREFIX是/usr,更推荐构建发行版包或直接从构建目录运行。 - 运行测试:在源码目录用
make run测试 PipeWire 服务器;用make shell设置环境变量后,可运行builddir/src/examples/video-play等示例。官网提醒,必须设置正确的环境变量,否则插件和模块会找不到。 - 文档:PipeWire 的文档、开发者 API 文档(官网注明尚不完整)以及 wiki 页面,都可以从官网的 Documentation 一节进入。
一句话总结:PipeWire 用一套图式处理引擎,把 PulseAudio 的桌面音频场景和 JACK 的低延迟专业场景收拢到一起,并通过兼容层让既有应用继续工作,同时补上了面向沙箱应用的安全模型。