LIBPIPEWIRE-MODULE-RTP-SINK(7)
β¨ libpipewire-module-rtp-sink π
okay bestie, we are looking at a page from the Miscellaneous Information Manual and it's all about libpipewire-module-rtp-sink, which is literally the module that makes your audio travel over the network like it's FaceTiming its friends. no cap. π
πΈ NAME πΈ
libpipewire-module-rtp-sink β RTP sink. she sends. she slays. π«Ά
π DESCRIPTION π
So basically? The rtp-sink module creates a PipeWire sink whose entire personality is sending audio RTP packets. that's it, that's the job. she's a sink, she ships packets, iconic behavior honestly β¨
π MODULE NAME π
libpipewire-module-rtp-sink
π¦ MODULE OPTIONS π¦
these are the options that are specifically about how this module behaves, and yes we are going through every single one because we don't skip, we don't scroll past, we read. πβ¨
source.ip= <str> β the source IP address. default is"0.0.0.0".destination.ip= <str> β the destination IP address. default is"224.0.0.56".destination.port= <int> β the destination port. default is random, and it lands somewhere between46000and47024. mysterious. we love a randomized queen π²local.ifname= <str> β the interface name to use.net.mtu= <int> β the MTU to use. default is1280.net.ttl= <int> β the TTL to use. default is1.net.loop= <bool> β loopback multicast. default isfalse.sess.min-ptime= <float> β minimum packet time, in milliseconds. default is2.sess.max-ptime= <float> β maximum packet time, in milliseconds. default is20.sess.name= <str> β a session name.rtp.ptime= <float> β size of the packets, in milliseconds. default goes up to the MTU but stays betweensess.min-ptimeandsess.max-ptime.rtp.framecount= <int> β number of samples per packet. default goes up to the MTU but stays betweensess.min-ptimeandsess.max-ptime.sess.latency.msec= <float> β target node latency, in milliseconds. default is the same asrtp.ptime.sess.ts-offset= <int> β an offset to apply to the timestamp. default is-1, which means a random offset. surprise! πsess.ts-refclk= <string> β the name of a reference clock.sess.media= <string> β the media type, one ofaudio|midi|opus. default isaudio.stream.props={}β properties to be passed to the stream.aes67.driver-group= <string> β for AES67 streams, this can be specified in order to let the sink be driven by a different node than the PTP driver. β¨
π GENERAL OPTIONS π
these ones have well-known behavior, so they're the communal besties of the options world. all listed, no crumbs left:
remote.nameaudio.formataudio.rateaudio.channelsaudio.layoutaudio.positionnode.namenode.descriptionmedia.namenode.groupnode.latencynode.virtualnode.networkmedia.class
π EXAMPLE CONFIGURATION π
here's what it looks like when you actually write it down. the path is doing main character energy in the comment at the top, periodt:
# ~/.config/pipewire/pipewire.conf.d/my-rtp-sink.conf
context.modules = [
{ name = libpipewire-module-rtp-sink
args = {
#local.ifname = "eth0"
#source.ip = "0.0.0.0"
#destination.ip = "224.0.0.56"
#destination.port = 46000
#net.mtu = 1280
#net.ttl = 1
#net.loop = false
#sess.min-ptime = 2
#sess.max-ptime = 20
#sess.name = "PipeWire RTP stream"
#sess.media = "audio"
#audio.format = "S16BE"
#audio.rate = 48000
#audio.channels = 2
#audio.position = [ FL FR ]
stream.props = {
node.name = "rtp-sink"
}
}
}
]
and one more little note, bestie:
Since 0.3.60 β that's when this whole thing showed up. early queen behavior π
okay that's the whole page!! this was PipeWire version 1.6.11 on the libpipew...-rtp-sink(7) page, and we read every line of it together like the literate icons we are. go forth and ship those RTP packets, bestie, you got this π«Άβ¨π
π¦ 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