Bluetooth Audio Streaming mit A2DP (Raspbian Jessie)

  • Hallo liebe Community,


    in diesem Tutorial werde ich euch zeigen, wie ihr euren Raspberry Pi in einen simplen Bluetooth-Audio Empfänger umwandeln könnt.
    Ich setze grundlegende Kenntnisse z.B. wie man eine SSH Verbindung aufbaut etc. voraus. Bei eventuell aufkommenden Fragen gerne einfach in den Thread posten :)
    150x213


    Credits:
    http://www.instructables.com/i…media-center-with-Blueto/


    Ihr benötigt:
    - Raspberry Pi (mit Jessie und Boot to Desktop aktiviert)
    - Bluetooth Dongle (http://elinux.org/RPi_USB_Bluetooth_adapters) [Ich habe folgenden benutzt: http://www.amazon.de/gp/product/B00C68IQ3C (Affiliate-Link)]


    Schritt 1:
    Den Bluetooth Dongle in einen USB-Port stecken, den Pi mit Jessie booten und eine SSH-Verbindung mit Putty oder dergleichen herstellen


    Schritt 2:
    Nun müssen wir überprüfen, ob der jeweilige Bluetoothadapter überhaupt erkannt wird. Das erledigen wir mit folgendem Befehl:

    Code
    1. lsusb


    Wie auf dem Screenshot zu sehen ist, wird der Dongle als "Cambridge Silicon Radio..." erkannt, also alles in Ordnung :P
    [Blocked Image: http://i.imgur.com/XqH3HpF.png]


    Schritt 3:
    Als nächstes bringen wir alles auf den neusten Stand und installieren die notwendigen Pakete. Die folgenden Befehle einfach nacheinander in die Konsole eingeben und zum Schluss einmal rebooten.

    Code
    1. sudo apt-get update
    2. sudo apt-get upgrade
    3. sudo apt-get install alsa-utils bluez bluez-tools pulseaudio-module-bluetooth python-gobject python-gobject-2
    4. sudo reboot


    Schritt 4:
    Jetzt fügen wir den Benutzer 'pi' zu den PulseAudio Gruppen hinzu. Dazu folgende Befehle in die Konsole eingeben:

    Code
    1. sudo usermod -a -G lp pi
    2. sudo usermod -a -G pulse-access,audio root
    3. sudo adduser pi pulse-access


    Schritt 5:
    Nun passen wir die daemon.conf von PulseAudio an indem wir die Datei mit GNU nano öffnen:

    Code
    1. sudo nano /etc/pulse/daemon.conf


    Dann suchen wir nach folgender Zeile

    Code
    1. ; resample-method = speex-float-1


    und fügen folgenden Text hinzu, dass das Ganze folgendermaßen aussieht:

    Code
    1. ; resample-method = speex-float-1
    2. resample-method = trivial


    Mit Strg+X schließen und speichern.


    Schritt 6:
    Jetzt müssen wir für PulseAudio das Laden zusätzlicher Module beim Startup festlegen.

    Code
    1. sudo nano /etc/pulse/system.pa


    Folgende Zeilen einfach ans Ende der Datei anfügen:


    Auch hier wieder mit Strg+X schließen und speichern.


    Schritt 7:
    Damit PulseAudio automatisch startet, erstellen wir ein service starting script

    Code
    1. sudo nano /etc/systemd/system/pulseaudio.service


    Folgenden Text einfügen und mit Strg+X schließen & speichern:

    Code
    1. [Unit]
    2. Description=Pulse Audio
    3. [Service]
    4. Type=simple
    5. ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading --disable-shm --daemonize
    6. [Install]
    7. WantedBy=multi-user.target


    Jetzt noch schnell PulseAudio neustarten:

    Code
    1. sudo systemctl daemon-reload
    2. sudo systemctl enable pulseaudio.service
    3. sudo systemctl start pulseaudio.service


    Schritt 8:
    Als letztes müssen wir den korrekten Audio-Output einstellen. X entweder mit 0 (auto), 1 (3,5mm Klinke) oder 2 (HDMI) ersetzen.

    Code
    1. amixer cset numid=3 X


    Da die Lautstärke nicht aktiv über den Pi angepasst wird, sondern entweder über den TV oder die Lautsprecher, können wir den Master noch auf 100% setzen:

    Code
    1. amixer set Master 100%
    2. pacmd set-sink-volume 0 65535


    Schritt 9:
    Endlich geht's ans Eingemachte, Zeit für die Bluetooth Verbindung!
    Um sicherzustellen, dass das A2DP-Protokoll aktiviert ist, öffnen wir folgende Configdatei:

    Code
    1. sudo nano /etc/bluetooth/audio.conf


    Hier folgenden Text einfügen und mit Strg+X schließen & speichern.

    Code
    1. [General]
    2. Enable=Source,Sink,Media,Socket
    3. HFP=true
    4. Class=0x20041C


    Als nächstes bearbeiten wir eine weitere Datei:

    Code
    1. sudo nano /etc/bluetooth/main.conf


    Folgendes unter [General] einfügen und wieder mit Strg+X schließen & speichern. "Name = RaspStream" kann geändert werden.

    Code
    1. Name = RaspStream
    2. Class = 0x20041C


    Eine dritte Datei muss noch bearbeitet werden. Hierzu in der Konsole

    Code
    1. sudo hciconfig -a

    eingeben und unter "BD Address:" die MAC-Addresse des Bluetooth-Dongles notieren.


    Anschließend diese Datei bearbeiten (XX ist die MAC-Addresse):

    Code
    1. sudo nano /var/lib/bluetooth/XX:XX:XX:XX:XX:XX/settings


    und unten stehende Zeilen einfügen (wie immer mit Strg+X schließen & speichern):

    Code
    1. [General]
    2. Discoverable=true
    3. Alias=RaspStream
    4. Class=0x20041C


    Zum Schluss einmal rebooten.

    Code
    1. sudo reboot


    Schritt 10:
    Jetzt geht's ans Device-Pairing! Für jedes Gerät, das fähig sein soll, Musik abzuspielen muss dieser Prozess einmal durchgeführt werden.
    Dazu öffnen wir die BT control shell:

    Code
    1. bluetoothctl


    Das zu verbindende Gerät muss sichtbar und im Verbindungsmodus sein. Wenn dies der Fall ist, folgende Befehle nacheinander eingeben:

    Code
    1. agent on
    2. default-agent
    3. discoverable on
    4. scan on


    Nun sollten in der Konsole die verfügbaren Bluetooth-Clients nacheinander aufgelistet werden.
    Um eine Verbindung herzustellen, bitte die MAC-Adresse des Geräts notieren und folgendes in der Konsole nacheinander eingeben:

    Code
    1. pair XX:XX:XX:XX:XX:XX
    2. trust XX:XX:XX:XX:XX:XX


    Das wars, jetzt sollte das jeweilige Gerät bereits in der Lage sein, Musik über den Pi abzuspielen.
    Wenn man den Befehl 'devices' eingibt, erhält man eine Übersicht aller Geräte, die sich mit dem Pi verbinden können.
    Um ein Gerät von dieser Liste zu entfernen, einfach den Befehl 'remove MAC-Adresse' eingeben.


    Mit 'quit' wird bluetoothctl verlassen.


    Ich hoffe ich konnte euch den ganzen Prozess einigermaßen verständlich erklären, viel Glück und Spaß beim selber nachmachen :)
    Liebe Grüße


    Folgende Probleme sind aufgetreten:
    Kein Ton aus dem Audiojack
    Mögliche Lösung: http://www.forum-raspberrypi.d…ssie?pid=221787#pid221787

    Edited once, last by rasp_newb ().

  • Hallo!


    Erstmal Danke für das erste (halbwegs) funktionierende Tutorial welches auch auf Jessie läuft.



    Ich habe ein Problem. Und zwar existiert die datei audio.conf in dem Ordner etc/bluetooth/ nicht.
    Muss ich diese erstellen? Ich bin momentan so weit dass sich mein Raspi mit meinem Smartphone verbindet, jedoch nicht mitteilt was für Dienste er unterstützt.
    Somit sehe ich den Raspi nur als Bluetooth Gerät und da hörts auch auf.


    Wäre sehr dankbar für eine Hilfreiche antwort :)


  • Hey,
    die Datei musste auch ich erstellen, ist normal dass diese noch nicht existiert :)


  • funktioniert soweit, Danke hierfür, wie kann man die Verbindung automatisch herstellen nach einem reboot?


    Die Verbindung wird normalerweise sofort automatisch hergestellt. Wenn der Pi hochgefahren ist, schaltet er automatisch in den Verbindungsmodus und sucht
    nach bereits gepairten Geräten, die sich ebenfalls im Verbindungsmodus befinden.


    Ich nutze das Ganze mit einem Bluetooth-Transmitter ( http://www.amazon.de/gp/product/B00RB02IF2 (Affiliate-Link) ) und sobald dieser eingeschaltet ist, dauerts ca. 30sec bis er sich automatisch mit dem Pi verbindet und Musik abspielt


    Edit: Hast du bei Raspbian Autologin aktiviert?

    Edited once, last by rasp_newb ().

  • Top hat genauso funktioniert. Auch mit dem neuen Rasp3. Bis auf die erste Zeile, aber das BT Modul hängt ja auch nicht am USB.


    Hat jemand eine Idee wie man ein automatisches Pairing und Trust hinbekommen könnte ?


    vg und Danke für das Tut!


  • Top hat genauso funktioniert. Auch mit dem neuen Rasp3. Bis auf die erste Zeile, aber das BT Modul hängt ja auch nicht am USB.


    Hat jemand eine Idee wie man ein automatisches Pairing und Trust hinbekommen könnte ?


    vg und Danke für das Tut!


    Freut mich wenn alles gut geklappt hat :)


    Autopairing ist möglich, ich probier n bisschen rum und melde mich dann wenn ichs hab ;)

  • Bei mir kam mit der Anleitung oft kein Ton aus dem Audiojack.
    Die Lösung, Schritt 8 musste ich etwas anders machen:

    Code
    1. sudo alsamixer


    eingeben und dann mit F6 nach der Nummer vor der Sound Card "bcm 2835 ALSA" suchen (hier als N angegeben).
    Dann mit

    Code
    1. sudo amixer -c N cset numid=3 X


    die Ausgabe einstellen. N steht für die Position der Sound Card, X für die o.g. Option (0=auto, 1=audio jack...)
    Die Laustärke kann noch mit

    Code
    1. sudo alsamixer


    eingestellt werden.



    Quelle: https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=40872

  • Danke für das Tutorial.
    Es gibt bei mir ein kleines Problem: Wenn ich die Wiedergabe starte kommt Musik aber es hackelt fürchterlich. Ist schon der 2. Versuch. Genutzt habe ich den Raspberry Pi 3 und Raspbian Jessie Lite.

  • mansulu  
    Danke für deinen Lösungsansatz, ich hab das mal mit in den Thread aufgenommen, damit andere Nutzer mit einem ähnlichen Problem eine Lösungsidee haben.
    Als ich mir das eingerichtet habe, wurden keine Soundkarten angezeigt weswegen ich den Output direkt gesetzt habe (was dann auch funktioniert hat, keine Ahnung wieso es bei dir nicht ging)


    Retch_100
    Wie siehts bei dir mit der CPU-Auslastung aus?
    Hast du nebenher andere ressourcenintensive Programme am laufen?
    Ich kann dir direkt nicht ganz weiter helfen, da ich mich mit dem integrierten Bluetoothmodul vom Pi 3 noch nicht wirklich auseinandergesetzt hab :/


  • Retch_100
    Wie siehts bei dir mit der CPU-Auslastung aus?
    Hast du nebenher andere ressourcenintensive Programme am laufen?
    Ich kann dir direkt nicht ganz weiter helfen, da ich mich mit dem integrierten Bluetoothmodul vom Pi 3 noch nicht wirklich auseinandergesetzt hab :/


    Ich habe Jessie Lite installiert und darauf dann lxde. Läuft ansich besser als das Normale. Die CPU Auslastung liegt im sehr niedrigen Bereich auch während der Wiedergabe.


    Sent from my Che2-L11 using Tapatalk

  • Hi,


    erstmal vielen Dank für das Tutorial, ich denke das ist genau das was ich gesucht habe ;)
    Ich habe nur ein problem.
    Ich hänge gerade bei schritt 8


    bei amixer set Master 100% wird folgendes ausgegeben:
    amixer: Unable to find simple control'Master',0


    und bei pacmd set-sink-volumer 0 65535
    Es läuft kein PulseAudio-Dienst oder nicht als Sessiondienst.


    Hatte jemand schon einmal das selbe Problem, und gibt es eine Lösung dafür?

  • Hallo,
    ich habe genau das gleich Problem wie kevin.just.


    Auf der SD-Karte ist nur ein frisch installiertes Raspbian Jessie, sonst nichts.


    Weiß jemand Rat?


    EDIT: mit pulseaudio -D startet man Pulseaudio als Daemon. Damit hat es erst einmal funktioniert.

    Edited once, last by bender2004 ().

  • Ich habe es hinbekommen.


    Ich habe die Dateil rc.local geöffnet


    Code
    1. sudo nano /etc/rc.local


    und in die Zeile oberhalb von exit 0


    Code
    1. pulseaudio -D


    eingefügt. Jetzt startet pulseaudio automatisch.

  • So, ich habe jetzt eine stabile Verbindung hinbekommen, musste aber ein paar Sachen anders machen.


    Die Schrite 8 musste ich per sudo ausführen.


    Das Startskipt hat bei mir auch nicht so funktioniert. Ich verwende das hier:




    Quelle: https://debianforum.de/forum/v…161713&p=1099763#p1099763. Ich musste aber '--system' drin lassen und zusätzlich 'pulseaudio -D' über einen Crontab starten.


    Bei der Bluetooth-Einrichtu8ng bin ich dann auch etwas vorgegangen, so wie hier https://kofler.info/bluetooth-…erminal-mit-bluetoothctl/ beschrieben. Dürfte aber aufs gleiche hinauslaufen.


    edit
    Und bluetoothctl hab ich auch per sudo ausgeführt, ob es notwendig ist weiß ich nicht.

    Edited once, last by Richard ().

  • Die "etwas korrektere" Einrichtung von Pulseaudio sieht nun so aus:


    In der "/etc/pulse/daemon.conf" ändert man


    Code
    1. ; system-instance = no


    in


    Code
    1. system-instance = yes


    Für den Autostart erstellt man die "/etc/systemd/system/pulseaudio.service" mit dem Inhalt



    In der "sudo nano /etc/pulse/system.pa" müssen nur die beiden Module geladen werden


    Code
    1. .ifexists module-bluetooth-policy.so
    2. load-module module-bluetooth-policy
    3. .endif
    4. .ifexists module-bluetooth-discover.so
    5. load-module module-bluetooth-discover
    6. .endif


    Es bedarf so keinen Eintrag im crontab mehr.

  • Ih habe es auch mit dem Pi 3 und Rasbian jessie versucht. Paring klappt wunderbar aber ich kann das smartphone nicht conecten.ich kann aber Daten an das smartphone schicken dann sehe ich im Terminal connected yes, nach dem Datenaustausch steht leider wieder no. Falls ich beide übers Desktop verbinden will bekomme ich eine Fehlermeldung.


    Danke schon im Vorraus