WirePlumber:新的 PipeWire 会话管理器

Fedora Workstation 35 引入了一个新的会话管理器 管线电线管工. 那么 PipeWire 会话管理器做什么以及 WirePlumber 的特别之处是什么? 为了回答这个问题,我们采访了 George Kigiadakis。 George 是 WirePlumber 的主要作者,他可以告诉我们,在 WirePlumber 作为新的官方 PipeWire 会话管理器之后,将会有哪些激动人心的事情发生。

Christian Schaller:嗨,George,感谢您抽出宝贵时间与我们交谈。 您能否先向我们介绍一下您自己以及您是如何开始使用开源的?

George Kiagiadakis:你好 Christian,感谢你邀请我参加这次采访。 关于我自己,我能说些什么……我是一名高级软件工程师,在 协作 多媒体项目,如 PipeWire 和 GStreamer 11年了。

大约在 2003 年左右,当我回到高中时,我开始接触开源,当时我拿到了一张包含 Mandrake 7.2 的 iso 映像的 DVD。 我很想知道那是什么,所以我按照说明安装了它,但并没有真正理解我在做什么。 显然,我使我的 Windows 安装无法启动,所以我强迫自己使用 Mandrake 连接到互联网并找到有关如何恢复 Windows 的说明……我真的很喜欢它! 最终,我阅读了更多关于这个陌生环境的信息,当我意识到我可以修改这个系统中的任何东西……实际上任何东西……我很激动! 难以置信的感觉。 从那以后我再也没有回头……

Christian Schaller:您第一次听说 PipeWire 是什么时候?到目前为止,您对该项目及其周围社区的印象如何?

George Kiagiadakis:我不完全记得我第一次听说 PipeWire 是什么时候,但我记得我是在 2018 年夏天左右开始研究它的…… 当时我正在从事一个涉及 PulseAudio 的项目,其中包含一些繁琐的逻辑,我完全不相信这是未来前进的正确方式。 所以,我开始寻找替代品,我看到了 PipeWire 的巨大潜力,当时它还处于音频领域的早期阶段。 我做的下一件事是预订自己参加那年秋天举行的第一次 PipeWire hackfest,Wim 向我们解释了这一切是如何运作的,而且非常有意义。

关于该项目及其社区,我能说的第一件事就是我很高兴成为其中的一员! 这是一个相对较小的社区,但非常活跃和热情。 每个人都彬彬有礼,有耐心,乐于助人。 我也对事情完成的速度感到惊讶,尤其是当 Wim 参与时。 在我们讨论完一个问题之前,他很可能已经解决了它……

Christian Schaller:WirePlumber 的起源是什么? 您认为需要解决的最初问题是什么?

George Kiagiadakis:WirePlumber 最初是为在 汽车级 Linux (AGL) 项目,其中需要解决的问题主要是不同音频流之间的仲裁问题。 有,对于 example,一个在你的车里播放音乐的应用程序,同时还有一个 GPS 导航应用程序试图帮助你导航。 当导航应用程序需要与您交谈时,它需要清晰可听,因此音乐必须通过降低音量或暂时暂停来进入背景。 或者当您接到电话时,音乐必须暂停。 这些是许多嵌入式设备中的典型场景。 例如,我们的智能手机有类似的逻辑。

在 PipeWire 之前,用 PulseAudio 解决这个问题很困难。 它需要开发自定义组件来定义所有规则和逻辑并规避许多现有行为。 太糟糕了,人们甚至试图解决它并为规则使用类似的组件,但直接在 ALSA 上,而其他人则尝试使用 杰克,这实际上更好,因为它允许外部应用程序 – 所谓的会话管理器 – 定义所有这些规则而不规避任何东西,但有几个限制。 汽车和其他领域的实际生产系统使用所有这些上述解决方案,但没有一个是理想的。

使用 PipeWire,这要容易得多,因为就像 JACK 一样,所有这些逻辑都可以在这个外部应用程序(会话管理器)中定义。 但 PipeWire 也解除了 JACK 的所有限制,例如与 PulseAudio 应用程序的兼容性、在某些情况下可能成为问题的固定延迟或 JACK 无法使用不同的音频格式或将编码音频传递到硬件。

因此,在评估了所有这些解决方案之后,使用 PipeWire 似乎是一个好主意。 唯一缺少的是能够实现所有这些逻辑的会话管理器。 这就是 WirePlumber 的想法诞生的时候。

Christian Schaller:你有没有一些很好的例子来说明 WirePlumber 可以为桌面上的人们做的事情,而这些事情以前是不可能或难以做到的?

George Kiagiadakis:首先,让我说,为了将 WirePlumber 带到桌面,我们试图让它的行为与 pipewire-media-session 完全相同,而 pipewire-media-session 的行为又类似于 PulseAudio,因此从一个到另一个的转换不会改变人们习惯在他们的桌面上的体验。 所以,在切换到 WirePlumber 之后,您首先会意识到……没有什么不同。 但是……在幕后,有区别。

最有趣的区别是 WirePlumber 的大部分管理逻辑都是用脚本编写的,使用 卢阿 语言。 这些脚本可以在现场进行修改和扩展,比修改 pipewire-media-session 的 C 代码要容易得多。 这意味着用户现在可以自定义 PipeWire 设置的行为以更好地满足他们的需求。 如果需要,甚至可以在桌面上使用汽车/移动逻辑。 然而,这并不意味着修改这些脚本是小菜一碟,或者一切都像魅力一样。 仍然存在粗糙的边缘和许多可以改进的地方,以使其成为一个很棒的功能。 我希望现在 WirePlumber 成为其中的一部分 Fedora 35,我们将能够获得有关此功能的更多反馈并对其进行改进。

值得一提的是,WirePlumber 还能够在会话管理器的上下文之外独立执行 Lua 脚本,此外它还带有一个基于 GObject 的库,该库提供了一个相对简单的 API 来控制 PipeWire 中的事物。 这使高级用户可以更轻松地编写他们经常在 PipeWire 中执行的任务,并让应用程序开发人员更轻松地让他们的应用程序与 PipeWire 交互。

当然,该库是完全可自省的,这意味着还可以通过 GObject-introspection 使用 WirePlumber 的库,以 Python 或 Javascript 等语言编写脚本或应用程序。

Christian Schaller:这听起来很酷,但要明确一点,您是说可以使用这些 Python 绑定来完成像 Ardor 或 Carla 这样的应用程序吗? 还是您在谈论更具体地控制会话的应用程序?

George Kiagiadakis:不,这个库不是用来编写像 Ardor 或 Carla 这样的媒体应用程序的。 它只提供控制会话的功能,因此它适合编写诸如 pavucontrol 替换之类的东西,或者可能是一个脚本来自动执行诸如切换某些卡配置文件之类的任务,例如 example,但不涉及实际的媒体流。 我们还有其他 API 可以做到这一点。

Christian Schaller:WirePlumber 未来有什么主要的功能计划,或者你会说它在这一点上是相当完整的功能吗?

George Kiagiadakis:在不久的将来没有重大计划,但这绝对不意味着 WirePlumber 功能齐全。 有很多我想改进的地方,还有一些关于新功能的想法。

现在困扰我的是配置系统,这可能是第一件要改变的大事。 理想情况下,这应该与 PipeWire 统一,以便可以类似地配置整个堆栈,并且还值得探索将某些选项潜在地集成到各种桌面环境的设置对话框中。

另一个感兴趣的领域是探索引入更多用于嵌入式系统的策略——我在 example 与汽车 – 放到桌面上。 PulseAudio 已经在尝试做类似的事情,但我认为 WirePlumber 可以实现更多,因为通过提供的脚本机制,桌面环境更容易实现自己的定制和行为,这些定制和行为适合环境的 UX .

当 JACK 应用程序用户使用 PipeWire 作为他们的 JACK 服务器时,还有一些想法可以改善他们的体验。 现在的典型情况是,您需要一个 JACK 会话管理器与 WirePlumber 一起运行以管理 JACK 应用程序,而 WirePlumber 只处理 PipeWire 和 PulseAudio 应用程序。 我认为我们可以做得更好,至少在某些用例上是这样。

最后,我确信随着 PipeWire 的发展,将会出现更多有趣的想法和功能,尤其是在视频领域。

Christian Schaller:您想在 PipeWire 中使用任何非 WirePlumber 功能吗? 喜欢您个人想念或希望看到改进的东西?

George Kiagiadakis:说实话,没有什么可错过的,这要归功于每个人都付出了巨大的努力,使 PipeWire 在功能方面与 PulseAudio 相提并论,尤其是提供了如此多宝贵反馈的早期采用者。 但是,我确实有一些我想努力的事情。

第一个是网络流支持。 我在 PulseAudio 中使用过这个功能无数次,但总会有一些烦恼,尤其是在 wi-fi 连接上,因为使用的底层协议并不是真正适用于不可靠的连接。 PipeWire 目前也陷入了同样的错误,试图兼容,但我认为它可以做得更好。

然后还有一个我想继续研究的宠物功能,那就是对流淡入淡出的支持。 我的同事 Julian 和我去年曾在这方面工作,我们甚至在应用程序之间进行了交叉淡入淡出,由 WirePlumber 控制,但它只是部分合并,然后被其他优先事项搁置。

最后但同样重要的是,我期待新的视频相关功能,从改进与 libcamera 的集成开始,让现代相机成为 linux 桌面上的一等公民。 这些完全是未知的水域,我很想将脚趾浸入……