glfs/multimedia/libdriv/pipewire.xml
Xi Ruoyao 4ae96f879b
pipewire: add WirePlumber an as external optional dependency
Currently we only build pipewire for satisfying GNOME building
dependency.  I've switched to use Pipewire instead of Pulseaudio as the
audio daemon on my system.  For the Pipewire daemon to function
properly, a Pipewire session manager is needed.  The upstream recommends
to use WirePlumber.

It's too early to provide instruction for running a Pipewire daemon in
the book, but we can list the external dependency as it does no harm.
2022-07-01 15:43:47 +08:00

594 lines
19 KiB
XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../../general.ent">
%general-entities;
<!ENTITY pipewire-download-http "https://github.com/PipeWire/pipewire/archive/&pipewire-version;/pipewire-&pipewire-version;.tar.gz">
<!ENTITY pipewire-download-ftp " ">
<!ENTITY pipewire-md5sum "489aa4ab3b404a4c489c5b2ebcaeae2c">
<!ENTITY pipewire-size "1.7 MB">
<!ENTITY pipewire-buildsize "151 MB (with tests)">
<!ENTITY pipewire-time "0.4 SBU (with tests, both using parallelism=4)">
]>
<sect1 id="pipewire" xreflabel="pipewire-&pipewire-version;">
<?dbhtml filename="pipewire.html"?>
<sect1info>
<date>$Date$</date>
</sect1info>
<title>Pipewire-&pipewire-version;</title>
<indexterm zone="pipewire">
<primary sortas="a-pipewire">pipewire</primary>
</indexterm>
<sect2 role="package">
<title>Introduction to Pipewire</title>
<para>
The <application>pipewire</application> package contains a server and
user-space API to handle multimedia pipelines. This includes a universal
API to connect to multimedia devices, as well as sharing multimedia
files between applications.
</para>
&lfs111_checked;
<bridgehead renderas="sect3">Package Information</bridgehead>
<itemizedlist spacing="compact">
<listitem>
<para>
Download (HTTP): <ulink url="&pipewire-download-http;"/>
</para>
</listitem>
<listitem>
<para>
Download (FTP): <ulink url="&pipewire-download-ftp;"/>
</para>
</listitem>
<listitem>
<para>
Download MD5 sum: &pipewire-md5sum;
</para>
</listitem>
<listitem>
<para>
Download size: &pipewire-size;
</para>
</listitem>
<listitem>
<para>
Estimated disk space required: &pipewire-buildsize;
</para>
</listitem>
<listitem>
<para>
Estimated build time: &pipewire-time;
</para>
</listitem>
</itemizedlist>
<bridgehead renderas="sect3">Pipewire Dependencies</bridgehead>
<bridgehead renderas="sect4">Recommended</bridgehead>
<para role="recommended">
<xref linkend="bluez"/>,
<xref linkend="gstreamer10"/>,
<xref linkend="gst10-plugins-base"/>,
<xref linkend="libva"/>,
<xref linkend="pulseaudio"/>,
<xref linkend="sbc"/>,
<xref linkend="sdl2"/>, and
<xref linkend="v4l-utils"/>
</para>
<bridgehead renderas="sect4">Optional</bridgehead>
<para role="optional">
<xref linkend="ffmpeg"/>,
<xref linkend="valgrind"/>,
<xref linkend="doxygen"/> and
<xref linkend="graphviz"/> (for documentation),
<ulink url="https://jackaudio.org/">JACK</ulink>,
<ulink url="https://github.com/EHfive/ldacBT">ldacBT</ulink>,
<ulink url="https://libcamera.org/">libcamera</ulink>,
<ulink url="https://vulkan.lunarg.com/sdk/home/">Vulkan</ulink>,
<ulink url="https://gitlab.freedesktop.org/pipewire/wireplumber/">WirePlumber</ulink>
(runtime, for running Pipewire daemon), and
<ulink url="https://sourceforge.net/projects/xmltoman/">xmltoman</ulink>
</para>
<para condition="html" role="usernotes">
User Notes: <ulink url="&blfs-wiki;/pipewire"/>
</para>
</sect2>
<sect2 role="installation">
<title>Installation of Pipewire</title>
<para>
Install <application>pipewire</application> by running the following
commands:
</para>
<screen><userinput>mkdir build &amp;&amp;
cd build &amp;&amp;
meson --prefix=/usr --buildtype=release -Dsession-managers= .. &amp;&amp;
ninja</userinput></screen>
<para>
To test the result, issue: <command>ninja test</command>.
</para>
<para>
Now, as the <systemitem class="username">root</systemitem> user:
</para>
<screen role="root"><userinput>ninja install</userinput></screen>
</sect2>
<sect2 role="commands">
<title>Command Explanations</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../../xincludes/meson-buildtype-release.xml"/>
<para>
<parameter>-Dsession-managers=</parameter>: This switch
prevents automatic downloading external dependencies.
</para>
<para>
<option>-Ddocs=true</option>: This switch enables the generation of HTML
documentation. The optional dependencies for documentation need to be
installed for this to work.
</para>
<para>
<option>-Dman=true</option>: This switch enables the generation of manual
pages. The optional dependencies for documentation need to be installed
for this to work.
</para>
</sect2>
<sect2 role="content">
<title>Contents</title>
<segmentedlist>
<segtitle>Installed Programs</segtitle>
<segtitle>Installed Libraries</segtitle>
<segtitle>Installed Directories</segtitle>
<seglistitem>
<seg>
pipewire,
<!--pipewire-media-session,-->
pipewire-pulse,
pw-cat,
pw-cli,
pw-dot,
pw-dump,
pw-jack,
pw-link,
pw-loopback,
pw-metadata,
pw-mididump,
pw-mon,
pw-profiler,
<!--pw-pulse,-->
pw-reserve,
pw-top,
pw-v4l2,
spa-acp-tool,
spa-inspect,
spa-json-dump,
spa-monitor,
spa-resample, and
pw-dsdplay, pw-midiplay, pw-midirecord, pw-play, and pw-record
(symlinks to pw-cat)
</seg>
<seg>
libpipewire-0.3.so and
30 modules below /usr/lib/pipewire-0.3<!--,
[pierre July 29th, 2020]: all the following libs are in subdirectories
of /usr/lib. I'm not sure they should appear. But if they should, there
are many more libs to list...
libpulse-mainloop-glib-pw.so,
libpulse.so,
libpulse-simple.so,
libasound_module_pcm_pipewire.so, and
libgstpipewire.so
[bdubbs Sep 29th, 2020]: add
libpipewire-module-{access,adapter,client-device,client-node,
link-factory,metadata,portal,profiler,protocol-native,
rtkit,session-manager,spa-device,spa-device-factory,spa-node,
spa-node-factory}.so
libasound_module_ctl_pipewire.so
libasound_module_pcm_pipewire.so
libspa-{alsa,audioconvert,audiomixer,bluez5,control,dbus,support
v4l2,videoconvert}.so
-->
</seg>
<seg>
<!--/etc/pipewire,-->
/usr/include/pipewire-0.3,
/usr/include/spa-0.2,
/usr/lib/alsa-lib,
<!--/usr/lib/gstreamer-1.0, already installed by gstreamer-->
/usr/lib/pipewire-0.3,
/usr/lib/spa-0.2,
/usr/share/alsa-card-profile,
/usr/share/pipewire, and
/usr/share/spa-0.2
</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="pipewire-prog">
<term><command>pipewire</command></term>
<listitem>
<para>
is a service that allows access to multimedia devices and allows
sharing of multimedia files between applications
</para>
<indexterm zone="pipewire pipewire-prog">
<primary sortas="b-pipewire">pipewire</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pipewire-media-session">
<term><command>pipewire-media-session</command></term>
<listitem>
<para>
is a service that allows a desktop environment to know when media
files are being played through pipewire
</para>
<indexterm zone="pipewire pipewire-media-session">
<primary sortas="b-pipewire-media-session">pipewire-media-session</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pipewire-pulse">
<term><command>pipewire-pulse</command></term>
<listitem>
<para>
starts a Pulseaudio-compatible version of
the pipewire service
</para>
<indexterm zone="pipewire pipewire-pulse">
<primary sortas="b-pipewire-pulse">pipewire-pulse</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-cat">
<term><command>pw-cat</command></term>
<listitem>
<para>
allows you to play or record media using a pipewire instance
</para>
<indexterm zone="pipewire pw-cat">
<primary sortas="b-pw-cat">pw-cat</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-cli">
<term><command>pw-cli</command></term>
<listitem>
<para>
allows you to interact with a pipewire instance
</para>
<indexterm zone="pipewire pw-cli">
<primary sortas="b-pw-cli">pw-cli</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-dot">
<term><command>pw-dot</command></term>
<listitem>
<para>
lists all of the daemons and objects in use by pipewire
</para>
<indexterm zone="pipewire pw-dot">
<primary sortas="b-pw-dot">pw-dot</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-dump">
<term><command>pw-dump</command></term>
<listitem>
<para>
dumps debug messages from a local or remote pipewire instance to
the console
</para>
<indexterm zone="pipewire pw-dump">
<primary sortas="b-pw-dump">pw-dump</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-jack">
<term><command>pw-jack</command></term>
<listitem>
<para>
runs JACK applications on a pipewire instance
</para>
<indexterm zone="pipewire pw-jack">
<primary sortas="b-pw-jack">pw-jack</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-link">
<term><command>pw-link</command></term>
<listitem>
<para>
links pipewire ports together
</para>
<indexterm zone="pipewire pw-link">
<primary sortas="b-pw-link">pw-link</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-loopback">
<term><command>pw-loopback</command></term>
<listitem>
<para>
initializes a loopback link between two different pipewire ports.
This is useful for testing and debugging
</para>
<indexterm zone="pipewire pw-loopback">
<primary sortas="b-pw-loopback">pw-loopback</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-metadata">
<term><command>pw-metadata</command></term>
<listitem>
<para>
inspects, adds, and removes metadata for objects
</para>
<indexterm zone="pipewire pw-metadata">
<primary sortas="b-pw-metadata">pw-metadata</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-mididump">
<term><command>pw-mididump</command></term>
<listitem>
<para>
dumps MIDI messages from a file to the screen
</para>
<indexterm zone="pipewire pw-mididump">
<primary sortas="b-pw-mididump">pw-mididump</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-mon">
<term><command>pw-mon</command></term>
<listitem>
<para>
allows you to monitor pipewire instances
</para>
<indexterm zone="pipewire pw-mon">
<primary sortas="b-pw-mon">pw-mon</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-profiler">
<term><command>pw-profiler</command></term>
<listitem>
<para>
tracks memory usage and API calls used by pipewire
</para>
<indexterm zone="pipewire pw-profiler">
<primary sortas="b-pw-profiler">pw-profiler</primary>
</indexterm>
</listitem>
</varlistentry>
<!--
<varlistentry id="pw-pulse">
<term><command>pw-pulse</command></term>
<listitem>
<para>
runs Pulseaudio applications on pipewire.
</para>
<indexterm zone="pipewire pw-pulse">
<primary sortas="b-pw-pulse">pw-pulse</primary>
</indexterm>
</listitem>
</varlistentry>
-->
<varlistentry id="pw-reserve">
<term><command>pw-reserve</command></term>
<listitem>
<para>
reserves or monitors a device via D-Bus
</para>
<indexterm zone="pipewire pw-reserve">
<primary sortas="b-pw-reserve">pw-reserve</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-top">
<term><command>pw-top</command></term>
<listitem>
<para>
displays real-time performance information from pipewire
</para>
<indexterm zone="pipewire pw-top">
<primary sortas="b-pw-top">pw-top</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pw-v4l2">
<term><command>pw-v4l2</command></term>
<listitem>
<para>
runs v4l2 applications on a pipewire instance
</para>
<indexterm zone="pipewire pw-v4l2">
<primary sortas="b-pw-v4l2">pw-v4l2</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="spa-acp-tool">
<term><command>spa-acp-tool</command></term>
<listitem>
<para>
inspects the card profile of a given sound card
</para>
<indexterm zone="pipewire spa-acp-tool">
<primary sortas="b-spa-acp-tool">spa-acp-tool</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="spa-inspect">
<term><command>spa-inspect</command></term>
<listitem>
<para>
allows you to inspect pipewire plugins
</para>
<indexterm zone="pipewire spa-inspect">
<primary sortas="b-spa-inspect">spa-inspect</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="spa-json-dump">
<term><command>spa-json-dump</command></term>
<listitem>
<para>
dumps the current pipewire configuration in JSON format.
</para>
<indexterm zone="pipewire spa-json-dump">
<primary sortas="b-spa-json-dump">spa-json-dump</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="spa-monitor">
<term><command>spa-monitor</command></term>
<listitem>
<para>
allows you to monitor pipewire plugins
</para>
<indexterm zone="pipewire spa-monitor">
<primary sortas="b-spa-monitor">spa-monitor</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="spa-resample">
<term><command>spa-resample</command></term>
<listitem>
<para>
resamples a given file
</para>
<indexterm zone="pipewire spa-resample">
<primary sortas="b-spa-resample">spa-resample</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libpipewire">
<term><filename class="libraryfile">libpipewire-0.3.so</filename></term>
<listitem>
<para>
contains API functions for handling multimedia pipelines
</para>
<indexterm zone="pipewire libpipewire">
<primary sortas="c-libpipewire">libpipewire-0.3.so</primary>
</indexterm>
</listitem>
</varlistentry>
<!--
<varlistentry id="libpulse-mainloop-glib-pw">
<term><filename class="libraryfile">libpulse-mainloop-glib-pw.so</filename></term>
<listitem>
<para>
provides a glib main() loop for pulseaudio to route media through
pipewire.
</para>
<indexterm zone="pipewire libpulse-mainloop-glib-pw">
<primary sortas="c-libpulse-mainloop-glib-pw">libpulse-mainloop-glib-pw.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libpulse">
<term><filename class="libraryfile">libpulse.so</filename></term>
<listitem>
<para>
is a pipewire plugin for pulseaudio.
</para>
<indexterm zone="pipewire libpulse">
<primary sortas="c-libpulse">libpulse.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libpulse-simple">
<term><filename class="libraryfile">libpulse-simple.so</filename></term>
<listitem>
<para>
is a simplified version of the pulseaudio plugin for pipewire.
</para>
<indexterm zone="pipewire libpulse-simple">
<primary sortas="c-libpulse-simple">libpulse-simple.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libasound_module_pcm_pipewire">
<term><filename class="libraryfile">libasound_module_pcm_pipewire.so</filename></term>
<listitem>
<para>
is an ALSA plugin for pipewire.
</para>
<indexterm zone="pipewire libasound_module_pcm_pipewire">
<primary sortas="c-libasound_module_pcm_pipewire">libasound_module_pcm_pipewire.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libgstpipewire">
<term><filename class="libraryfile">libgstpipewire.so</filename></term>
<listitem>
<para>
is a Gstreamer plugin for pipewire.
</para>
<indexterm zone="pipewire libgstpipewire">
<primary sortas="c-libgstpipewire">libgstpipewire.so</primary>
</indexterm>
</listitem>
</varlistentry>-->
</variablelist>
</sect2>
</sect1>