Linux音频之PipeWire初识

背景

PulseAudio 长期以来是 Linux 主流音频解决方案,而 PipeWire 是新一代音频服务器,已经在逐渐取代 PulseAudio,提供更强大的功能和更低的延迟。

PulseAudio 主要面向普通消费级应用,提供简单的音频管理功能。PipeWire 则集成了 JACK 的功能,支持专业音频处理需求,允许用户直接调整缓冲区大小,从而实现更低的延迟。此外,PipeWire 支持多线程处理和高效的资源调度,在复杂音频流处理场景中表现更优。

另外,PipeWire 已经支持了蓝牙 LE Audio:https://www.bluez.org/le-audio-support-in-pipewire/
所以,今天想简单来看看 PipeWire

PipeWire简介

PipeWire 是一个旨在大幅改善 Linux 系统下音频与视频处理的项目。它在音频和视频设备之上提供了一个低延迟、基于图形的处理引擎,可用于支持目前由 PulseAudio 和 JACK 共同处理的各种使用场景。PipeWire 采用了一种强大的安全模型,使得来自容器化应用的音频与视频设备交互变得轻松便捷,其中对 Flatpak 应用的支持是首要目标。与 Wayland 和 Flatpak 搭配使用,我们期待 PipeWire 能够成为未来 Linux 应用开发的核心基础组件。

  • 以最小延迟实现音频与视频的捕获与播放。
  • 对音频与视频进行实时多媒体处理。
  • 多进程架构,让应用程序能够共享多媒体内容。
  • 无缝兼容 PulseAudio、JACK、ALSA 和 GStreamer 应用程序。
  • 支持沙箱化应用。更多信息请参阅 Flatpak。

主要组件:

  • 一个实现 IPC 和图形处理的 PipeWire 守护进程
  • 一个示例 PipeWire 会话管理器,用于管理 PipeWire 守护进程中对象
  • 一组用于检测和使用 PipeWire 守护进程的程序
  • 一个用于开发 PipeWire 应用程序和插件的 PipeWire 库(教程)
  • PipeWire 守护进程和 PipeWire 库均使用的 SPA(简单插件 API)

官网: https://www.pipewire.org/

pipewire.gif

快速切换PipeWire

安装PipeWire及相关必要组件

#添加 PipeWire 的 PPA 存储库,如果你系统软件源里已自带,这一步可以略过,但版本可能不是最新的
sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
sudo apt update

#安装相关软件包
sudo apt install pipewire pipewire-audio-client-libraries

如果需要支持蓝牙、GStreamer 或 JACK,请安装额外的库:

sudo apt install gstreamer1.0-pipewire libspa-0.2-{bluetooth,jack,modules}

禁用 PulseAudio 并启用 PipeWire

重启守护进程

systemctl --user daemon-reload

禁用 pulseaudio

systemctl --user --now disable pulseaudio.service pulseaudio.socket
systemctl --user mask pulseaudio

启用会话(Session)管理

以下会话管理器二选一:

  • 启用pipewire-media-session-service
    systemctl --user --now enable pipewire-media-session.service

注: pipewire-media-session包 已弃用且不再推荐使用,该组件主要作为测试用例和会话管理器开发参考.

  • 启用 WirePlumber 替代默认会话管理器:
    sudo apt install wireplumber
    sudo systemctl --user --now enable wireplumber.service

注: WirePlumber 是推荐的会话管理器,采用模块化设计,通过 Lua 插件实现实际管理功能。

重启

重启系统或者重启会话

确认切换结果

pactl info

输出中应显示 PulseAudio (on PipeWire x.x.x),表示 PipeWire 已成功替代 PulseAudio,如下图:
pipewire_info.png

恢复PulseAudio

如果需要恢复PulseAudio,直接执行以下命令:

systemctl --user unmask pulseaudio
systemctl --user --now enable pulseaudio.service pulseaudio.socket

以上已在 KylinOS 上验证通过。

一些GUI图形化工具

参考