# What is PipeWire ??

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.
