Section 7 · Overviews and conventions

libpipewire-module-protocol-simple.7

Package: pipewire-libs

On this page

libpipewire-module-protocol-simple

NAME
DESCRIPTION
MODULE NAME
MODULE OPTIONS
GENERAL OPTIONS
EXAMPLE CONFIGURATION
EXAMPLE CONFIGURATION FOR A SNAPCAST SERVER


NAME

libpipewire-module-protocol-simple − 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

•capture: boolean if capture is enabled. This will create a capture stream or sink for each connected client.
•playback: boolean if playback is enabled. This will create a playback or source stream for each connected client.
•local.ifname = <str>: interface name to use
•local.ifaddress = <str>: interface address to use
•server.address = []: an array of server addresses to listen on as tcp:(<ip>:)<port>.
•capture.props: optional properties for the capture stream
•playback.props: optional properties for the playback stream

GENERAL OPTIONS

Options with well-known behavior.

•remote.name
•audio.rate
•audio.format
•audio.channels
•audio.position
•node.latency
•node.rate
•stream.capture.sink
•node.name
•target.object

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.