Bluetooth Audiosignal via AD2P automatisch an den Pi Std. Audioausgang weiterleiten

  • 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

    Code
    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

    Code
    sudo usermod –a –G lp pi

    Gruppenzugehörigkeit des Benutzers pi überprüfen

    Code
    id pi | grep lp

    Bluetooth Audioeinstellungen anpassen
    Folgenden Text unter "[General]" hinzufügen

    Code
    sudo nano /etc/bluetooth/audio.conf
    Enable=Source,Sink,Media,Socket

    PulseAudio Deamon anpassen
    Folgenden Text unter "; resample-method = speex-float-3" hinzufügen

    Code
    sudo nano /etc/pulse/daemon.conf
    resample-method = trivial

    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

    Code
    sudo nano /etc/udev/rules.d/99-input.rules
    KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"

    Udev Verzeichnis hinzufügen

    Code
    sudo mkdir /usr/lib/udev

    Bluetooth Skript hinzufügen

    Code
    sudo nano /usr/lib/udev/bluetooth

    bluetooth

    Bluetooth Skript ausführbar machen

    Code
    sudo chmod 774 /usr/lib/udev/bluetooth

    Pi neu starten

    Code
    sudo reboot

    Manuelles Pairing durchführen
    Bluetooth Sichtbarkeit am Pi aktivieren

    Code
    sudo hciconfig hci0 piscan

    -> Bluetooth z.B. am Smartphone einschalten

    Bluez-simple-agent am Pi starten, der Agent bleibt bis nach der Autorisierung geöffnet!

    Code
    bluez-simple-agent

    -> 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

    Code
    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

    Code
    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

    Code
    bluez-test-device list

    Smartphone als vertrauenswürdig festlegen

    Code
    bluez-test-device trusted XX:XX:XX:XX:XX:XX yes

    Kommunikation zwischen Pi und Endgerät prüfen
    Ob die Audioquelle an ein Bluetooth Gerät korrekt weitergeleitet wird kann wie folgt eingesehen werden

    Code
    tail -f /var/log/bluetooth_dev

    Beispiel

    Code
    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

    Code
    sudo nano /etc/pulse/client.conf
    extra-arguments = --exit-idle-time=-1 --log-target=syslog

    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.

    Einmal editiert, zuletzt von PiBorg (1. Dezember 2014 um 11:07)

  • Bluetooth Audiosignal via AD2P automatisch an den Pi Std. Audioausgang weiterleiten? Schau mal ob du hier fündig wirst!

  • Update
    - Betreff angepasst
    - Einleitung überarbeitet
    - Manuelles Pairing angepasst
    - Weitere Problemlösungen hinzugefügt
    -- Automatische Aktivierung der Medienwiedergabe nach dem Pairing
    -- Automatisches ein/ausschalten des ersten CEC/HDMI Gerätes (TV)
    -- Instabile WLAN-Verbindung mit dem Samsung Galaxy S3 (I9300)

    Einmal editiert, zuletzt von PiBorg (1. Dezember 2014 um 11:08)

  • Wie angekündigt eine kleine Frage bzw. ein Vorschlag:

    Die udev-Regel führt das Skript als root aus, was einerseits bedeutet, dass du das sudo in Zeile 38

    Code
    sudo hciconfig hci0 piscan


    weglassen kannst und andererseits, dass Befehle als root aufgeführt werden, bei denen es gar nicht notwendig wäre oder meiner Meinung nach gar nicht funktionieren kann.
    Bei den amixer-Befehlen ist es zB normalerweise nicht notwendig, wobei du die vielleicht eh durch pactl oder pacmd-Befehle ersetzen willst oder wirst ;) Genau dieser pacmd-Befehl zum Einstellen der Lautstärke ist aber ebenfalls gemeint, denn wenn pulseaudio als user pi läuft und dazu passt, dass du ein paar Zeilen später die Bluetooth-Audioausgabe mit

    Code
    sudo -u pi pactl …

    startest, was ich ganz richtig finde, dürfte das pacmd … gar nichts an der vom User Pi gestarteten Pulseaudioinstanz ändern.
    Wenn du also den pacmd-Befehl in Zeile 24 durch

    Code
    sudo -u pi pactl set-sink-volume 0 100%


    ersetzt, müsste es meiner Meinung nach funktionieren und obendrein zumindest den 2. amixer-Befehl eine Zeile darüber überflüssig machen.
    Über den ersten amixer-Befehl bin ich mir nicht ganz im Klaren, aber falls er tatsächlich notwendig ist (was ich ganz vorsichtig zu bezweifeln wage) könnte man dasselbe sicher auch mit pactl/pacmd bewerkstelligen.

    Einmal editiert, zuletzt von smutbert (28. April 2015 um 23:01)

  • Habe deine Vorschläge soeben umgesetzt/getestet und es funktioniert. Hab das Skript mal entsprechend aufgeräumt. Die Lautstärke (Pulseaudio/Master) muss ich aber auf 40% setzen, sonst ist es extrem laut. Deshalb ja gestern die Frage die Lautstärke von Pulseaudio oder direkt von der Soundkarte anpassen, aber bleiben wir jetzt erst einmal hierbei.

    Der Abschnitt

    Code
    # 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 0

    könnte evtl. für XBMC/Kodi noch interessant werden, daher habe ich ihn mal belassen und auskommentiert.

  • Hallo
    hat soweit alles hervorragend funktioniert.
    Musik lässt sich sauber abspielen.
    Was ist aber mit den Ansagen einer Navi-Software ?
    Hier bleiben die Lautsprecher stumm.
    Muss hier ein anderes Protokoll ausgewählt werden ?

    Gruß
    Michael

  • Freut mich das es funktioniert hat. Wie das mit einer Navi Software funktioniert, kann ich dir leider nicht beantworten. Eröffne doch bitte mal einen eigenständigen Thread für deine Frage, wo du dem Forum auch alle benötigten Informationen gibst zB OS, Soundausgabe per ALSA oder Pulseaudio, Name der Navisoftware usw.

  • Hallo, könntest du bitte mehr zur Audioausgabe via USB-Soundkarte schreiben, meine will nicht so wie ich das gerne hätte.

    Diese Zeile verstehe ich nicht:
    AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo", kann das mit "alsa_output.usb-Creative_Technology_Ltd_Sound_Blaster_Play__2_000000011075-00-S2.analog-stereo.monitor" für mein externe soundkarte ersetzt werden? Wenn ja was ist noch zu beachten?


  • Hallo, könntest du bitte mehr zur Audioausgabe via USB-Soundkarte schreiben, meine will nicht so wie ich das gerne hätte.

    Diese Zeile verstehe ich nicht:
    AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo", kann das mit "alsa_output.usb-Creative_Technology_Ltd_Sound_Blaster_Play__2_000000011075-00-S2.analog-stereo.monitor" für mein externe soundkarte ersetzt werden? Wenn ja was ist noch zu beachten?

    Hallo auch

    ich sitze gerade nicht an meinem Pi aber versuchen wir es mal. Die Soundkarte welche einzutragen ist, also in deinem Fall die externe USB-Soundkarte liest du mit

    Code
    $ pactl list sources short

    aus, denke das hast du gemacht. Du hast zwar die Soundkarte, jedoch mit der Endung .monitor eingetragen. Diese ist, soweit ich mich richtig erinnere für die Aufnahmen zuständig. Trag also deine Soundkarte mal ohne diese Endung ein. Schau mal hier siehst du sehr gut wie ich meine externe Creative Soundkarte eingetragen habe. Ich hoffe das hilft dir ;)

    Einmal editiert, zuletzt von PiBorg (9. Juli 2015 um 12:24)

  • Danke :)

    Ganz klappt es immernoch nicht. Soundausgabe via internem Audioausgang funktioniert super. Nur die Soundkarte macht noch schwierigkeiten, auch ohne ".monitor"

    "pactl list sources short" gibt mir folgendes aus:
    0 alsa_output.usb-Creative_Technology_Ltd_Sound_Blaster_Play__2_000000011075-00-S2.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
    1 alsa_input.usb-Creative_Technology_Ltd_Sound_Blaster_Play__2_000000011075-00-S2.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
    2 alsa_output.platform-bcm2835_AUD0.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
    3 bluez_source.D0_C1_B1_1C_C1_63 module-bluetooth-device.c s16le 2ch 44100Hz SUSPENDED

    Ich hab ehrlich gesagt keine Ahung an was es liegen könnte und hoffe auf Hilfe :)

  • Jetzt muss ich dir leider einige Fragen stellen.

    - Was für einen Bluetooth Stick verwendest du?
    - Kannst du über die externe Soundkarte, ohne eine aktive Bluetooth-Verbindung Sound ausgeben?
    - Dein zB Smartphone ist mit dem Pi gekoppelt, die Medienwiedergabe ist unter den Bluetooth-Settings auf dem Smartphone aktiv?

    Öffne deine Logdatei bitte mal mit

    Code
    tail -f /var/log/bluetooth_dev

    aktiviere anschliessend dein Bluetooth am Smartphone, poste hier mal die Ausgaben welche nun in die Logdatei geschrieben werden, das sollte in etwa so aussehen

    Code
    Executing bluetooth script...|add|
    Setting bluez_source to: bluez_source.BC_20_A4_02_06_BB
    pactl load-module module-loopback source=bluez_source.BC_20_A4_02_06_BB sink=alsa_output.usb-041e_30d3_15010500009A-00-U0x41e0x30d3.analog-stereo rate=44100 adjust_time=0
    23
    Executing bluetooth script...|remove|

    Grüsse

  • Ich verwende einen Bluetoothstick von Trust mit Bluetooth 3.0 (genauere Daten müsste ich erst Suchen, welche brauchst du denn?)
    Die Soundausgabe über die externe Soundkarte funktioniert mit dem beispielsweise mit dem Befehl "aplay -D plug:hw:1 /home/pi/luke/sound.wav" einwandfrei :) und ja, die Medienwiedergabe am Smartphone ist aktiviert, die Wiedergabe über den analogen Ausgang des Pis funktioniert soweit.


    pi@raspberrypi ~ $ tail -f /var/log/bluetooth_dev
    Setting bluez_source to: bluez_source.D0_C1_B1_1C_C1_63
    pactl load-module module-loopback source=bluez_source.D0_C1_B1_1C_C1_63 sink=alsa_output.platform-bcm2835_AUD0.0.analog-stereo rate=44100 adjust_time=0
    24
    Executing bluetooth script...|add|
    Executing bluetooth script...|add|
    Executing bluetooth script...|add|
    Setting bluez_source to: bluez_source.D0_C1_B1_1C_C1_63
    pactl load-module module-loopback source=bluez_source.D0_C1_B1_1C_C1_63 sink=alsa_input.usb-Creative_Technology_Ltd_Sound_Blaster_Play__2_000000011075-00-S2.analog-stereo rate=44100 adjust_time=0
    Executing bluetooth script...|remove|
    Executing bluetooth script...|add|
    Executing bluetooth script...|add|
    Executing bluetooth script...|remove|

    Schonmal Danke für Deine Mühe :)
    Automatisch zusammengefügt:
    Was mir gerade aufgefallen ist, ist die Zeile
    "pactl load-module module-loopback source=bluez_source.D0_C1_B1_1C_C1_63 sink=alsa_input.usb-Creative_Technology_Ltd_Sound_Blaster_Play__2_000000011075-00-S2.analog-stereo"

    stutzig macht mich das alsa_input, ich werde das mal ein output verwandeln, mal sehen ob das klappt.
    Automatisch zusammengefügt:
    Funktioniert, Danke, Danke, Danke :)) von selbst wäre ich nie da drauf gekommen :)

    Einmal editiert, zuletzt von luke3284 (9. Juli 2015 um 20:40)

  • Ich habe bei der ersten funktionierenden Einrichtung wirklich Tage damit verbracht es zum laufen zu bekommen, freut mich das es bei dir so schnell funktioniert hat :thumbs1:

    Einen Tipp noch, wenn du Ausgaben von Befehlen wie zB den Ausgaben aus der Logdatei hier hinzufügst, tue das immer mit Code-Tags. Diese kannst du im Editor auswählen bzw. setzen, das erleichtert das Lesen für alle ;) Jetzt viel Spass beim Streamen...

    Grüsse

  • Erstmal danke für die ausführliche Beschreibung.

    Ich habe versucht sie am pi 3 umzusetzen, leider ohne Erfolg.

    Ich konnte bis:
    Sudo nano /etc/bluetooth/audio.conf

    Alles mit Erfolgsmeldung nachvollziehen, hier gab es keine audio.conf weshalb er eine neue angelegt hat in die ich das hinein kopiert habe was du geschrieben hast. Gleiches Problem hatte ich in der Zeile mit den input.rules.

    Als Folge sagt er mir bei allen bluez Befehlen z.B. bluez-simple-agent, Kommando nicht gefunden.

    Ich arbeite mit einem Pi 3 mit Rasbian Jessie.

    Die daemon.conf hatte ich.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!