PipeWire 是什么?Linux 音视频处理的统一层
更新时间
PipeWire 是一个面向 Linux 的音视频处理项目,目标是统一并改进 Linux 下音频和视频的处理方式。它提供一个低延迟、基于图的处理引擎,运行在音视频设备之上,用来覆盖目前由 PulseAudio 和 JACK 分别处理的用例。如果你在 Linux 上遇到音频服务割裂、Flatpak 应用访问声卡困难、或需要同时兼顾普通播放和实时音频处理,PipeWire 就是为这类场景设计的。
它解决什么问题
传统 Linux 音频栈长期分成两条路线:
- PulseAudio:面向桌面普通播放和录音,易用但对专业低延迟场景支持有限。
- JACK:面向实时音频处理,延迟低但配置复杂,不适合日常桌面。
PipeWire 的设计目标是把这两类需求合并到同一个引擎里,同时兼容已有的 ALSA、GStreamer 应用。它的核心特征包括:
| 特征 | 含义 |
|---|---|
| 低延迟 | 捕获和播放音视频时延迟尽量小 |
| 基于图 | 音视频流以节点和连接的形式组织处理 |
| 多进程架构 | 多个应用可以共享多媒体内容 |
| 兼容性 | 无缝支持 PulseAudio、JACK、ALSA、GStreamer 应用 |
| 沙箱支持 | 便于容器化应用访问音视频设备,主要面向 Flatpak |
安全模型是它区别于早期方案的一点:PipeWire 被设计成让容器化应用也能方便地与音视频设备交互,Flatpak 应用支持是首要目标。官方把 PipeWire 与 Wayland、Flatpak 并列,视为未来 Linux 应用开发的核心构建块。
如何获取和运行
大多数发行版已经提供支持音频用例的 PipeWire,但很多发行版默认没有启用音频部分。也就是说,装上不等于已经在用,需要确认发行版是否已切换。
如果想从源码获取,最新代码在 GitLab:
git clone https://gitlab.freedesktop.org/pipewire/pipewire.git
PipeWire 使用 Meson 构建系统,官方提供了便捷脚本和 makefile:
./autogen.sh --prefix=$PREFIX
make
make install
官方明确建议尽量不要安装这类构建,因为开箱即用唯一可用的 $PREFIX 是 /usr。更推荐的做法是构建自定义发行版包,或者直接从构建目录运行而不安装。
从源码目录测试服务器:
make run
在另一个窗口测试 SDL 视频捕获和显示:
make shell
这一步会设置好环境变量,让你能从构建目录运行示例程序,例如:
builddir/src/examples/video-play
常见卡点:如果不按上述方式设置正确的环境变量,插件和模块会找不到,示例程序无法正常运行。
文档和参与
- 官方文档:PipeWire 官网的 Documentation 部分
- API 文档:面向开发者,官方说明是不完整的
- Wiki:PipeWire wiki 上有一系列其他有用页面
PipeWire 是自由软件。想参与开发可以从官网的 Get Involved 部分入手。
你该不该关注它
- 普通桌面用户:如果你的发行版已默认启用 PipeWire 音频,你大概率已经在用它,无需额外操作。
- Flatpak 用户:PipeWire 的沙箱支持正是为这类场景准备的,遇到应用访问音视频设备的问题时值得检查是否运行在 PipeWire 上。
- 实时音频/专业用户:它试图用一套引擎替代 PulseAudio + JACK 的组合,适合评估是否迁移。
- 开发者:可以关注它的图模型和 API,但要注意 API 文档目前不完整。