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 between 46000 and 47024. mysterious. we love a randomized queen 🎲
  • local.ifname = <str> β€” the interface name to use.
  • net.mtu = <int> β€” the MTU to use. default is 1280.
  • net.ttl = <int> β€” the TTL to use. default is 1.
  • net.loop = <bool> β€” loopback multicast. default is false.
  • sess.min-ptime = <float> β€” minimum packet time, in milliseconds. default is 2.
  • sess.max-ptime = <float> β€” maximum packet time, in milliseconds. default is 20.
  • sess.name = <str> β€” a session name.
  • rtp.ptime = <float> β€” size of the packets, in milliseconds. default goes up to the MTU but stays between sess.min-ptime and sess.max-ptime.
  • rtp.framecount = <int> β€” number of samples per packet. default goes up to the MTU but stays between sess.min-ptime and sess.max-ptime.
  • sess.latency.msec = <float> β€” target node latency, in milliseconds. default is the same as rtp.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 of audio|midi|opus. default is audio.
  • 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.name
  • audio.format
  • audio.rate
  • audio.channels
  • audio.layout
  • audio.position
  • node.name
  • node.description
  • media.name
  • node.group
  • node.latency
  • node.virtual
  • node.network
  • media.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