PulseAudio

Aus Stratum 0
Version vom 23:17, 14. Okt. 2012 von Daniel Bohrer (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

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 /etc/pulse/default.pa 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: pulseaudio --kill && pulseaudio --start

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

Client-Seite

Um Audio-Streams über die Spacekiste oder die minibox wiederzugeben, gibt es mehrere Wege.

pacmd

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 pacmd list-sink-inputs 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 der Sink auf dem Server. Diesen kann man mit pacmd list-sinks herausfinden (einfach nach den menschenlesbaren Bezeichnungen suchen…). Beispiel:

index: 10
	name: <tunnel.minibox.local.alsa_output.pci-0000_00_08.0.analog-stereo>
	driver: <module-tunnel.c>
	flags: NETWORK HW_MUTE_CTRL HW_VOLUME_CTRL LATENCY 
	state: SUSPENDED
	suspend cause: IDLE 
	priority: 0
	volume: 0:  75% 1:  75%
	        balance 0.00
	base volume: 100%
	volume steps: 65537
	muted: no
	current latency: 0.00 ms
	max request: 0 KiB
	max rewind: 0 KiB
	monitor source: 16
	sample spec: s16le 2ch 44100Hz
	channel map: front-left,front-right
	             Stereo
	used by: 0
	linked by: 0
	fixed latency: 250.00 ms
	module: 39
	properties:
		device.description = "Built-in Audio Analog Stereo on pulse@minibox"
		tunnel.remote.server = "[192.168.178.108]:4713"
		tunnel.remote.sink = "alsa_output.pci-0000_00_08.0.analog-stereo"
		device.icon_name = "audio-card"
		tunnel.remote_version = "26"
		tunnel.remote.user = "pulse"
		tunnel.remote.fqdn = "minibox"
		tunnel.remote.description = "Built-in Audio Analog Stereo"

So kann man jetzt PulseAudio anweisen, den entsprechenden Stream umzuleiten:

pacmd move-sink-input 22 10

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 10

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.