Streamen von Audio via WLAN und dem Apple Airport Express (AirPlay)

Intention

Um von allene seinen Geräten Musik zentral auf meinen Lautsprechern wiederzugeben bietet sich ein Audio Streming Server an. Als Lösung ist z.B. ein Raspberry Pi mit pulseaudio Server möglich. Da aber der DAO Wandler nicht der beste ist, entschied ich mich hier mal untypisch etwas fertiges zu verwenden und Apples AirPlay technologie zu verwenden. Ein Airplay der ersten Generation erhält man gebrauch unter 30 Euro, da lohnt sich das selberbauen kaum. „leider“ entschied ich mich für ein Gerät der zweiten Generation, welche nicht so einfach wie die erste Generation unter Linux zu betreiben sind.

Wichtig

Obwohl es funktioniert, empfehle ich die Verwendung von Linux mit dem Apple Airport Express nicht! Es ist viel einfacher mit dem Chromecast Audio umzusetzten!

Probleme und Lösungen

Problem: Airport der neuen Generation haben ein neues Protokoll, daher funktionieren die Anleitungen die im Internet zu finden sind derzeit nicht. Eine Alternative ist das sich in Entwicklung befindende Modul raop2. Dabei stieß ich auf folgende zwei Probleme:

  1. Die Automatische Erkennung wies meinem AirPort eine 169.254.112.43 als IP-Adresse zu (wahrscheinlich über zeroconf) über welche das Gerät nicht ansprechbar ist (Quelle: https://github.com/hfujita/pulseaudio-raop2/issues/21)
  2. Bei aktivierter Verschlüsselung bekomme ich keinen Ton (nur ein einmaliges kurzes Fiepen), und muss diese Abschalten (Das kann ohne Gewissensbisse gemacht werden, wenn das WLAN ordentlich abgesichert ist)
Die dabei auftauchende Fehlermeldungen waren:
  • Resending 1 packets
  • raop-sink- protocol-native.c: Requesting rewind due to end of underrun

Installation pulseaudio-raop2

Pulseaudio mit raop2 Support wird paralell zum aktuell installiertem Pulseaudio installiert und verwendet. Das bedeutet das nach neustart immer wieder der originale Audiotreiber verwendet wird.

sudo apt-get install libcap-dev libjson0 libjson0-dev libsndfile1-dev intltool autopoint libtool build-essential paprefs git pulseaudio-module-raop build-dep pulseaudio

cd ~
git clone https://github.com/hfujita/pulseaudio-raop2.git
cd pulseaudio-raop2
./autogen.sh 
CFLAGS="-ggdb3 -O0" LDFLAGS="-ggdb3" ./configure --prefix=$HOME --enable-x11 --disable-hal-compat
make -j4

# In /etc/pulse/client.conf autospawn=no einstellen
# Aktuellen Daemon mit "pulseaudio -k" stoppen

Manuelle Konfiguration

in die rc/default.pa das Gerät von Hand konfigurieren (dabei wird die richtige IP Eintragen und durch "encryption=none" die Verschlüsselung abgeschaltet)

load-module module-raop-sink server=192.168.178.47:5000 sink_name=Base-Station-48537e.fritz.box sink_properties="device.description='AirPort Express'" protocol=UDP encryption=none codec=ALAC channels=2 format=16 rate=44100

Damit das Gerät nicht auftaucht habe ich noch die autodiscover Funktion deaktivert (Das geht garantiert auch über die Konfiguration) /src/.libs$ rm module-raop-discover.*

Der selbstcompilierten Daemon starten

./src/pulseaudio -n -F src/default.pa -p $(pwd)/src/ --log-time=1 -vvvv 2>&1 | tee pulse.log

Ich empfehle das Testen über den vlc Media Player zu machen.

#Einige nützliche Pulseaudio Befehle

# Alle devices anzeigen
pacmd list-sinks
# Standardaudio auf das zweite Gerät setzen (0,1,2,...)
pactl set-default-sink 1
# Lautstärke einstellen
pactl set-sink-volume Base-Station-48537e.fritz.box '65%'

Last Change: 01-Sep-2017 03:26

Kontakt und Infos zur Person: Thomas Eimers