Sowohl die [[minibox]] im Sofaraum als auch die [[Spacekiste]] im Frickelraum nehmen PulseAudio-Streams über Port 4713 aus dem lokalen Netzwerk an, und announcen ihren PulseAudio-Sinks über Zeroconf. Das macht es möglich, über beliebige Clients z.B. Musik zu streamen.

== Server-Seite ==
Aud dem Server in <tt>/etc/pulse/default.pa</tt> müssen diese zwei Zeilen aktiviert werden:
 load-module module-native-protocol-tcp auth-anonymous=1
 load-module module-zeroconf-publish

Dann entweder neu einloggen (der PulseAudio-Server ist ja immer an einen Benutzer-Session gekoppelt), oder PulseAudio neustarten: <tt>pulseaudio --kill && pulseaudio --start</tt>

Zu beachten ist, dass unter Debian/Ubuntu das Modul <tt>pulseaudio-module-zeroconf</tt> installiert sein muss.

=== Sinks ===
Die Sinks auf den beiden Rechnern heißen (sofern Multicast DNS und Auto-Discovery via Zeroconf (siehe [[#Client-Seite|unten]]) auf dem Client aktiviert ist):
* <tt>tunnel.minibox.local.alsa_output.pci-0000_00_08.0.analog-stereo</tt>
* <tt>tunnel.minibox.local.alsa_output.0.iec958-stereo</tt> (Digital-Ausgang, aber meist nicht angeschlossen)
* <tt>tunnel.spacekiste.local.alsa_output.pci-0000_00_1b.0.analog-stereo</tt>

== Client-Seite ==
Um Audio-Streams über die Spacekiste oder die minibox wiederzugeben, gibt es mehrere Wege. Um den lokalen PulseAudio-Server anzuweisen, Audio-Streams umzuleiten, muss das Modul <tt>module-zeroconf-discover</tt> aktiviert sein (unter Debian/Ubuntu/Fedora im Paket <tt>pulseaudio-module-zeroconf</tt> enthalten). Dazu muss <tt>/etc/pulse/default.pa</tt> die folgende Zeile enthalten:
 load-module module-zeroconf-discover
Nach Anpassen der Datei muss PulseAudio neu gestartet werden: <tt>pulseaudio --kill && pulseaudio --start</tt>

=== <tt>pacmd</tt> ===
Ein nützliches Konsolen-Programm für alles mögliche. 

==== Einzelne Audio-Streams umleiten ====
Man startet die Wiedergabe auf dem Client und sucht sich dann mit <tt>pacmd list-sink-inputs</tt> den Index des Streams, den man umleiten will. Die Ausgabe sieht etwa wie folgende aus:
 >>> 1 sink input(s) available.
 index: '''22'''
 	driver: <protocol-native.c>
 	flags: 
 	state: RUNNING
 	sink: 0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
 	volume: 0:  64% 1:  64%
 	        0: -11.47 dB 1: -11.47 dB
 	        balance 0.00
 	muted: no
 	current latency: 79.66 ms
 	requested latency: 210.00 ms
 	sample spec: float32le 2ch 44100Hz
 	channel map: front-left,front-right
 	             Stereo
 	resample method: copy
 	module: 7
 	client: 174 <MPlayer>
 	properties:
 		media.name = "audio stream"
 		application.name = "MPlayer"
 		native-protocol.peer = "UNIX socket client"
 		native-protocol.version = "26"
 		application.process.id = "28609"
 		application.process.user = "rohieb"
 		application.process.host = "r2d2"
 		application.process.binary = "mplayer"
 		application.language = "C"
 		window.x11.display = ":0"
 		application.process.machine_id = "3d50ca96e3bbb8de38d0d46a00000298"
 		application.process.session_id = "3d50ca96e3bbb8de38d0d46a00000298-1349808857.893717-1874973741"
 		module-stream-restore.id = "sink-input-by-application-name:MPlayer"

Außerdem braucht man den Index oder den Namen der Sink auf dem Server (siehe [[#Sinks|oben]], den Index kann man zur Not auch mit <tt>pacmd list-sinks</tt> herausfinden).

So kann man jetzt PulseAudio anweisen, den entsprechenden Stream umzuleiten:
 pacmd move-sink-input 22 tunnel.minibox.local.alsa_output.pci-0000_00_08.0.analog-stereo

==== Alle Audio-Streams umleiten ====
Um jegliche Audio-Ausgabe vom Client auf den Server umzuleiten, sucht man wie oben den Sink-Index des Servers heraus. Diesen setzt man dann einfach als Standard-Sink:
 pacmd set-default-sink tunnel.minibox.local.alsa_output.pci-0000_00_08.0.analog-stereo

Schon laufende Audio-Streams müssen mit der obigen Methode einzeln verschoben werden.

=== pavucontrol ===
Mit der Lautstärkeregelung auf Gnome-Systemen kann man das ganze auch per Maus erledigen (siehe Bilder). Die Default Sink kann man auf dem Tab ''Output Devices'' über den Button ''Set as fallback'' festsetzen.
<gallery widths="400" heights="200">
Datei:PulseAudio Volume Control Playback Tab.png|Einzelne Streams umleiten
Datei:PulseAudio Volume Control Output Devices Tab.png|Default Sink setzen
</gallery>

=== Direkte Verbindung ohne Umweg über den lokalen PulseAudio-Server ===
Man kann einzelne Anwendungen auch anweisen, sich direkt mit dem Server zu verbinden, ohne Umweg über den lokalen PulseAudio-Server auf dem Client-System. Dazu setzt man die Umgebungsvariable <tt>PULSE_SERVER</tt> auf den Namen oder die IP-Adresse des Servers:
 PULSE_SERVER=minibox.local mplayer schönemusik.mp3

Das hat prinzipiell den Vorteil, dass kein lokaler PulseAudio-Server laufen muss (auch das Modul <tt>module-zeroconf-discover</tt> muss nicht wie oben geladen sein). Außerdem fügt ein lokaler PulseAudio-Server tendenziell eher mehr Latenz zum Signal hinzu und verbraucht CPU.

=== Wiedergabe im ganzen Space (buggy, CPU-lastig) ===
Pulse hat theoretisch die Möglichkeit, mehrere Sinks gleichzeitig zu bespielen. Dies macht das Modul <tt>module-combine-sink</tt>. Dabei werden ein oder mehrere Sinks unter einem neuen, virtuellen Sink neu zusammengefasst.

 pacmd load-module module-combine-sink sink_name=space slaves=tunnel.spacekiste.local.alsa_output.pci-0000_00_1b.0.analog-stereo,tunnel.minibox.local.alsa_output.pci-0000_00_08.0.analog-stereo

Hier habe ich den neuen virtuellen Sink <tt>space</tt> genannt, die Namen der Slave-Sinks werden mit Kommata getrennt.
Danach soll der virtuelle Sink an den üblichen, verdächtigen Stellen auftauchen (auch im <tt>pavucontrol</tt>), habe es so aber noch nicht zum Laufen bekommen.
Eine direktere Möglichkeit zur Wiedergabe ist
 mplayer -ao pulse::space nyancat.opus
Hat aber Audioglitches trotz vergrößerter Buffer, läuft nach einigen Sekunden aus der Synchronisation und verursacht derzeit 17% CPU-Last.

[[Kategorie:Infrastruktur]]
[[Kategorie:Dokumentation]]