Hallo Zusammen,
wer ein Smartphone oder Tablet mit Bluetooth und ein Bluetooth USB-Stick für den Pi besitzt, hat die Möglichkeit das Audiosignal an den Standard Audioausgang des Pi weiterzuleiten und auszugeben. Voraussetzung hierfür ist, das die Endgeräte A2DP (Advanced Audio Distribution Profile) unterstützen.
Für die Soundausgabe können am Pi einfach USB-Boxen angeschlossen sein, aber auch die direkte Verbindung zu einer Stereoanlage über eine externe Soundkarte oder mittels HDMI an einen Fernseher sind möglich. Die Audioquelle kann hierbei z. B. eine M3U-Playlist sein welche von der eigenen NAS MP3-Dateien abspielt oder ein beliebiger Audiostream, aufgerufen über eine App wie TuneIn Radio, Spotify usw.
Um die Weiterleitung des Audiosignals an den Audioausgang des Pi's nicht jedes Mal manuell über die Konsole oder eine SSH-Verbindung durchführen zu müssen, kann hierfür eine Udev-Regel verwendet werden. Diese wartet im Hintergrund bis sich ein Endgerät meldet und führt dann automatisch ein bluetooth Skript aus, welches diese und noch weitere Aufgaben übernimmt. Was das Skript sonst noch macht oder wo evtl. Anpassungen vorgenommen werden müssen, kann man den entsprechenden Kommentaren entnehmen.
Die einzigen manuellen Schritte stellen lediglich die Kopplung und Authentifizierzung einer Bluetooth-Verbindung für ein Endgerät dar. Aber keine Sorge, die Durchführung ist nur einmalig pro Endgerät erforderlich. Sind all die Einrichtungen erledigt, schaltet man zukünftig einfach an seinem Endgerät Bluetooth ein und spielt eine gewünschte Audioquelle ab, fertig
Als Grundlage wurde diese Anleitung verwendet, aus Sicherheitsgründen wurde jedoch auf das Init Skript und das Autologin verzichtet. Um sich an das Thema heranzutasten empfiehlt es sich diese Anleitung vorerst einmal manuell durchzugehen. Getestet unter: Rasbian 7.6 mit BlueZ 4.99 und dem Kernel 3.12.29+.
Benötigte Software installieren
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2
Benutzer pi der PulseAudio Gruppe hinzufügen
Gruppenzugehörigkeit des Benutzers pi überprüfen
Bluetooth Audioeinstellungen anpassen
Folgenden Text unter "[General]" hinzufügen
PulseAudio Deamon anpassen
Folgenden Text unter "; resample-method = speex-float-3" hinzufügen
Udev Regel hinzufügen
Hierdurch wird das "bluetooth" Skript ausgeführt sobald sich ein Gerät verbindet.
Folgenden Text unter "SUBSYSTEM=="input", GROUP="input", MODE="0660"" hinzufügen
sudo nano /etc/udev/rules.d/99-input.rules
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
Udev Verzeichnis hinzufügen
Bluetooth Skript hinzufügen
bluetooth
#!/bin/bash
# Set the default sink. Change if you don't use default analog audio out.
AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo"
# Run the bluetooth script.
echo "Executing bluetooth script...|$ACTION|" >> /var/log/bluetooth_dev
ACTION=$(expr "$ACTION" : "\([a-zA-Z]\+\).*")
if [ "$ACTION" = "add" ]
then
# Turn off bluetooth discover mode before connecting existing bluetooth device to audio.
hciconfig hci0 noscan
# Turn on the tv. Change if you use default HDMI audio out.
# echo TV is turned on... >> /var/log/bluetooth_dev
# echo "as" | cec-client -s && echo on 0 | cec-client -s -t p -p 0
# Set the audio output to HDMI. Change if you don't use HDMI audio out.
# Examples: 0 = auto, 1 = analog, 2 = HDMI
amixer cset numid=3 2
# Set volume level to 100 percent
amixer set Master 100%
pacmd set-sink-volume 0 65537
# Connect the bluetooth source to the default sink
dev=/sys/devices/virtual/input/input*/name
mac=$(cat $dev | sed 's/:/_/g')
bluez_dev=bluez_source.$mac
echo "Setting bluez_source to: $bluez_dev" >> /var/log/bluetooth_dev
echo pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK >> /var/log/bluetooth_dev
sudo -u pi pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK >> /var/log/bluetooth_dev
fi
# Turn on bluetooth discovery if device disconnects.
if [ "$ACTION" = "remove" ]
then
sudo hciconfig hci0 piscan
# Turn off the tv. Change if you use default HDMI audio out.
# echo TV is turned off... >> /var/log/bluetooth_dev
# echo standby 0 | cec-client -s -t p -p 0
fi
Alles anzeigen
Bluetooth Skript ausführbar machen
Pi neu starten
Manuelles Pairing durchführen
Bluetooth Sichtbarkeit am Pi aktivieren
-> Bluetooth z.B. am Smartphone einschalten
Bluez-simple-agent am Pi starten, der Agent bleibt bis nach der Autorisierung geöffnet!
-> Sichtbares Gerät "raspberry-0 am Smartphone auswählen und die PIN Anfrage mit "OK" bestätigen
Smartphone Anfrage am Pi mit "yes" bestätigen
bluez-simple-agent
Agent registered
RequestConfirmation (/org/bluez/2199/hci0/dev_XX_XX_XX_XX_XX_XX, 978249)
Confirm passkey (yes/no): yes
-> Verbindung mit Medienaudio am Smartphone herstellen (Haken bei Medienwiedergabe setzen). Hierdurch wird am Pi die Autorisierung der Verbindung eingeleitet.
Autorisierung der Verbinung am Pi mit "yes" bestätigen
Authorize (/org/bluez/2199/hci0/dev_XX_XX_XX_XX_XX_XX, 0000110d-0000-1000-8000-00805f9b34fb)
Authorize connection (yes/no): yes
Bluez-simple-agent mit Strg + c beenden
MAC Adresse des Smartphones auslesen
Smartphone als vertrauenswürdig festlegen
Kommunikation zwischen Pi und Endgerät prüfen
Ob die Audioquelle an ein Bluetooth Gerät korrekt weitergeleitet wird kann wie folgt eingesehen werden
Beispiel
Executing bluetooth script...|add|
Setting bluez_source to: bluez_source.XX_XX_XX_XX_XX_XX
pactl load-module module-loopback source=bluez_source.XX_XX_XX_XX_XX_XX sink=alsa_output.platform-bcm2835_AUD0.0.analog-stereo
24
Executing bluetooth script...|remove|
Nützliche Problemlösungen
Audiowiedergabe wird nach ca. 20 Sekunden abgebrochen
PulseAudio Konfiguration anpassen, hierdurch wird die idle time (Timeout) deaktiviert.
Folgenden Text unter "; extra-arguments = --log-target=syslog" hinzufügen
Medienwiedergabe wird trotzt Kopplung nicht automatisch aktiviert
Siehe hier: Automatisch die Medienwiedergabe aktivieren
TV vor der Musikwiedergabe automatisch einschalten
Siehe hier: TV vor der Musikwiedergabe einschalten -> Befehle wurden dem bluetooth Skript hinzugefügt
Musikwiedergabe mit einem Samsung Galaxy S3 "I9300" wird ständig unterbrochen
Das Problem konnte ich auf eine instabile WLAN-Verbindung, hervorgerufen durch ein Update auf Android 4.3 zurückführen. Es scheint derzeit noch keine Lösung für die WLAN Verbindungsabbrüche zu geben. Wer sein Gerät nicht gerootet hat gelangt durch einen Factory Reset wieder zu Android 4.1, bei gerooteten Geräten hilft das Einspielen des ofiziellen Stock- ROMs (Firmware) des Herstellers. Mit Android 4.1 läuft die WLAN-Verbindung stabil.