libpipew...l-simple(7)
πΈ NAME πΈ
libpipewire-module-protocol-simple β say hi to Protocol Simple bestie π. This page lives in the Miscellaneous Information Manual, and the header up top is just the man name chillin' at the edge of your terminal (libpipew...l-simple(7), truncated vibes, you know how it is).
β¨ DESCRIPTION β¨
okay so here's the tea π«: the simple protocol hands you a bidirectional audio stream on a network socket. That's it, that's the whole main character moment. Periodt.
It's meant to be used with the simple protocol player app, which is available on Android, to play and record a stream. π§
Every single client that connects is gonna create a capture and/or playback stream β which one(s) depends on the configuration options you picked. Choose your own adventure energy. π¦
You can also use it to feed audio data to other clients, like the snapcast server. Feeding the girlies, iconic behavior π
π MODULE NAME π
libpipewire-module-protocol-simple
π MODULE OPTIONS π
captureβ boolean, is capture enabled or nah? If it's on, this creates a capture stream or a sink for each connected client.playbackβ boolean, is playback enabled or nah? If it's on, this creates a playback or source stream for each connected client.local.ifname = <str>β the interface name to use.local.ifaddress = <str>β the interface address to use.server.address = []β an array of server addresses to listen on, written astcp:(<ip>:)<port>.capture.propsβ optional properties for the capture stream.playback.propsβ optional properties for the playback stream.
π GENERAL OPTIONS π
These ones have well-known behavior, so they're lowkey self-explanatory bestie π
remote.nameaudio.rateaudio.formataudio.channelsaudio.layoutaudio.positionnode.latencynode.ratestream.capture.sinknode.namenode.virtualnode.networktarget.object
By default the server will work with stereo 16 bits samples at 44.1KHz. No cap π
π 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. And when the connection is somehow broken? Snapcast tries to reconnect. It's giving loyal, it's giving persistent, we love a resilient king π₯
okay that's the whole page bestie, you ate that π
β¨ this was libpipew...l-simple(7) from PipeWire 1.6.11, mwah, go forth and stream ππ¦π
π¦ where this page comes from
- fedora 44: pipewire-libs 1.6.11-1.fc44 Β· MIT AND GPL-2.0-or-later AND BSD-2-Clause AND LGPL-2.0-or-later
- fedora 44: pipewire-libs 1.6.11-1.fc44 Β· MIT AND GPL-2.0-or-later AND BSD-2-Clause AND LGPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms