Linux, Android und die PA

Nein, die PA ist keine unbekannte Regulierungsbehörde für Linuxe aller Art 😀 Eine PA meint die Beschallungsanlage auf Veranstaltungen deren Zielgruppe das Publikum ist.

Aber was hat das mit Linux zu tun ?

Wer mein Blog beobachtet hat, wird wissen, daß ich eine ganze Reihe von Beiträgen zum Thema Audiodatenströme im Netz veröffentlicht habe. Wir können von Linux an Linux senden, von Linux an Android und von Android zu Linux , aber eins hatten wir bislang nie: Livestreaming.

Ok, so ganz stimmt es nicht, weil Pulseaudio jede angeschlossene Tonquelle umrouten kann, und damit auch Liveton, aber von Android hatten wir das bislang nicht. Das wird sich jetzt ändern.

Wir brauchen :

Android: AirAudio
Linux: Rygel ( oder Kodi )

Ein Wort zu Kodi.. vieles von dem, was ich hier schon vorgestellt habe, geht auch mit Kodi als Empfänger und das sogar einfacher, weil Kodi ein echt gutes Produkt ist. Allerdings hat Kodi den Nachteil, daß es recht groß ist, weswegen kleinere Lösung preferiert werden. Leider hat es auch eine 6 Sekunden Verzögerung mit dem was wir heute machen wollen und das geht gar nicht 🙂

Erstmal Rygel starten

Zunächst mal starten wir Rygel in der Konfiguration vom letzten mal. Kleines Update dazu: man benötigt GStreamer für Rygel und da das MP3 Decoder Plugin sonst geht es nicht. Ich selbst hatte auch Probleme Rygel auf meinem Laptop zum Laufen zu bringen, wenn es nicht will  -> Kodi nehmen.

AirAudio starten

Groß konfigurieren muß man AirAudio nicht, aber ein paar Anmerkungen sind angebracht. Das Programm kann an fast alle gänigen ( und ein paar mir völlig unbekannte Produkte ) Daten senden. Wenn man AirAudio das erste mal startet, streamt es das ins Handy eingebaute Mikrofon ins Netz, es kann aber auch die Ausgaben von fast jedem installierten Programm als Quelle benutzen, weil es die Lautsprecher anzapft 🙂 Wir brauchen das Mikro.

In den Einstellungen tragen wir für AirPlay eine Verzögerung von 0 Sekunden ein, 0,5 Sekunden wäre wohl auch noch möglich, aber man sollte immer bedenken, das die PA auch noch eine Verzögerung hat und nichts ist schlimmer, als wenn der Sprecher schon irgendwas macht, aber aus der PA noch Texte von vor 10 Sekunden kommen 😉  Ist das Netz stabil, sind 0,0 Sekunden vollkommen ok.

Screenshot_2016-05-14-18-38-00

Android – AirAudio

Wenn man schon beim Konfigurieren ist, kann man gleich noch bei DLNA MP3 einstellen. Das hat zwar heute keine Auswirkungen, aber wenn man z.b. mal seine Familie beim Smartfernsehen beglücken will … 😀 Mit diesen Apps läßt sich soooooviel Spaß haben .. Totenkopf oder bei Internetaffineren Anonymous Logo aufm TV, oder man steht vor der Tür und „klopft digital an“.. Möglichkeiten ohne Ende 😉

Wenn wir mit Konfigurieren fertig sind, aber meisten schon beim Einschalten der App, finden wir eine Liste mit „Listenern“ zu denen wir Senden können. Es ist kein Multicast im Spiel, also sendet man i.d.R. nur an einen Empfänger. Man kann in der Liste aber auch mehr als einen anschalten. Wo ich grade so drüber nachdenken, macht das auf verteilten Veranstaltungen Sinn, wenn verschiedene Räume mit mehreren PA genutzt werden. Bei wichtigen Durchsagen, z.B. wenn es brennt oder etwas andere wichtiges passiert ist, könnte man sich bequem überall draufschalten.

Wenn es dann geht …

sieht und hört man das im Pulseaudio Mixer :

Rygel - Audiostream in PulseaudioJetzt wo es im Pulseaudio ist, könnte man es natürlich gleich wieder auf den Multicast schicken und … aber ab hier übernimmt die eigene Verstellungskraft 😉

Wozu das ganze, es gibt doch Funkmikros ?!

Stimmt, es gibt Bluetooth Mikros, Funkmikros und alles mögliche. Warum also so etwas nehmen? Natürlich a) weils geht und b) weil die meisten ein Handy haben, und damit zusätzliche Ausrüstung unnötig wird. je weniger man mit sich rumschleppen muß, desto besser 🙂 Peinlich wird es nur, wenn während des Vortrags die Mama anruft 😀 Um das zu verhindern, einfach das Handy auf Stumm stellen. Das Mikro geht trotzdem.

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