Static and persistent links to client streams, that are only distinguishable by their corresponding application.process.id property
Hi!
I'm referring to my comment/question under @ashoks Blog post regarding the upcoming changes in Wireplumber's configuration system and it's abilities to enable runtime setting changes.
I'm currently working on a multiroom audio setup using snapserver/snapclient and pipewire as audio server. Assuming, a host is connected to multiple bluetooth speakers and for each of the speakers an instance of snapclient is spawned.
PipeWire 'pipewire-0' [0.3.64, michael@manjaro-xps13, cookie:720878141]
└─ Clients:
31. xdg-desktop-portal [0.3.64, michael@manjaro-xps13, pid:1106]
37. wpctl [0.3.64, michael@manjaro-xps13, pid:7415]
47. WirePlumber [0.3.64, michael@manjaro-xps13, pid:6678]
53. WirePlumber [export] [0.3.64, michael@manjaro-xps13, pid:6678]
54. pipewire [0.3.64, michael@manjaro-xps13, pid:1493]
55. Plasma-PulseAudio [0.3.64, michael@manjaro-xps13, pid:1226]
62. PipeWire ALSA [snapclient] [0.3.64, michael@manjaro-xps13, pid:6857]
68. PipeWire ALSA [snapclient] [0.3.64, michael@manjaro-xps13, pid:6785]
Audio
├─ Devices:
│ 36. Cinebar Duett [bluez5]
│ 40. Bose Solo 5 system [bluez5]
│
├─ Sinks:
│ * 32. Cinebar Duett [vol: 0.06]
│ 64. Bose Solo 5 system [vol: 0.34]
│
├─ Sink endpoints:
│
├─ Sources:
│
├─ Source endpoints:
│
└─ Streams:
61. snapclient
58. output_FR > Bose Solo 5 system:playback_FR [active]
60. output_FL > Bose Solo 5 system:playback_FL [active]
69. snapclient
70. output_FL > Cinebar Duett:playback_FL [active]
71. output_FR > Cinebar Duett:playback_FR [active]
The goal is an headless implementation (like for example on a RaspberryPi), so ignore for now, that the reference system is running with Plasma as DE. This is for debugging and visualization purposes only.
Within wireplumber, each of the snapclient instances are only distinguishable by their corresponding application.process.id property which actually represents the pid of the system process that spawned the client. Assuming that the pid of the snapclient processes are only known during runtime, each of streams shall be exclusively and statically linked to either one of the connected bluetooth speakers following this mapping:
Link 1: Stream of snapclient pid X <-> Sink of BT Speaker A
Link 2: Stream of snapclient pid Y <-> Sink of BT Speaker B
This setup shall be persistent and since we are working headless I'd like the Session Manager to take care about it. Would this be possible and if yes: how to achieve it?