Hello Linux Enthusiasts, Hope you are doing good :)
I have something to share, Named PipeWire and this stuff is more interesting than it looks.
Earlier Linux distributions use to rely on PulseAudio-, JACK-, ALSA- and GStreamer-based applications for their multimedia frameworks to work.
GStreamer is a multimedia handling library, it uses ALSA/PulseAudio/Jack/PipeWire/etc., but doesn't replace them
But at the cost of higher latency.
Therefore now to fix this developer created this new low-level multimedia framework named PipeWire from scratch to provide
- graph-based processing
- support for out-of-process processing graphs with minimal overhead
- flexible and extensible media format negotiation and buffer allocation
- Hard real-time capable plugins
- achieve very low latency for both audio and video processing
Linux has no unified multimedia framework for exchanging multimedia content between applications or even devices. In most cases, developers realized that a user-space daemon is needed to make this possible:
- For video content, we typically rely on the compositor to render our data.
- For video capture, we usually go directly to the hardware devices, with all security implications and inflexible routing that this brings.
- For consumer audio, we use PulseAudio to manage and mix multiple streams from clients
- For Pro audio, we use JACK to manage the graph of nodes.
PipeWire aims to solve this problem and provides a unified framework to run both consumer and Pro audio as well as video capture and processing in a secure way.
Currently PipeWire ships with the following components:
- a PipeWire daemon that implements the IPC and graph processing
- an example session manager that manages objects in the PipeWire daemon.
- a set of tools to introspect and use the PipeWire daemon.
- a library to develop PipeWire applications and plugins.
I know you didn't understand anything I said until now, Maybe some of you did... but no worries, let me list down some of the usages of PipeWire for you in day to day life
WebRTC screen sharing
- Most browsers used to rely on X11 for capturing the desktop (or individual applications) when using WebRTC (e.g. on Google Hangouts). On Wayland, the sharing mechanism is handled differently for security reasons. PipeWire enables sharing content under Wayland with fine-grained access controls.
Firefox (84+) supports this method by default, while on Chromium (73+) one needs to enable WebRTC PipeWire support.
Don't know about the X11 and Wayland? No worries, I will post another page on this topic for you :)
For now, just assume that X11 is no more or less secure than any other part of your Linux OS, And Wayland is focused on security
By the way, both are display servers.
Video
- Most applications that rely on GStreamer to handle e.g. video streams should work out of the box thanks to the PipeWire GStreamer plugin. Applications like e.g. cheese(camera app in Linux Distros) are therefore already able to share video input using it.
Audio
- PipeWire can be used as an audio server, similar to PulseAudio and JACK. It aims to replace both PulseAudio and JACK, by providing a PulseAudio-compatible server implementation and ABI-compatible libraries for JACK clients.
You can ignore that ABI stuff for now if you didn't understand :)
ALSA/Legacy applications
PulseAudio clients
JACK clients
Bluetooth devices
Run PipeWire on top of native JACK
Currently(i.e. in May 2021) Fedora 34 ships with PipeWire preinstalled. So I think you may safely enjoy the features of PipeWire :)
In Short
PipeWire is a server for handling audio and video streams and hardware on Linux. It was created by Wim Taymans at Red Hat. It handles multimedia routing and pipeline processing.