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 文档目前不完整。