summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--README.md218
1 files changed, 218 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..612f500
--- /dev/null
+++ b/README.md
@@ -0,0 +1,218 @@
+# PipeWire
+
+[PipeWire](https://pipewire.org) is a server and user space API to
+deal with multimedia pipelines. This includes:
+
+ - Making available sources of video (such as from a capture devices or
+ application provided streams) and multiplexing this with
+ clients.
+ - Accessing sources of video for consumption.
+ - Generating graphs for audio and video processing.
+
+Nodes in the graph can be implemented as separate processes,
+communicating with sockets and exchanging multimedia content using fd
+passing.
+
+## Building and installation
+
+The preferred way to install PipeWire is to install it with your
+distribution package system. This ensures PipeWire is integrated
+into the rest of your system for the best experience.
+
+If you want to build and install PipeWire yourself, refer to
+[install](INSTALL.md) for instructions.
+
+## Usage
+
+The most important purpose of PipeWire is to run your favorite apps.
+
+Some applications use the native PipeWire API, such as most compositors
+(gnome-shell, wayland, ...) to implement screen sharing. These apps will
+just work automatically.
+
+Most audio applications can use either ALSA, JACK or PulseAudio as a
+backend. PipeWire provides support for all 3 backends. Depending on how
+your distribution has configured things this should just work automatically
+or with the provided scripts shown below.
+
+PipeWire can use environment variables to control the behaviour of
+applications:
+
+* `PIPEWIRE_DEBUG=<level>` to increase the debug level (or use one of
+ `XEWIDT` for none, error, warnings, info,
+ debug, or trace, respectively).
+* `PIPEWIRE_LOG=<filename>` to redirect log to filename
+* `PIPEWIRE_LOG_SYSTEMD=false` to disable logging to systemd journal
+* `PIPEWIRE_LATENCY=<num/denom>` to configure latency as a fraction. 10/1000
+ configures a 10ms latency. Usually this is
+ expressed as a fraction of the samplerate,
+ like 256/48000, which uses 256 samples at a
+ samplerate of 48KHz for a latency of 5.33ms.
+ This function does not attempt to configure
+ the samplerate.
+* `PIPEWIRE_RATE=<num/denom>` to configure a rate for the graph.
+* `PIPEWIRE_QUANTUM=<num/denom>` to configure latency as a fraction and a
+ samplerate. This function will attempt to change
+ the graph samplerate to `denom` and use the
+ specified `num` as the buffer size.
+* `PIPEWIRE_NODE=<id>` to request a link to the specified node. The
+ id can be a node.name or object.serial of the target node.
+
+### Using tools
+
+`pw-cat` can be used to play and record audio and midi. Use `pw-cat -h` to get
+some more help. There are some aliases like `pw-play` and `pw-record` to make
+things easier:
+
+```
+$ pw-play /home/wim/data/01.\ Firepower.wav
+```
+
+### Running JACK applications
+
+Depending on how the system was configured, you can either run PipeWire and
+JACK side-by-side or have PipeWire take over the functionality of JACK
+completely.
+
+In dual mode, JACK apps will by default use the JACK server. To direct a JACK
+app to PipeWire, you can use the `pw-jack` script like this:
+
+```
+$ pw-jack <appname>
+```
+
+If you replaced JACK with PipeWire completely, `pw-jack` does not have any
+effect and can be omitted.
+
+JACK applications will automatically use the buffer-size chosen by the
+server. You can force a maximum buffer size (latency) by setting the
+`PIPEWIRE_LATENCY` environment variable like so:
+
+```
+PIPEWIRE_LATENCY=128/48000 jack_simple_client
+```
+Requests the `jack_simple_client` to run with a buffer of 128 or
+less samples.
+
+
+### Running PulseAudio applications
+
+PipeWire can run a PulseAudio compatible replacement server. You can't
+use both servers at the same time. Usually your package manager will
+make the server conflict so that you can only install one or the
+other.
+
+PulseAudio applications still use the regular PulseAudio client
+libraries and you don't need to do anything else than change the
+server implementation.
+
+A successful swap of the server can be verified by checking the
+output of
+
+```
+pactl info
+```
+It should include the string:
+```
+...
+Server Name: PulseAudio (on PipeWire 0.3.x)
+...
+```
+
+You can use pavucontrol to change profiles and ports, change volumes
+or redirect streams, just like with PulseAudio.
+
+
+### Running ALSA applications
+
+If the PipeWire alsa module is installed, it can be seen with
+
+```
+$ aplay -L
+```
+
+ALSA applications can then use the `pipewire:` device to use PipeWire
+as the audio system.
+
+### Running GStreamer applications
+
+PipeWire includes 2 GStreamer elements called `pipewiresrc` and
+`pipewiresink`. They can be used in pipelines such as this:
+
+```
+$ gst-launch-1.0 pipewiresrc ! videoconvert ! autovideosink
+```
+
+Or to play a beeping sound:
+
+```
+$ gst-launch-1.0 audiotestsrc ! pipewiresink
+```
+
+PipeWire provides a device monitor as well so that
+
+```
+$ gst-device-monitor-1.0
+```
+
+shows the PipeWire devices and applications like cheese will
+automatically use the PipeWire video source when possible.
+
+### Inspecting the PipeWire state
+
+To inspect and manipulate the PipeWire graph via GUI, you can use [Helvum](https://gitlab.freedesktop.org/ryuukyu/helvum).
+
+Alternatively, you can use use one of the excellent JACK tools, such as `Carla`,
+`catia`, `qjackctl`, ...
+However, you will not be able to see all features like the video
+ports.
+
+`pw-mon` dumps and monitors the state of the PipeWire daemon.
+
+`pw-dot` can dump a graph of the pipeline, check out the help for
+how to do this.
+
+`pw-top` monitors the real-time status of the graph. This is handy to
+find out what clients are running and how much DSP resources they
+use.
+
+`pw-dump` dumps the state of the PipeWire daemon in JSON format. This
+can be used to find out the properties and parameters of the objects
+in the PipeWire daemon.
+
+There is a more complicated tool to inspect the state of the server
+with `pw-cli`. This tool can be used interactively or it can execute
+single commands like this to get the server information:
+
+```
+$ pw-cli info 0
+```
+
+## Documentation
+
+Find tutorials and design documentation [here](doc/index.dox).
+
+The (incomplete) autogenerated API docs are [here](https://docs.pipewire.org).
+
+The Wiki can be found [here](https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home)
+
+## Contributing
+
+PipeWire is Free Software and is developed in the open. It is mostly
+licensed under the [MIT license](COPYING). Check [LICENSE](LICENSE) for
+more details about the exceptions.
+
+Contributors are encouraged to submit merge requests or file bugs on
+[gitlab](https://gitlab.freedesktop.org/pipewire).
+
+Join us on IRC at #pipewire on [OFTC](https://www.oftc.net/).
+
+We adhere to the Contributor Covenant for our [code of conduct](CODE_OF_CONDUCT.md).
+
+[Donate using Liberapay](https://liberapay.com/PipeWire/donate).
+
+## Getting help
+
+You can ask for help on the IRC channel (see above). You can also ask
+questions by [raising](https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/new)
+a gitlab issue.