PipeWire: Related Pages

PipeWire 0.3.80

Loading...
Searching...
No Matches
Related Pages
Here is a list of all related documentation pages:
[detail level 123]

Overview | PipeWire is a new low-level multimedia framework designed from scratch that aims to provide:
▼PipeWire Design |
Design | A short overview of PipeWire's design
Audio | This document explains how Audio is implemented
Access Control | This document explains how access control is designed and implemented
Portal Access Control | This document explains how clients from the portal are handled
MIDI Support | This document explains how MIDI is implemented
Objects Design | This document is a design reference on the various objects that exist in the PipeWire media and session management graphs
PipeWire Library | There are two main components that make up the PipeWire library:
DMA-BUF Sharing | PipeWire supports sharing Direct Memory Access buffers (DMA-BUFs) between clients via the SPA_DATA_DmaBuf data type
Graph Scheduling | This document tries to explain how the PipeWire graph is scheduled
Native Protocol | PipeWire has a pluggable client/server IPC protocol
PipeWire Daemon | The PipeWire daemon is the central process that manages data exchange between devices and clients
▼PipeWire Tools | Manual pages:
pipewire |
    pipewire
    ########

    -------------------------
    The PipeWire media server
    -------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pipewire** [*options*]

    DESCRIPTION
    ===========

    PipeWire is a service that facilitates sharing of multimedia content
    between devices and applications.

    The **pipewire** daemon reads a config file that is further documented in
    ``pipewire.conf(5)`` manual page.

    OPTIONS
    =======

    -h | --help
      Show help.

    -v | --verbose
      Increase the verbosity by one level. This option may be specified multiple
      times.

    --version
      Show version information.

    -c | --config=FILE
      Load the given config file (Default: pipewire.conf).

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>;
    PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pw-top(1)``,
    ``pw-dump(1)``,
    ``pw-mon(1)``,
    ``pw-cat(1)``,
    ``pw-cli(1)``,
pipewire-pulse |
    pipewire-pulse
    ##############

    -----------------------------------
    The PipeWire PulseAudio replacement
    -----------------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pipewire-pulse** [*options*]

    DESCRIPTION
    ===========

    **pipewire-pulse** starts a PulseAudio-compatible daemon that integrates with
    the PipeWire media server, by running a pipewire process through a systemd
    service. This daemon is a drop-in replacement for the PulseAudio daemon.

    OPTIONS
    =======

    -h | --help
      Show help.

    -v | --verbose
      Increase the verbosity by one level. This option may be specified multiple
      times.

    --version
      Show version information.

    -c | --config=FILE
      Load the given config file (Default: pipewire-pulse.conf).

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>;
    PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``
pipewire.conf |
    pipewire.conf
    #############

    --------------------------------------
    The PipeWire server configuration file
    --------------------------------------

    :Manual section: 5
    :Manual group: File Formats Manual

    .. _synopsis:

    SYNOPSIS
    ========

    *$XDG_CONFIG_HOME/pipewire/pipewire.conf*

    *@PIPEWIRE_CONFIG_DIR@/pipewire.conf*

    *@PIPEWIRE_CONFDATADIR@/pipewire.conf*

    *@PIPEWIRE_CONFDATADIR@/pipewire.conf.d/*

    *@PIPEWIRE_CONFIG_DIR@/pipewire.conf.d/*

    *$XDG_CONFIG_HOME/pipewire/pipewire.conf.d/*

    DESCRIPTION
    ===========

    PipeWire is a service that facilitates sharing of multimedia content
    between devices and applications.

    On startup, the daemon reads a main configuration file to configure
    itself. It executes a series of commands listed in the config
    file.

    The config files are loaded in the order listed in the SYNOPSIS_.
    The environment variables ``PIPEWIRE_CONFIG_DIR``, ``PIPEWIRE_CONFIG_PREFIX``
    and ``PIPEWIRE_CONFIG_NAME`` can be used to specify an alternative config
    directory, subdirectory and file respectively.

    Next to the configuration file can be a directory with the same name as
    the file with a ``.d/`` suffix. All directories in the SYNOPSIS_ directory
    search paths are traversed in the listed order and the contents of the
    ``*.conf`` files inside them are appended to the main configuration file
    as overrides. Object sections are merged and array sections are appended.

    CONFIGURATION FILE FORMAT
    =========================

    The configuration file format is grouped into sections. A section
    is either a dictionary, {}, or an array, []. Dictionary and array
    entries are separated by whitespace and may be simple value
    assignment, an array or a dictionary. For example:

    name = value # simple assignment

    name = { key1 = value1 key2 = value2 } # a dictionary with two
    entries

    name = [ value1 value2 ] # an array with two entries

    name = [ { k = v1 } { k = v2 } ] # an array of dictionaries

    The configuration files can be expressed in full JSON syntax but for ease
    of use, a relaxed format may be used where:

     * ``:`` to delimit keys and values can be substuted by ``=`` or a space.
     * ``"`` around keys and string can be omitted as long as no special characters are used in the strings.
     * ``,`` to separate objects can be replaced with a whitespace character.
     * ``#`` can be used to start a comment until the line end

    CONFIGURATION FILE SECTIONS
    ===========================

    context.properties
      Dictionary. These properties configure the PipeWire instance.

    context.spa-libs
      Dictionary. Maps plugin features with globs to a spa library.

    context.modules
      Array of dictionaries. Each entry in the array is a dictionary with the *name* of the module to load,
      including optional *args* and *flags*. Most modules support being loaded
      multiple times.

    context.objects
      Array of dictionaries. Each entry in the array is a dictionary containing the *factory* to create an
      object from and optional extra arguments specific to that factory.

    context.exec
      Array of dictionaries. Each entry in the array is dictionary containing the *path* of a program to
      execute on startup and optional *args*.

      This array used to contain an entry to start the session manager but this mode
      of operation has since been demoted to development aid. Avoid starting a
      session manager in this way in production environment.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-mon(1)``,
pw-cat |
    pw-cat
    ######

    -----------------------------------
    Play and record media with PipeWire
    -----------------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-cat** [*options*] [*FILE* \| -]
    | **pw-play** [*options*] [*FILE* \| -]
    | **pw-record** [*options*] [*FILE* \| -]
    | **pw-midiplay** [*options*] [*FILE* \| -]
    | **pw-midirecord** [*options*] [*FILE* \| -]
    | **pw-dsdplay** [*options*] [*FILE* \| -]

    DESCRIPTION
    ===========

    **pw-cat** is a simple tool for playing back or
    capturing raw or encoded media files on a PipeWire
    server. It understands all audio file formats supported by
    ``libsndfile`` for PCM capture and playback. When capturing PCM, the filename
    extension is used to guess the file format with the WAV file format as
    the default.

    It understands standard MIDI files for playback and recording. This tool
    will not render MIDI files, it will simply make the MIDI events available
    to the graph. You need a MIDI renderer such as qsynth, timidity or a hardware
    MIDI rendered to hear the MIDI.

    DSD playback is supported with the DSF file format. This tool will only work
    with native DSD capable hardware and will produce an error when no such
    hardware was found.

    When the *FILE* is - input and output will be raw data from STDIN and
    STDOUT respectively.

    OPTIONS
    =======

    -h | --help
      Show help.

    --version
      Show version information.

    -v | --verbose
      Verbose operation.

    -R | --remote=NAME
      The name the *remote* instance to connect to. If left unspecified,
      a connection is made to the default PipeWire instance.

    -p | --playback
      Playback mode. Read data from the specified file, and play it back. If the tool
      is called under the name **pw-play** or **pw-midiplay** this is the default.

    -r | --record
      Recording mode. Capture data and write it to the specified file. If the tool is
      called under the name **pw-record** or **pw-midirecord** this is the default.

    -m | --midi
      MIDI mode. *FILE* is a MIDI file. If the tool is called under the name
      **pw-midiplay** or **pw-midirecord** this is the default.
      Note that this program will *not* render the MIDI events into audible samples,
      it will simply provide the MIDI events in the graph. You need a separate
      MIDI renderer such as qsynth, timidity or a hardware renderer to hear the MIDI.

    -d | --dsd
      DSD mode. *FILE* is a DSF file. If the tool is called under the name
      **pw-dsdplay** this is the default.
      Note that this program will *not* render the DSD audio. You need a DSD capable
      device to play DSD content or this program will exit with an error.

    --media-type=VALUE
      Set the media type property (default Audio/Midi depending on mode).
      The media type is used by the session manager to select a suitable target
      to link to.

    --media-category=VALUE
      Set the media category property (default Playback/Capture depending on mode).
      The media type is used by the session manager to select a suitable target
      to link to.

    --media-role=VALUE
      Set the media role property (default Music).
      The media type is used by the session manager to select a suitable target
      to link to.

    --target=VALUE
      Set a node target (default auto). The value can be:

      auto
        Automatically select (Default)

      0
        Don't try to link this node

      <id>
        The object.serial or the node.name of a target node

    --latency=VALUE[*units*]
      Set the node latency (default 100ms)

      The latency determines the minimum amount of time it takes
      for a sample to travel from application to device (playback) and
      from device to application (capture).

      The latency determines the size of the buffers that the
      application will be able to fill. Lower latency means smaller
      buffers but higher overhead. Higher latency means larger buffers
      and lower overhead.

      Units can be **s** for seconds, **ms** for milliseconds,
      **us** for microseconds, **ns** for nanoseconds.
      If no units are given, the latency value is samples with the samplerate
      of the file.

    -P | --properties=VALUE
      Set extra stream properties as a JSON object.

    -q | --quality=VALUE
      Resampler quality. When the samplerate of the source or
      destination file does not match the samplerate of the server, the
      data will be resampled. Higher quality uses more CPU. Values between 0 and 15 are
      allowed, the default quality is 4.

    --rate=VALUE
      The sample rate, default 48000.

    --channels=VALUE
      The number of channels, default 2.

    --channel-map=VALUE
      The channelmap. Possible values include:
      **mono**, **stereo**, **surround-21**,
      **quad**, **surround-22**, **surround-40**,
      **surround-31**, **surround-41**,
      **surround-50**, **surround-51**,
      **surround-51r**, **surround-70**,
      **surround-71** or a comma separated list of channel names:
      **FL**, **FR**, **FC**, **LFE**,
      **SL**, **SR**, **FLC**, **FRC**,
      **RC**, **RL**, **RR**, **TC**,
      **TFL**, **TFC**, **TFR**, **TRL**,
      **TRC**, **TRR**, **RLC**, **RRC**,
      **FLW**, **FRW**, **LFE2**, **FLH**,
      **FCH**, **FRH**, **TFLC**, **TFRC**,
      **TSL**, **TSR**, **LLFR**, **RLFE**,
      **BC**, **BLC**, **BRC**

    --format=VALUE
      The sample format to use. One of:
      **u8**, **s8**, **s16** (default), **s24**, **s32**,
      **f32**, **f64**.

    --volume=VALUE
      The stream volume, default 1.000.
      Depending on the locale you have configured, "," or "." may be
      used as a decimal separator. Check with **locale** command.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``PipeWire(1)``,
    ``pw-mon(1)``,
pw-cli |
    pw-cli
    ######

    -----------------------------------
    The PipeWire Command Line Interface
    -----------------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-cli** [*command*]

    DESCRIPTION
    ===========

    Interact with a PipeWire instance.

    When a command is given, **pw-cli**
    will execute the command and exit

    When no command is given, **pw-cli**
    starts an interactive session with the default PipeWire instance
    *pipewire-0*.

    Connections to other, remote instances can be made. The current instance
    name is displayed at the prompt.

    Note that **pw-cli** also creates a local PipeWire instance. Some commands
    operate on the current (remote) instance and some on the local instance, such
    as module loading.

    Use the 'help' command to list the available commands.

    GENERAL COMMANDS
    ================

    help | h
      Show a quick help on the commands available. It also lists the aliases
      for many commands.

    quit | q
      Exit from **pw-cli**

    MODULE MANAGEMENT
    =================

    | Modules are loaded and unloaded in the local instance, thus the pw-cli
    | binary itself and can add functionality or objects to the local
    | instance. It is not possible in PipeWire to load modules in another
    | instance.

    load-module *name* [*arguments...*]
      Load a module specified by its name and arguments in the local instance.
      For most modules it is OK to be loaded more than once.

      This command returns a module variable that can be used
      to unload the module.

      The locally module is *not* visible in the remote instance. It is not
      possible in PipeWire to load modules in a remote instance.

    unload-module *module-var*
      Unload a module, specified either by its variable.

    OBJECT INTROSPECTION
    ====================

    list-objects
      List the objects of the current instance.

      Objects are listed with their *id*, *type* and *version*.

    info *id* | *all*
      Get information about a specific object or *all* objects.

      Requesting info about an object will also notify you of changes.

    WORKING WITH REMOTES
    ====================

    connect [*remote-name*]
      Connect to a remote instance and make this the new current
      instance.

      If no remote name is specified, a connection is made to
      the default remote instance, usually *pipewire-0*.

      The special remote name called *internal* can be used to connect to
      the local **pw-cli** PipeWire instance.

      This command returns a remote var that can be used to disconnect or
      switch remotes.

    disconnect [*remote-var*]
      Disconnect from a *remote instance*.

      If no remote name is specified, the current instance is disconnected.

    list-remotes
      List all *remote instances*.

    switch-remote [*remote-var*]
      Make the specified *remote* the current instance.

      If no remote name is specified, the first instance is made current.

    NODE MANAGEMENT
    ===============

    create-node *factory-name* [*properties...*]
      Create a node from a factory in the current instance.

      Properties are key=value pairs separated by whitespace.

      This command returns a *node variable*.

    export-node *node-id* [*remote-var*]
      Export a node from the local instance to the specified instance.
      When no instance is specified, the node will be exported to the current
      instance.

    DEVICE MANAGEMENT
    =================

    create-device *factory-name* [*properties...*]
      Create a device from a factory in the current instance.

      Properties are key=value pairs separated by whitespace.

      This command returns a *device variable*.

    LINK MANAGEMENT
    ===============

    create-link *node-id* *port-id* *node-id* *port-id* [*properties...*]
      Create a link between 2 nodes and ports.

      Port *ids* can be *-1* to automatically select an available port.

      Properties are key=value pairs separated by whitespace.

      This command returns a *link variable*.

    GLOBALS MANAGEMENT
    ==================

    destroy *object-id*
      Destroy a global object.

    PARAMETER MANAGEMENT
    ====================

    enum-params *object-id* *param-id*
      Enumerate params of an object.

      *param-id* can also be given as the param short name.

    set-param *object-id* *param-id* *param-json*
      Set param of an object.

      *param-id* can also be given as the param short name.

    PERMISSION MANAGEMENT
    =====================

    permissions *client-id* *object-id* *permission*
      Set permissions for a client.

      *object-id* can be *-1* to set the default permissions.

    get-permissions *client-id*
      Get permissions of a client.

    COMMAND MANAGEMENT
    ==================

    send-command *object-id*
      Send a command to an object.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-mon(1)``,
pw-config |
    pw-config
    #########

    -----------------------------
    Debug PipeWire Config parsing
    -----------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-config** [*options*] paths

    | **pw-config** [*options*] list [*SECTION*]

    | **pw-config** [*options*] merge *SECTION*

    DESCRIPTION
    ===========

    List config paths and config sections and display the parsed
    output.

    This tool can be used to get an overview of the config file that will be
    parsed by the PipeWire server and clients.

    COMMON OPTIONS
    ==============

    -h | --help
      Show help.

    --version
      Show version information.

    -n | --name=NAME
      Config Name (default 'pipewire.conf')

    -p | --prefix=PREFIX
      Config Prefix (default '')

    -L | --no-newline
      Omit newlines after values

    -r | --recurse
      Reformat config sections recursively

    -N | --no-colors
      Disable color output

    -C | --color[=WHEN]
      whether to enable color support. WHEN is `never`, `always`, or `auto`

    LISTING PATHS
    =============

    Specify the paths command. It will display all the config files that will
    be parsed and in what order.

    LISTING CONFIG SECTIONS
    =======================

    Specify the list command with an optional *SECTION* to list the configuration
    fragments used for *SECTION*. Without a *SECTION*, all sections will be
    listed.

    Use the -r options to reformat the sections.

    MERGING A CONFIG SECTION
    ========================

    With the merge option and a *SECTION*, pw-config will merge all config files into
    a merged config section and dump the results. This will be the section used by
    the client or server.

    Use the -r options to reformat the sections.

    EXAMPLES
    ========

    **pw-config**
      List all config files that will be used

    **pw-config** -n pipewire-pulse.conf
      List all config files that will be used by the PipeWire pulseaudio server.

    **pw-config** -n pipewire-pulse.conf list
      List all config sections used by the PipeWire pulseaudio server

    **pw-config** -n jack.conf list context.properties
      List the context.properties fragments used by the JACK clients

    **pw-config** -n jack.conf merge context.properties
      List the merged context.properties used by the JACK clients

    **pw-config** -n pipewire.conf -r merge context.modules
      List the merged context.modules used by the PipeWire server and reformat

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-dump(1)``,
pw-dot |
    pw-dot
    ######

    ---------------------------
    The PipeWire dot graph dump
    ---------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-dot** [*options*]

    DESCRIPTION
    ===========

    Create a .dot file of the PipeWire graph.

    The .dot file can then be visualized with a tool like **dotty**
    or rendered to a PNG file with ``dot -Tpng pw.dot -o pw.png``.

    OPTIONS
    =======

    -r | --remote=NAME
      The name the remote instance to connect to. If left unspecified,
      a connection is made to the default PipeWire instance.

    -h | --help
      Show help.

    --version
      Show version information.

    -a | --all
      Show all object types.

    -s | --smart
      Show linked objects only.

    -d | --detail
      Show all object properties.

    -o FILE | --output=FILE
      Output file name (Default pw.dot). Use - for stdout.

    -L | --lr
      Lay the graph from left to right, instead of dot's default top to bottom.

    -9 | --90
      Lay the graph using 90-degree angles in edges.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-cli(1)``,
    ``pw-mon(1)``,
pw-link |
    pw-link
    #######

    -------------------------
    The PipeWire Link Command
    -------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-link** [*options*] -o|-i|-l [*out-pattern*] [*in-pattern*]

    | **pw-link** [*options*] *output* *input*

    | **pw-link** [*options*] -d *output* *input*

    | **pw-link** [*options*] -d *link-id*

    DESCRIPTION
    ===========

    List, create and destroy links between PipeWire ports.

    COMMON OPTIONS
    ==============

    -r | --remote=NAME
      The name the *remote* instance to monitor. If left unspecified,
      a connection is made to the default PipeWire instance.

    -h | --help
      Show help.

    --version
      Show version information.

    LISTING PORTS AND LINKS
    =======================

    Specify one of -o, -i or -l to list the matching optional input and
    output ports and their links.

    -o | --output
      List output ports

    -i | --input
      List output ports

    -l | --links
      List links

    -m | --monitor
      Monitor links and ports. **pw-link** will not exit but monitor and
      print new and destroyed ports or links.

    -I | --id
      List IDs. Also list the unique link and port ids.

    -v | --verbose
      Verbose port properties. Also list the port-object-path and the port-alias.

    CONNECTING PORTS
    ================

    Without any list option (-i, -o or -l), the given ports will be linked.
    Valid port specifications are:

    *port-id*
      As obtained with the -I option when listing ports.

    *node-name:port-name*
      As obtained when listing ports.

    *port-object-path*
      As obtained from the first alternative name for the port when listing
      them with the -v option.

    *port-alias*
      As obtained from the second alternative name for the ports when listing
      them with the -v option.

    Extra options when linking can be given:

    -L | --linger
      Linger. Will create a link that exists after **pw-link** is destroyed.
      This is the default behaviour, unless the -m option is given.

    -P | --passive
      Passive link. A passive link will keep both nodes it links inactive
      unless another non-passive link is activating the nodes. You can use this
      to link a sink to a filter and have them both suspended when nothing else
      is linked to either of them.

    -p | --props=PROPS
      Properties as JSON object. Give extra properties when creaing the link.

    DISCONNECTING PORTS
    ===================

    When the -d option is given, an existing link between port is destroyed.

    To disconnect port, a single *link-id*, as obtained when listing links with
    the -I option, or two port specifications can be given. See the connecting
    ports section for valid port specifications.

    -d | --disconnect
      Disconnect ports

    EXAMPLES
    ========

    **pw-link** -iol
      List all port and their links.

    **pw-link** -lm
      List all links and monitor changes until **pw-link** is stopped.

    **pw-link** paplay:output_FL alsa_output.pci-0000_00_1b.0.analog-stereo:playback_FL
      Link the given output port to the input port.

    **pw-link** -lI
      List links and their Id.

    **pw-link** -d 89
      Destroy the link with id 89.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-cli(1)``,
pw-metadata |
    pw-metadata
    ###########

    ---------------------
    The PipeWire metadata
    ---------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-metadata** [*options*] [*id* [*key* [*value* [*type* ] ] ] ]

    DESCRIPTION
    ===========

    Monitor, set and delete metadata on PipeWire objects.

    Metadata are key/type/value triplets attached to objects identified
    by *id*. The metadata is shared between all applications
    binding to the same metadata object. When an object is destroyed, all its
    metadata is automatically removed.

    When no *value* is given, **pw-metadata** will query and
    log the metadata matching the optional arguments *id*
    and *key*. Without any arguments, all metadata is displayed.

    When *value* is given, **pw-metadata** will set the
    metadata for *id* and *key* to *value* and
    an optional *type*.

    OPTIONS
    =======

    -r | --remote=NAME
      The name the remote instance to use. If left unspecified,
      a connection is made to the default PipeWire instance.

    -h | --help
      Show help.

    --version
      Show version information.

    -l | --list
      List available metadata objects

    -m | --monitor
      Keeps running and log the changes to the metadata.

    -d | --delete
      Delete all metadata for *id* or for the specified *key* of object *id*.
      Without any option, all metadata is removed.

    -n | --name
      Metadata name (Default: "default").

    EXAMPLES
    ========

    **pw-metadata**
      Show metadata in default name.

    **pw-metadata** -n settings 0
      Display settings.

    **pw-metadata** -n settings 0 clock.quantum 1024
      Change clock.quantum to 1024.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-mon(1)``,
    ``pw-cli(1)``,
pw-mididump |
    pw-mididump
    ###########

    ----------------------
    The PipeWire MIDI dump
    ----------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-mididump** [*options*] [*FILE*]

    DESCRIPTION
    ===========

    Dump MIDI messages to stdout.

    When a MIDI file is given, the events inside the file are printed.

    When no file is given, **pw-mididump** creates a PipeWire
    MIDI input stream and will print all MIDI events received on the port to
    stdout.

    OPTIONS
    =======

    -r | --remote=NAME
      The name the remote instance to monitor. If left unspecified,
      a connection is made to the default PipeWire instance.

    -h | --help
      Show help.

    --version
      Show version information.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-cat(1)``,
pw-mon |
    pw-mon
    ######

    --------------------
    The PipeWire monitor
    --------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-mon** [*options*]

    DESCRIPTION
    ===========

    Monitor objects on the PipeWire instance.

    OPTIONS
    =======

    -r | --remote=NAME
      The name the *remote* instance to monitor. If left unspecified,
      a connection is made to the default PipeWire instance.

    -h | --help
      Show help.

    --version
      Show version information.

    -N | --color=WHEN
      Whether to use color, one of 'never', 'always', or 'auto'. The
      default is 'auto'. **-N** is equivalent to **--color=never**.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
pw-profiler |
    pw-profiler
    ###########

    ---------------------
    The PipeWire profiler
    ---------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-profiler** [*options*]

    DESCRIPTION
    ===========

    Start profiling a PipeWire instance.

    If the server has the profiler module loaded, this program will
    connect to it and log the profiler data. Profiler data contains
    times and durations when processing nodes and devices started and
    completed.

    When this program is stopped, a set of **gnuplot** files and a script to generate
    SVG files from the .plot files is generated, along with a .html file to
    visualize the profiling results in a browser.

    This function uses the same data used by *pw-top*.

    OPTIONS
    =======

    -r | --remote=NAME
      The name the remote instance to monitor. If left unspecified,
      a connection is made to the default PipeWire instance.

    -h | --help
      Show help.

    --version
      Show version information.

    -o | --output=FILE
      Profiler output name (default "profiler.log").

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-top(1)``,
pw-top |
    pw-top
    ######

    ---------------------------
    The PipeWire process viewer
    ---------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-top** [*options*]

    DESCRIPTION
    ===========

    The *pw-top* program provides a dynamic real-time view of the pipewire
    node and device statistics.

    A hierarchical view is shown of Driver nodes and follower nodes. The Driver
    nodes are actively using a timer to schedule dataflow in the followers. The
    followers of a driver node as shown below their driver with a + sign in
    a tree-like representation.

    The columns presented are as follows:

    S
      Node status.
        E = ERROR
        C = CREATING
        S = SUSPENDED
        I = IDLE
        R = RUNNING

    ID
      The ID of the pipewire node/device, as found in *pw-dump* and *pw-cli*

    QUANT
      The current quantum (for drivers) and the suggested quantum for follower
      nodes.

      The quantum by itself needs to be divided by the RATE column to calculate
      the duration of a scheduling period in fractions of a second.

      For a QUANT of 1024 and a RATE of 48000, the duration of one period in the
      graph is 1024/48000 or 21.3 milliseconds.

      Follower nodes can have a 0 QUANT field, which means that the node does not
      have a suggestion for the quantum and thus uses what the driver selected.

      The driver will use the lowest quantum of any of the followers. If none of
      the followers select a quantum, the default quantum in the pipewire configuration
      file will be used.

      The QUANT on the drivers usually translates directly into the number of audio
      samples processed per processing cycle of the graph.

      See also https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/FAQ#pipewire-buffering-explained

    RATE
      The current rate (for drivers) and the suggested rate for follower
      nodes.

      This is the rate at which the *graph* processes data and needs to be combined with
      the QUANT value to derive the duration of a processing cycle in the graph.

      Some nodes can have a 0 RATE, which means that they don't have any rate
      suggestion for the graph. Nodes that suggest a rate can make the graph switch
      rates if the graph is otherwise idle and the new rate is allowed as
      a possible graph rate (see the pipewire configuration file).

      The RATE on (audio) driver nodes usually also translates directly to the
      samplerate used by the device. Although some devices might not be able to
      operate at the given samplerate, in which case resampling will need to be
      done. The negotiated samplerate with the device and stream can be found in
      the FORMAT column.

    WAIT
      The waiting time of a node is the elapsed time between when the node
      is ready to start processing and when it actually started processing.

      For Driver nodes, this is the time between when the node wakes up to
      start processing the graph and when the driver (and thus also the graph)
      completes a cycle. The WAIT time for driver is thus the elapsed time
      processing the graph.

      For follower nodes, it is the time spent between being woken up (when all
      dependencies of the node are satisfied) and when processing starts. The
      WAIT time for follower nodes is thus mostly caused by context switching.

      A value of --- means that the node was not signaled.  A value of +++
      means that the node was signaled but not awake.

    BUSY
      The processing time is started when the node starts processing until it
      completes and wakes up the next nodes in the graph.

      A value of --- means that the node was not started.  A value of +++
      means that the node was started but did not complete.

    W/Q
      Ratio of WAIT / QUANT.

      The W/Q time of the driver node is a good measure of the graph
      load. The running averages of the driver W/Q ratios are used as the DSP
      load in other (JACK) tools.

      Values of --- and +++ are copied from the WAIT column.

    B/Q
      Ratio of BUSY / QUANT

      This is a good measure of the load of a particular driver or follower
      node.

      Values of --- and +++ are copied from the BUSY column.

    ERR
      Total of Xruns and Errors

      Xruns for drivers are when the graph did not complete a cycle. This can
      be because a node in the graph also has an Xrun. It can also be caused when
      scheduling delays cause a deadline to be missed, causing a hardware
      Xrun.

      Xruns for followers are incremented when the node started processing but
      did not complete before the end of the graph cycle deadline.

    FORMAT
      The format used by the driver node or the stream. This is the hardware format
      negotiated with the device or stream.

      If the stream of driver has a different rate than the graph, resampling will
      be done.

      For raw audio formats, the layout is <sampleformat> <channels> <samplerate>.

      For IEC958 passthrough audio formats, the layout is IEC958 <codec> <samplerate>.

      For DSD formats, the layout is <dsd-rate> <channels>.

      For Video formats, the layout is <pixelformat> <width>x<height>.

    NAME
      Name assigned to the device/node, as found in *pw-dump* node.name

      Names are prefixed by *+* when they are linked to a driver (entry above with no +)

    OPTIONS
    =======

    -h | --help
      Show help.

    -b | --batch-mode
      Run in non-interactive batch mode, similar to top's batch mode.

    -n | --iterations=NUMBER
      Exit after NUMBER of batch iterations. Only used in batch mode.

    -r | --remote=NAME
      The name the *remote* instance to monitor. If left unspecified,
      a connection is made to the default PipeWire instance.

    -V | --version
      Show version information.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``pw-dump(1)``,
    ``pw-cli(1)``,
    ``pw-profiler(1)``,
pw-jack |
    pw-jack
    #######

    ----------------------------
    Use PipeWire instead of JACK
    ----------------------------

    :Manual section: 1
    :Manual group: General Commands Manual

    SYNOPSIS
    ========

    | **pw-jack** [*options*] *COMMAND* [*FILE*]

    DESCRIPTION
    ===========

    **pw-jack** modifies the ``LD_LIBRARY_PATH`` environment
    variable so that applications will load PipeWire's reimplementation
    of the JACK client libraries instead of JACK's own
    libraries. This results in JACK clients being redirected to
    PipeWire.

    If PipeWire's reimplementation of the JACK client libraries
    has been installed as a system-wide replacement for JACK's
    own libraries, then the whole system already behaves in that way,
    in which case **pw-jack** has no practical effect.

    OPTIONS
    =======

    -h
      Show help.

    -r NAME
      The name of the remote instance to connect to. If left
      unspecified, a connection is made to the default PipeWire
      instance.

    -v
      Verbose operation.

    EXAMPLES
    ========

    | **pw-jack** sndfile-jackplay /usr/share/sounds/freedesktop/stereo/bell.oga

    NOTES
    =====

    Using PipeWire for audio is currently considered to be
    experimental.

    AUTHORS
    =======

    The PipeWire Developers <@PACKAGE_BUGREPORT@>;
    PipeWire is available from @PACKAGE_URL@

    SEE ALSO
    ========

    ``pipewire(1)``,
    ``jackd(1)``,
PipeWire Session Manager | The PipeWire Daemon is primarily a framework that allows devices and applications to exchange data
PulseAudio Compatibility |
▼PipeWire Modules | A PipeWire module is effectively a PipeWire client in an `.so` file that shares the Context with the loading entity
PipeWire Module: Access | The `access` module performs access checks on clients
PipeWire Module: Adapter |
PipeWire Module: AVB |
PipeWire Module: Client Device |
PipeWire Module: Client Node |
PipeWire Module: Combine Stream | The combine stream can make:
PipeWire Module: Echo Cancel | The `echo-cancel` module performs echo cancellation
PipeWire Module: Example Filter | The example filter is a good starting point for writing a custom filter
PipeWire Module: Example Sink | The example sink is a good starting point for writing a custom sink
PipeWire Module: Example Source | The example source is a good starting point for writing a custom source
PipeWire Module: Fallback Sink | Fallback sink, which appear dynamically when no other sinks are present
PipeWire Module: FFADO firewire audio driver | The ffado-driver module provides a source or sink using the libffado library for reading and writing to firewire audio devices
PipeWire Module: Filter-Chain | The filter-chain allows you to create an arbitrary processing graph from LADSPA, LV2 and builtin filters
PipeWire Module: JACK DBus detect | Automaticall creates a sink/source when a jackdbus server is started and connect to JACK
PipeWire Module: JACK Tunnel | The jack-tunnel module provides a source or sink that tunnels all audio to a JACK server
PipeWire Module: Link Factory |
PipeWire Module: Loopback | The loopback module passes the output of a capture stream unmodified to a playback stream
PipeWire Module: Metadata |
PipeWire Module: Netjack2 driver | The netjack2-driver module provides a source or sink that is following a netjack2 driver
PipeWire Module: Netjack2 manager | The netjack2 manager module listens for new netjack2 driver messages and will start a communication channel with them
PipeWire Module: Unix Pipe Tunnel | The pipe-tunnel module provides a source or sink that tunnels all audio to or from a unix pipe respectively
PipeWire Module: Portal | The `portal` module performs access control management for clients started inside an XDG portal
PipeWire Module: Profiler | The profiler module provides a Profiler interface for applications that can be used to receive profiling information
PipeWire Module: Protocol Native | The native protocol module implements the PipeWire communication between a client and a server using unix local sockets
PipeWire Module: Protocol Pulse | This module implements a complete PulseAudio server on top of PipeWire
PipeWire Module: Protocol Simple | The simple protocol provides a bidirectional audio stream on a network socket
PipeWire Module: Pulse Tunnel | The pulse-tunnel module provides a source or sink that tunnels all audio to a remote PulseAudio connection
PipeWire Module: AirPlay Sink | Creates a new Sink to stream to an Airplay device
PipeWire Module: RAOP Discover | Automatically creates RAOP (Airplay) sink devices based on zeroconf information
PipeWire Module: ROC sink | The `roc-sink` module creates a PipeWire sink that sends samples to a preconfigured receiver address
PipeWire Module: ROC source | The `roc-source` module creates a PipeWire source that receives samples from ROC sender and passes them to the sink it is connected to
PipeWire Module: SAP Announce and create RTP streams | The `rtp-sap` module announces RTP streams that match the rules with the announce-stream action
PipeWire Module: RTP sink | The `rtp-sink` module creates a PipeWire sink that sends audio RTP packets
PipeWire Module: RTP source | The `rtp-source` module creates a PipeWire source that receives audio and midi RTP packets
PipeWire Module: RTP session | The `rtp-session` module creates a media session that is announced with avahi/mDNS/Bonjour
PipeWire Module: RT | The `rt` modules can give real-time priorities to processing threads
PipeWire Module: Session Manager | This module implements some usefull objects for implementing a session manager
PipeWire Module: VBAN receiver | The `vban-recv` module creates a PipeWire source that receives audio and midi VBAN packets
PipeWire Module: VBAN sender | The `vban-send` module creates a PipeWire sink that sends audio and midi VBAN packets
PipeWire Module: X11 Bell | The `x11-bell` module intercept the X11 bell events and uses libcanberra to play a sound
PipeWire Module: Zeroconf Discover | Use zeroconf to detect and load module-pulse-tunnel with the right parameters
▼Tutorial | Welcome to the PipeWire tutorial
Tutorial - Part 1: Getting Started | Index | Tutorial - Part 2: Enumerating Objects
Tutorial - Part 2: Enumerating Objects | Tutorial - Part 1: Getting Started | Index | Tutorial - Part 3: Forcing A Roundtrip
Tutorial - Part 3: Forcing A Roundtrip | Tutorial - Part 2: Enumerating Objects | Index | Tutorial - Part 4: Playing A Tone
Tutorial - Part 4: Playing A Tone | Tutorial - Part 3: Forcing A Roundtrip | Index | Tutorial - Part 5: Capturing Video Frames
Tutorial - Part 5: Capturing Video Frames | Tutorial - Part 4: Playing A Tone | Index | Tutorial - Part 6: Binding Objects
Tutorial - Part 6: Binding Objects | Tutorial - Part 5: Capturing Video Frames | Index
List of example programs |
▼PipeWire API | The PipeWire API consists of several parts:
Client Implementation |
Proxy |
Streams |
Thread Loop |
▼SPA (Simple Plugin API) | SPA (Simple Plugin API) is an extensible API to implement all kinds of plugins
SPA Design |
SPA Plugins | SPA plugins are dynamically loadable objects that contain objects and interfaces that can be introspected and used at runtime in any application
SPA POD | POD (plain old data) is a sort of data container
SPA Buffers | ‍What is the array of `spa_data` in `spa_buffer`? A SPA Buffer contains metadata and data