什么是 PipeWire?PipeWire 的现状与未来

PipeWire 最初是一个低级别的多媒体传输层,后续加上了例如屏幕共享和音频路由等服务。现在 PipeWire 被主要用作 JACK 和 PulseAudio 的替代品。PipeWire 的下一步发展方向将会是加强对视频共享的支持。在本文中,讲者将简要介绍 PipeWire 的架构,目前的状况和未来的发展计划。

来源:FOSDEM 2023
题目:PipeWire state of the union
讲述人:Wim Taymans
视频链接:https://fosdem.org/2023/schedule/event/om_pipewire/
内容整理:王怡闻

什么是 PipeWire

简单来说,PipeWire 是一个新的底层多媒体框架。它同时为音频和视频提供低延迟的录制和回放。Pipewire 支持所有软件的信号 IO,做到信号流程一体化。

下图显示了 PipeWire 在软件栈中的位置:

图片

它位于用户空间 API 访问内核驱动和应用程序之间,作用类似于 PulseAudio 或 JACK,但也包括视频设备、MIDI、Firewire 和蓝牙。它允许应用程序相互之间或与设备之间进行媒体交换。

它的特点如下:

  • 与设备和其他应用程序进行媒体交换:零拷贝、内存共享
  • 确保每个应用程序的安全性
  • 在保证性能的情况下减少延迟
  • 支持所有媒体类型+通用控制流
  • 可拓展性强
  • 由外部会话管理器实现决策

Pipeline 的主要结构

这是目前音视频传输的大致体系:

图片

屏幕共享

在 Wayland 下,考虑到安全性原因,屏幕的内容无法被直接抓取。这使得在 Wayland 之上实现屏幕共享或远程桌面需要一些额外的工作。GNOME 实现了一个 portal(DBus API)用来请求一个 PipeWire 的桌面流。portal 会询问用户要激活哪种屏幕共享(窗口、区域或整个桌面以及显示器等),然后建立一个 PipeWire 会话。会话的 fd 被传递给应用程序。使用 PipeWire 的安全模型时,只有这个流对应用程序是可见的,数据可以在合成器和应用程序之间传输。

流程:

图片

下图展示了使用 GStreamer 流水线渲染的 Wayland 会话的捕捉画面:

图片

音频支持

图片

使用了与 JACK 相似的模型,但是与 JACK 不同的是,这里使用的 1 buffer size 在 PipeWire 中是动态可变的。

图片

以上支持使得 PipeWire 在保证性能的情况下减少延迟。

相机捕捉/共享

在沙盒应用程序中,不允许直接访问视频摄像头。浏览器提供了一个自定义对话框来调解对摄像机的访问,但这项任务最好由下层处理,以便有一个统一的访问控制机制和共同的视频处理图。

PipeWire 可以提供一个 video4linux 源,应用程序可以用它来捕捉摄像机的视频,带来的好处有:

  • 访问可以由 PipeWire 控制。撤销访问权很容易
  • 分辨率和格式是由会话管理器管理的。根据使用摄像机的应用程序的配置文件和要求。
  • 可以应用过滤器。
  • 相机可以在应用程序之间共享。

GNOME 已经创建了一个 portal(DBus API),用于与摄像机协商访问(使用什么摄像机),并为这个流创建一个具有有限权限的会话。

流程:

图片

下图显示了 Cheese 和 GStreamer 管道共享通过 PipeWire 提供的 video4linux 摄像机捕获的视频:

图片

目前现状

图片

可以看到 PipeWire 运用广泛,并已经逐渐替代了 JACK 和 PulseAudio。

未来方向

图片
  • 修 bug
  • 在视频方面投入更多精力
  • 修正相机相关部分
  • 改进 WirePlumber/Portal 摄像机

可以看到,PipeWire 的发展方向将会是加强对视频共享的支持。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论