libpipewire-module-protocol-simple - Man Page

Protocol Simple

Description

The simple protocol provides a bidirectional audio stream on a network socket.

It is meant to be used with the simple protocol player app, available on Android to play and record a stream.

Each client that connects will create a capture and/or playback stream, depending on the configuration options.

You can also use it to feed audio data to other clients such as the snapcast server.

Module Name

libpipewire-module-protocol-simple

Module Options

General Options

Options with well-known behavior.

By default the server will work with stereo 16 bits samples at 44.1KHz.

Example Configuration

# ~/.config/pipewire/pipewire.conf.d/my-protocol-simple.conf

context.modules = [
{   name = libpipewire-module-protocol-simple
    args = {
        # Provide capture stream, clients can capture data from PipeWire
        capture = true
        #
        # Provide playback stream, client can send data to PipeWire for playback
        playback = true
        #
        #audio.rate = 44100
        #audio.format = S16
        #audio.channels = 2
        #audio.position = [ FL FR ]
        #
        # The addresses this server listens on for new
        # client connections
        server.address = [
            "tcp:4711"
        ]
        capture.props = {
            # The node name or id to use for capture.
            #target.object = null
            #
            # To make the capture stream capture the monitor ports
            #stream.capture.sink = false
            #
            # Make this a sink instead of a capture stream
            #media.class = Audio/Sink
        }
        playback.props = {
            # The node name or id to use for playback.
            #target.object = null
            #
            # Make this a source instead of a playback stream
            #media.class = Audio/Source
        }
    }
}
]

Example Configuration for a Snapcast Server

 context.modules = [
 {   name = libpipewire-module-protocol-simple
     args = {
         # Provide sink
         capture = true
         audio.rate = 48000
         audio.format = S16
         audio.channels = 2
         audio.position = [ FL FR ]

         # The addresses this server listens on for new
         # client connections
         server.address = [
             "tcp:4711"
         ]
         capture.props = {
             # Make this a sink instead of a capture stream
             media.class = Audio/Sink
         }
     }
 }
 ]

 On the snapcast server, add the following to the `snapserver.conf` file:

\code{.unparsed}
 [stream]
 sampleformat =  48000:16:2
 source = tcp://127.0.0.1:4711?name=PipeWireSnapcast&mode=client

Snapcast will try to connect to the protocol-simple server and fetch the samples from it. Snapcast tries to reconnect when the connection is somehow broken.

Referenced By

libpipewire-modules(7).

1.2.6 PipeWire