libpipew...2-driver(7)

✨ libpipew...2-driver(7) ✨

okay bestie, quick vibe check first: this page lives in the Miscellaneous Information Manual, aka section 7. Sit down, grab a strawberry πŸ“, and let's get into it.


🌈 NAME 🌈

libpipewire-module-netjack2-driver β€” the Netjack2 driver. periodt.


πŸ’… DESCRIPTION πŸ’…

So the netjack2-driver module hands you a source or a sink that follows a netjack2 manager. It's literally following the manager around like a loyal bestie 🫢.

It's meant to be used over stable (ethernet) network connections, with minimal latency and jitter. no cap, that's the whole point.

Now, normally the driver is the one deciding how many ports it sends and receives from the manager. But by default, those values are set to -1 so that the manager decides the number of ports instead. the manager said "I got this" πŸ’….

With the global or per stream audio.port and midi.ports properties, this behaviour can be adjusted.

The driver will send out UDP messages on a (typically) multicast address to inform the manager of the available driver. That then instructs the manager to configure and start the driver. it's giving "hey bestie I'm here" ✨.

On the driver side, a sink and/or source with the specified number of audio and midi ports will be created. On the manager side there will be a corresponding source and/or sink created respectively. matching! iconic! πŸ‘‘

The driver will be scheduled with exactly the same period as the manager, but with a configurable number of periods of delay β€” see netjack2.latency, default 2.


πŸŽ€ MODULE NAME πŸŽ€

libpipewire-module-netjack2-driver


✨ MODULE OPTIONS ✨

  • driver.mode β€” the driver mode, sink|source|duplex, default duplex. This sets the per stream audio.port and midi.ports default from -1 to 0. sink mode defaults to no source ports, source mode to no sink ports, and duplex leaves the defaults as they are. choose your fighter πŸ’…
  • local.ifname = <str> β€” interface name to use
  • net.ip =<str> β€” multicast IP address, default "225.3.19.154"
  • net.port =<int> β€” control port, default 19000
  • net.mtu = <int> β€” MTU to use, default 1500
  • net.ttl = <int> β€” TTL to use, default 1
  • net.loop = <bool> β€” loopback multicast, default false
  • source.ip =<str> β€” IP address to bind to, default "0.0.0.0"
  • source.port =<int> β€” port to bind to, default 0 (allocate)
  • netjack2.client-name β€” the name of the NETJACK2 client.
  • netjack2.latency β€” the latency in cycles, default 2
  • audio.ports β€” the number of audio ports. Can also be added to the stream props. A value of -1 will configure to the number of audio ports on the manager.
  • midi.ports β€” the number of midi ports. Can also be added to the stream props. A value of -1 will configure to the number of midi ports on the manager.
  • source.props β€” Extra properties for the source filter.
  • sink.props β€” Extra properties for the sink filter.

🌸 GENERAL OPTIONS 🌸

Options with well-known behavior. the classics πŸ’–

  • remote.name
  • audio.channels
  • audio.layout
  • audio.position
  • node.name
  • node.description
  • node.group
  • node.virtual
  • media.class
  • target.object to specify the remote node.name or serial.id to link to

πŸ¦‹ EXAMPLE CONFIGURATION OF A DUPLEX SINK/SOURCE πŸ¦‹

copy this, it's so good 🫢

# ~/.config/pipewire/pipewire.conf.d/my-netjack2-driver.conf

context.modules = [
{   name = libpipewire-module-netjack2-driver
    args = {
        #netjack2.client-name = PipeWire
        #netjack2.latency     = 2
        #midi.ports           = 0
        #audio.ports          = -1
        #audio.channels       = 2
        #audio.position       = [ FL FR ]
        source.props = {
            # extra source properties
        }
        sink.props = {
            # extra sink properties
        }
    }
}
]

ngl bestie, plug in that ethernet cable first. "stable connection" is not a suggestion, it's the whole assignment πŸ’€

and that's the page!! this one's coming at you straight from PipeWire, version 1.6.11 β€” go forth and multicast, mwah πŸ’œπŸŽ€βœ¨

πŸ“¦ where this page comes from