libpipew...discover(7)

πŸ’– libpipewire-module-snapcast-discover πŸ’–

okay bestie so this is a page from the Miscellaneous Information Manual (that's the manual name, keep it in your notes πŸ“) and we're talking about libpipew...discover(7) β€” the snapcast discovery situation. buckle up, it's cute AND useful.


✨ NAME ✨

libpipewire-module-snapcast-discover β€” Snapcast Discover 🌈


πŸ¦‹ DESCRIPTION πŸ¦‹

so basically it automatically creates a Snapcast sink device based on zeroconf information. no cap, it just does it for you. ✨

This module will load module-protocol-simple for each announced stream that matches the rule with the create-stream action, and passes the properties to the module. πŸ’…

If no stream.rules are given, it will create a sink for all announced snapcast servers. all of them. every single one. πŸ‘‘

A new stream will be created on the snapcast server with the given snapcast.stream-name or PipeWire-<hostname>. You will need to route this new stream to clients with the snapcast control application β€” that part is on you, bestie 🫢


πŸ‘‘ MODULE NAME πŸ‘‘

libpipewire-module-snapcast-discover


πŸŽ€ MODULE OPTIONS πŸŽ€

Options specific to the behavior of this module β€” the little knobs, the vibes dials:

  • snapcast.discover-local β€” allow discovery of local services as well. false by default. (so bestie, by default it's not doing this, got it? πŸ’€)
  • stream.rules = <rules>: match rules, use create-stream actions. See Protocol Simple for module properties. πŸ“‹

🌸 stream.rules matches 🌸

the things it can match on, iconic:

  • snapcast.ip β€” the IP address of the snapcast server
  • snapcast.port β€” the port of the snapcast server
  • snapcast.ifindex β€” the interface index where the snapcast announcement was received
  • snapcast.ifname β€” the interface name where the snapcast announcement was received
  • snapcast.name β€” the name of the snapcast server
  • snapcast.hostname β€” the hostname of the snapcast server
  • snapcast.domain β€” the domain of the snapcast server

🧚 stream.rules create-stream 🧚

In addition to all the properties that can be passed to Protocol Simple, you can also set these lil extras:

  • snapcast.stream-name β€” The name of the stream on a snapcast server.
  • node.name β€” The name of the sink that is created on the sender.

πŸ’– EXAMPLE CONFIGURATION πŸ’–

here's the whole thing, verbatim, don't touch the formatting bestie, it's giving precision:

# ~/.config/pipewire/pipewire.conf.d/my-snapcast-discover.conf

context.modules = [
{   name = libpipewire-module-snapcast-discover
    args = {
        stream.rules = [
            {   matches = [
                    {    snapcast.ip = "~.*"
                         #snapcast.port = 1000
                         #snapcast.ifindex = 1
                         #snapcast.ifname = eth0
                         #snapcast.name = ""
                         #snapcast.hostname = ""
                         #snapcast.domain = ""
                    }
                ]
                actions = {
                    create-stream = {
                        #audio.rate = 44100
                        #audio.format = S16LE   # S16LE, S24_32LE, S32LE
                        #audio.channels = 2
                        #audio.position = [ FL FR ]
                        #
                        # The stream name as is appears on the snapcast
                        # server:
                        #snapcast.stream-name = "PipeWire"
                        #
                        # The name of the sink on the sender:
                        #node.name = "Snapcast Sink"
                        #
                        #capture = true
                        #server.address = [ "tcp:4711" ]
                        #capture.props = {
                            #target.object = ""
                            #node.latency = 2048/48000
                            #media.class = "Audio/Sink"
                        #}
                    }
                }
            }
        ]
    }
}
]
🫢 notice how everything is commented out with #? that's the default config energy β€” uncomment what you actually want, don't just rawdog it. 😭

🌈 SEE ALSO 🌈

Protocol Simple


and that's the whole page, you ate it up fr fr πŸ’…βœ¨ this was PipeWire version 1.6.11, drop number libpipew...discover(7) β€” go be the main character of your audio routing, obsessed with you, byeee πŸŽ€πŸ¦‹πŸ’œ

πŸ“¦ where this page comes from