summaryrefslogtreecommitdiffstats
path: root/doc/overview.dox
blob: b96caf210da1fbc317faa996db994c94fe6344b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/** \page page_overview Overview

PipeWire is a new low-level multimedia framework designed from scratch that
aims 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.

The framework is used to build a modular daemon that can be configured to:

- Be a low-latency audio server with features like PulseAudio and/or JACK.
- A video capture server that can manage hardware video capture devices and
  provide access to them.
- A central hub where video can be made available for other applications
  such as the gnome-shell screencast API.


# Motivation

Linux has no unified 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.

None of these solutions (except perhaps to some extent Wayland) however 
were designed to support the security features that are required when
dealing with flatpaks or other containerized applications. 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.

*/