Followup: Fedora: Audio auf Android streamen

Im Beitrag Fedora: Audio auf Android streamen wurde eine Methode vorgestellt, wie man den Desktopton schlank zum Android bekommt. Dazu war ein eigener kleiner Streamserver nötig.

Hier nun eine Methode die mit PulseAudio und einem APK auf dem Android auskommt.

Auf Linux starten wir als User erstmal das Streammodul für PulseAudio:

pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2  record=true port=8000

Dann installieren wir auf dem Android dieses APK: PulseDroid

Wir starten den PulseDroid auf dem Androidgerät und tragen die LAN IP des Linuxrechners mit dem Port 8000 ein. Auf Start klicken und schon rauscht es. Das liegt daran, daß jetzt der „Default“ Ton des Linuxrechners übertragen wird, was das Mikro sein dürfte. Im PulseaudioMixer stellt man jetzt einfach die Quelle des Tons so ein, wie man das braucht und schon hört man es auf dem Android.

Wer direkt etwas anderes streamen will, der kann auch direkt die Quelle angeben:

pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2  record=true port=8000 source=pa quell device>

Android Audio an Linux streamen

Heute wollen wir uns mal den umgekehrten Weg anschauen, Audio von Android zu Linux streamen.

Wir könnten dafür natürlich Kodi nehmen, aber Kodi ist ein Overkill, und es soll doch leicht und charmant sein, oder ? 🙂

OK, wir brauchen :

Linux:
Pulseaudio mit PAPrefs
Rygel

Android:
BubbleUPnP

Installiert man Rygel kommen alle nötigen Module mit. BubbleUPnP ist eine gute Android App, die kann ich nur empfehlen, treibt jeden SmartTv besitzenden Vater in den Nervenzusammenbruch 😉

Pulseaudio Setup

zunächst starten wir PAPrefs und aktivieren die ganzen Netzwerkfeatures, also ..

Pulseaudio Netzwerk-Audio-Geräte im lokalen Netzwerk auffindbar machen
Netzwerkservertab -> Alles außer Authentifizierung einschalten

PulseAudio-PAPrefs

Rygel Setup

Dann setupen wir Rygel über die Config: ~/.config/rygel.conf :

[general]
upnp-enabled=true

[MediaExport]
enabled=true
uris=

[External]
enabled=true

[org.gnome.UPnP.MediaServer2.PulseAudio]
enabled=true

und starten es als Benutzer über Shell so :  rygel -n <interfacename> -U -D -t   wobei der Interfacename z.b. enp2s0 lauten könnte, oder auch eth0, die Netzwerkkarte halt.
Mit „ip link“ kann man sich alle Netzwerkkarten anzeigen lassen :

[~]$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 41:16:5d:24:5e:08 brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 12:34:01:0a:cd:54 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 12:34:01:0a:cd:54 brd ff:ff:ff:ff:ff:ff

Einfach das richtige Netzwerkinterface nehmen.

Es kommen einige Fehlermeldungen, aber das stört nicht weiter solange der Prozess nicht stoppt ist das leider normal. Es gibt wohl mehr Programmierer deren Programme nur laufen, wenn Sie glücklich unnötige Fehlermeldungen ausspucken können, als ich dachte. Ich kannte da mal jemanden, aber das ist eine andere Geschichte.

Die Ausgabe könnte so aussehen:

Rygel-Message: rygel-acl.vala:143: Es wurde keine alternative Zugriffslistenrichtlinie gefunden. Zugriff wird gewährt.
Rygel-Message: Rygel v0.28.3 wird ausgeführt …
RygelCore-Message: Neue Erweiterung »Playbin« ist verfügbar
RygelCore-Message: Neue Erweiterung »MediaExport« ist verfügbar

** (rygel:9902): WARNING **: Error creating GUPnP context: Failed to find IP of interface virbr0-nic

RygelCore-Message: Neue Erweiterung »org.gnome.UPnP.MediaServer2.PulseAudio« ist verfügbar
RygelCore-Message: Neue Erweiterung »org.gnome.UPnP.MediaServer2.DVBDaemon« ist verfügbar

Android

Jetzt findet man über BubbleUPnP, was man in Ermangelung von All Share auf Samsunggeräten installieren muß, da deren eigene App nach Benutzerbekunden in den Kommentaren im PlayStore „untauglich“ ist. Dort wählt man jetzt einen „Renderer“ aus und findet den Linux PC. Wem das nicht gelingt, der sollte kurz die Firewall droppen und zu sehen, ob es da klemmt. Ein paar Sekunden muß man dem Findeprozess schon zugestehen, also nicht gleich in Panik geraten.

Oben schrieb ich, daß jetzt eine charmante Lösung kommt und das ist sie, denn Rygel taucht als eigenes Programm im Pulseaudio auf und nun kann man den Audiostrom vom Handy auf alle Soundausgaben umverteilen z.b. auch per RTP Multicast ins Netzwerk broadcasten. Der Clou: Im Pulseaudiostrom im Mixer steht sogar drin um welches Lied es sich handelt! 😀

Fedora: Audio auf Android streamen

Heute machen wir einen kleinen Abstecher in die Welt von Android und streamen Audio vom Linuxrechner in Netzwerk.

Die erste Idee die man hat, machs mit Boardmitteln, klappt nur für Linux <-> Linux und nicht für Android, und scheidet damit aus. Die schauen wir uns dann später mal an.

Zuerst installieren wir „SoundWireFree“ auf dem Androidgerät.

Danach laden wir uns von georgielabs.net den nötigen Streamserver für Linux runter.

Jetzt geht alles ganz schnell:

  1. Streamserver starten.
  2. SoundWireFree starten und IP vom Streamserver eingeben.
  3. Pulseaudio Lautstärketool öffnen und unter Aufnahme, für die App die gewünschte Audioquelle z.b. die Defaultausgabe an die Lautsprecher einstellen.
  4. Fertig

Jetzt kann man auch mit einer einfach Audioaufnahme z.b. Gnome Recorder, Sprache ans Android übertragen