Linux多媒体系统服务-PipeWire
2022-05-23 13:55:25 阿炯

PipeWire是一个 GNU/Linux 平台上的用来处理媒体系统的服务和用户空间的应用程序接口。其开发出来的目的是为了替代PulseAudio来处理多媒体,包括支持容器化应用的音频输出,和专业音频用例。使用C语言开发并在MIT许可证下使用。


它最常见的用途是为 Wayland 和 Flatpak 应用程序实现屏幕共享、远程桌面以及不同软件之间其他形式的音频和视频路由。根据它的官方FAQ,“可以把它看作是应用程序和库可以使用的驱动之上的多媒体路由层”。PipeWire 由红帽的 Wim Taymans 创建,开发工作最早可以追溯到 2015 年,这项技术最初被认为是 “视频领域的 PulseAudio",但后来随着 PipeWire 的发展,也被扩展到了音频领域。2021 年 4 月发布的 Fedora 34 成为了第一个默认采用了这项技术的 Linux 发行版,其他桌面 Linux 发行版之后也陆续跟进。它为 Linux 带来了许多好处,首先 PipeWire 的实现方式更新,开发也更加积极,其bug相对也就更少;其次它有着更好的硬件兼容性,还减少了 CPU 的使用,并有现代化的代码基础。


相较于 PulseAudio 专注于消费级音频和 JACK 专注于专业级音频,PipeWire 的目标是为所有级别的用户工作。在其他技术中,PipeWire 通过提供在不同的缓冲区大小之间动态切换的能力来实现这一目标,以适应不同音频应用的不同延迟要求。

PipeWire使用一个摄像头组织多应用程序协作成为可能,通过安全捕获屏幕内容和远程访问解决问题到Wayland环境中的屏幕。也可以充当声音服务器,提供最小的延迟和功能,结合了PulseAudio和JACK的功能,甚至考虑了PulseAudio无法声称的专业声音处理系统的需求。另外,PipeWire提供了高级安全模型,该模型允许在单个设备级别进行访问控制,以及特定的传输方式,并简化了往来于孤立容器的声音和视频的传输组织。主要目标之一是支持Flatpak格式的独立应用程序,并在基于Wayland的图形堆栈上工作。


该项目得到Gnome的支持,并已在Fedora中得到积极使用,以在基于Wayland的环境中录制屏幕广播和屏幕共享。

小结
延迟补偿还不错,能统一音视频框架还兼容PulseAudio和Jack,朝着专业级音效去的;支持Wayland和平板,支持Flatpak之类的容器内使用,有类似PolKit的权限管理,不需要像PulseAudio那样新建音频用户组和添加用户。用户也可能对 PipeWire 的能力感兴趣,它可以直接替代现有的 Linux 音频解决方案,包括 PulseAudio 和 JACK。潜在的好处包括降低 CPU 使用率,更好地支持蓝牙设备,以及能够更好地整合使用 JACK 和 PulseAudio的应用程序。它已成为其他一些分发中的默认解决方案,特别是在 Fedora 34 和更新的版本中。

PulseEffects

它曾经在PulseAudio音频服务器工作,而在发布的5.0版本中,PulseEffects放弃对PulseAudio的支持,转向GNOME新造的多媒体架构Pipewire。相比PulseEffects,Pipewire在安全方面考虑更多,而且据说将会对专业音频有更好的支持(PulseAudio和Jack合二为一)。

可安装Pipewire对PulseAudio的兼容包,PulseAudio会被自动卸载,然后重启系统应该就能正常工作了。PulseAudio的一些小工具,比如pactl、pavucontrol在Pipewire的兼容中也可以继续使用。可将Pipewire类比Wayland。


最新版本:0.3
在这个新版本中,提到了重新设计了线程处理调度程序,进行更改后就可以启动中间层,以保证与性能与JACK2相当的JACK声音服务器的兼容性。还重新设计了API且计划对API进行所有其他更改,而不会破坏与现有应用程序的兼容性。0.3版本中包含一个会话管理器,它允许用户在PipeWire中管理多媒体节点图,以及添加新的流。虽然该管理器仅提供最简单的一组基本功能,但将来会用功能更强大,更灵活的选项(例如WirePlumber)进行扩展或替换。就其本身而言,包含的库已得到改进,以确保与PulseAudio,JACK和ALSA兼容,使PipeWire可以与旨在与其他声音系统一起使用的现有应用程序一起使用。 ALSA的库几乎可以完全使用,但是JACK和PulseAudio的库仍需要改进。

其中包含一些GStreamer插件可与PipeWire进行交互。使用PipeWire作为声源的pipewiresrc插件在大多数情况下都可以正常工作,通过PipeWire输出声音的pipewiresink插件还没有一些已知问题。PipeWire尚未准备好完全替换PulseAudio和JACK,但兼容性问题将在以后的版本中优先考虑。由于 PipeWire 已得到越来越广泛的使用,PipeWire 也得到了更多开发者的关注,2022年9月开发者 Frédéric Danis 为 PipeWire 添加的新代码为支持下一代蓝牙音频铺平了道路,初步实现了对 Bluetooth LE Audio(蓝牙低功耗音频)的支持。根据开发者的这份 GitLab 提交信息,PipeWire 目前已经获得了对 Bluetooth LE Audio 的初步支持,其中此次与 Bluetooth LE Audio 相关的提交包括这些内容:
在 media-codecs 中添加 LE Audio BAP 支持
在 LE Audio BAP 中增加 LC3 编解码器支持
在 bluez5-device 中增加 LE Audio BAP 支持
检查 BlueZ 守护程序是否支持 LE 音频
完成 BAP 音频位置的映射
为 LE Audio LC3 编解码器增加立体声支持
初始化 BAP LC3 编码器 / 解码器

其中 BAP(Basic Audio Profile)是 LE Audio 的一个重要部分。Bluetooth LE Audio 是下一代蓝牙音频,使蓝牙低功耗的音频流成为可能,与经典(BR/EDR)音频相比,它实现了新的用例并大大降低了功耗,并且大幅改进了延迟和带宽方面的性能。

0.3.68 已于2023年4月上旬发布,此版本带来一系列新功能和优化:
符号链接现在用于 pipwire 二进制文件,而不是多次重新编译相同的二进制文件。
一个新的 RTP 会话模块,它利用 Apple MIDI 协议在系统之间实现低延迟双向 MIDI,同时将 Opus 编码添加到 RTP 格式。
许多 FreeBSD 编译修复,用于改进 FreeBSD 构建支持。
现有的脉冲隧道模块已经改进了速率匹配和同步
RAOP 接收器被移植到新的 OpenSSL 函数
ACP 代码更新为新的 PulseAudio UCM 代码
此版本也有各种不同的修复,例如修复蓝牙设备断开连接时的崩溃问题。



官方主页:https://pipewire.org/