• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.gitlab/issue_templates/H05-Jan-2022-7438

doc/H05-Jan-2022-6,1004,567

include/valgrind/H05-Jan-2022-6,9515,692

man/H05-Jan-2022-896617

pipewire-alsa/H05-Jan-2022-2,9542,418

pipewire-jack/H05-Jan-2022-13,8777,757

pipewire-v4l2/H05-Jan-2022-2,2381,753

po/H05-Jan-2022-32,67126,959

spa/H05-Jan-2022-129,24597,636

src/H05-Jan-2022-129,68195,053

subprojects/H03-May-2022-96

test/H05-Jan-2022-8,6016,432

.cirrus.ymlH A D05-Jan-2022976 2524

.codespell-ignoreH A D05-Jan-2022104 2020

.editorconfigH A D05-Jan-2022408 2822

.gitignoreH A D05-Jan-2022539 4437

.gitlab-ci.ymlH A D05-Jan-202210.2 KiB376349

CODE_OF_CONDUCT.mdH A D05-Jan-20223.3 KiB7857

COPYINGH A D05-Jan-20221.2 KiB2720

INSTALL.mdH A D05-Jan-20226.2 KiB220162

LICENSEH A D05-Jan-2022349 127

Makefile.inH A D05-Jan-20221.9 KiB7558

NEWSH A D05-Jan-2022118.2 KiB3,0702,601

README.mdH A D05-Jan-20226.3 KiB205143

autogen.shH A D05-Jan-2022455 1913

check_missing_headers.shH A D05-Jan-2022512 2918

meson.buildH A D03-May-202216.9 KiB529450

pw-uninstalled.shH A D05-Jan-20222.1 KiB6648

template.test.inH A D05-Jan-202232 43

README.md

1# PipeWire
2
3[PipeWire](https://pipewire.org) is a server and user space API to
4deal with multimedia pipelines. This includes:
5
6  - Making available sources of video (such as from a capture devices or
7    application provided streams) and multiplexing this with
8    clients.
9  - Accessing sources of video for consumption.
10  - Generating graphs for audio and video processing.
11
12Nodes in the graph can be implemented as separate processes,
13communicating with sockets and exchanging multimedia content using fd
14passing.
15
16## Building and installation
17
18The preferred way to install PipeWire is to install it with your
19distribution package system. This ensures PipeWire is integrated
20into the rest of your system for the best experience.
21
22If you want to build and install PipeWire yourself, refer to
23[install](INSTALL.md) for instructions.
24
25## Usage
26
27The most important purpose of PipeWire is to run your favorite apps.
28
29Some applications use the native PipeWire API, such as most compositors
30(gnome-shell, wayland, ...) to implement screen sharing. These apps will
31just work automatically.
32
33Most audio applications can use either ALSA, JACK or PulseAudio as a
34backend. PipeWire provides support for all 3 backends. Depending on how
35your distribution has configured things this should just work automatically
36or with the provided scripts shown below.
37
38PipeWire can use environment variables to control the behaviour of
39applications:
40
41* `PIPEWIRE_DEBUG=<level>`         to increase the debug level (or use one of
42                                   `XEWIDT` for none, error, warnings, info,
43                                   debug, or trace, respectively).
44* `PIPEWIRE_LOG=<filename>`        to redirect log to filename
45* `PIPEWIRE_LOG_SYSTEMD=false`     to disable logging to systemd journal
46* `PIPEWIRE_LATENCY=<num/denom>`   to configure latency as a fraction. 10/1000
47                                   configures a 10ms latency. Usually this is
48				   expressed as a fraction of the samplerate,
49				   like 256/48000, which uses 256 samples at a
50				   samplerate of 48KHz for a latency of 5.33ms.
51* `PIPEWIRE_NODE=<id>`             to request a link to the specified node
52
53### Using tools
54
55`pw-cat` can be used to play and record audio and midi. Use `pw-cat -h` to get
56some more help. There are some aliases like `pw-play` and `pw-record` to make
57things easier:
58
59```
60$ pw-play /home/wim/data/01.\ Firepower.wav
61```
62
63### Running JACK applications
64
65Depending on how the system was configured, you can either run PipeWire and
66JACK side-by-side or have PipeWire take over the functionality of JACK
67completely.
68
69In dual mode, JACK apps will by default use the JACK server. To direct a JACK
70app to PipeWire, you can use the `pw-jack` script like this:
71
72```
73$ pw-jack <appname>
74```
75
76If you replaced JACK with PipeWire completely, `pw-jack` does not have any
77effect and can be omitted.
78
79JACK applications will automatically use the buffer-size chosen by the
80server. You can force a maximum buffer size (latency) by setting the
81`PIPEWIRE_LATENCY` environment variable like so:
82
83```
84PIPEWIRE_LATENCY=128/48000 jack_simple_client
85```
86Requests the `jack_simple_client` to run with a buffer of 128 or
87less samples.
88
89
90### Running PulseAudio applications
91
92PipeWire can run a PulseAudio compatible replacement server. You can't
93use both servers at the same time. Usually your package manager will
94make the server conflict so that you can only install one or the
95other.
96
97PulseAudio applications still use the regular PulseAudio client
98libraries and you don't need to do anything else than change the
99server implementation.
100
101A successful swap of the server can be verified by checking the
102output of
103
104```
105pactl info
106```
107It should include the string:
108```
109...
110Server Name: PulseAudio (on PipeWire 0.3.x)
111...
112```
113
114You can use pavucontrol to change profiles and ports, change volumes
115or redirect streams, just like with PulseAudio.
116
117
118### Running ALSA applications
119
120If the PipeWire alsa module is installed, it can be seen with
121
122```
123$ aplay -L
124```
125
126ALSA applications can then use the `pipewire:` device to use PipeWire
127as the audio system.
128
129### Running GStreamer applications
130
131PipeWire includes 2 GStreamer elements called `pipewiresrc` and
132`pipewiresink`. They can be used in pipelines such as this:
133
134```
135$ gst-launch-1.0 pipewiresrc ! videoconvert ! autovideosink
136```
137
138Or to play a beeping sound:
139
140```
141$ gst-launch-1.0 audiotestsrc ! pipewiresink
142```
143
144PipeWire provides a device monitor as well so that
145
146```
147$ gst-device-monitor-1.0
148```
149
150shows the PipeWire devices and applications like cheese will
151automatically use the PipeWire video source when possible.
152
153### Inspecting the PipeWire state
154
155To inspect and manipulate the PipeWire graph via GUI, you can use [Helvum](https://gitlab.freedesktop.org/ryuukyu/helvum).
156
157Alternatively, you can use use one of the excellent JACK tools, such as `Carla`,
158`catia`, `qjackctl`, ...
159However, you will not be able to see all features like the video
160ports.
161
162`pw-mon` dumps and monitors the state of the PipeWire daemon.
163
164`pw-dot` can dump a graph of the pipeline, check out the help for
165how to do this.
166
167`pw-top` monitors the real-time status of the graph. This is handy to
168find out what clients are running and how much DSP resources they
169use.
170
171`pw-dump` dumps the state of the PipeWire daemon in JSON format. This
172can be used to find out the properties and parameters of the objects
173in the PipeWire daemon.
174
175There is a more complicated tool to inspect the state of the server
176with `pw-cli`. This tool can be used interactively or it can execute
177single commands like this to get the server information:
178
179```
180$ pw-cli info 0
181```
182
183## Documentation
184
185Find tutorials and design documentation [here](doc/index.md).
186
187The (incomplete) autogenerated API docs are [here](https://docs.pipewire.org).
188
189The Wiki can be found [here](https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home)
190
191## Contributing
192
193PipeWire is Free Software and is developed in the open. It is mostly
194licensed under the [MIT license](COPYING). Check [LICENSE](LICENSE) for
195more details about the exceptions.
196
197Contributors are encouraged to submit merge requests or file bugs on
198[gitlab](https://gitlab.freedesktop.org/pipewire).
199
200Join us on IRC at #pipewire on [OFTC](https://www.oftc.net/).
201
202We adhere to the Contributor Covenant for our [code of conduct](CODE_OF_CONDUCT.md).
203
204[Donate using Liberapay](https://liberapay.com/PipeWire/donate).
205