LAHA und die Latenzfalle

Kleines Update zu LAHA, dem Multiroom Sound und PulseAudio.

Stand der Dinge

Wie man es drehen und wenden will, die fertigen Tools zum Abspielen von PCM Sound haben alle irgendeine Macke.

PAPLAY benutzt PulseAudio. Das ist praktisch ein Todesurteil für eine stabile Latenz.
APLAY   benutzt Alsa, das defaultmäßig … PulseAudio benutzt. Siehe erstens 🙂
*JACK*  nun Jack möchte gern alleine tätig sein, ohne Konkurrenz. Fällt auch aus.

Da APLAY und PAPLAY per Default einen PA Stream zum Abspielen benutzen, haben beide in der Form das gleiche Problem: Die Audiolatenz des Playstreams steigt mit der Zeit an. d.b. alle anderen Geräte müßten mitwandern. Blöd nur, das Androids gar keine Latenzwanderung haben und selbst wenn Sie es hätten, wäre das eine blödsinnige Lösung. Jetzt fragt Ihr Euch natürlich: was labbert der da? Da muß man jetzt weiiiiiit ausholen.

Also, wenn man mit PAPLAY Sound ausgibt, geht PAPLAY zum PAServer und sagt dem, das DER eine Latenz wählen soll. Das macht der dann auch, nachdem die ersten Daten geflossen sind und die pegelt sich mit 16Bit Stereo und 48000″hz“ bei rund 1,9s ein. Richtig gelesen 1,9 Sekunden. Nach 40 Minuten sind wir bei knappen 5 Sekunden, wenns dumm läuft. Wenns gut läuft bei 2,4s . Das entscheidet PA selbst, ich nehme an, nach internen Fehlberechnungen aller gestarteten, gestoppten, bewegten etc. Streams die auf dem System drauf sind. Ich hab es noch nicht im Source gefunden. Es ist eigentlich das Ziel eines Audioservers die Latenz niedrig zu halten, aus irgendeinem Grund, ist dem PA-Latenzalgorithmus das egal.

Wenn man jetzt denkt, daß der Befehl ja eine OPTION für die gewünschte Latenz hat und sich schon freut, daß die dann ja als Ziel eingehalten wird .. ähm ja, also wie soll ich das Schreiben ohne verklagt zu werden??? Lieber nicht, hier ein Beispiel: 500ms angegeben, Latenz beginnt bei 320ms und wandert pö-â-pö so Richtung 500ms, durchbricht den Median, und verschwindet alsbald jenseits von Gut und Böse im Sekundenbereich.

Wenn man auf die glorreiche Idee kommt, da das anzugeben, was der Algo vorher selbst ausgerechnet hat, dann bekommt man nicht 1,9s , nö, mehr so 1s+- und dann kommt das gleiche Spiel wie vorher bei 500ms.
Ja, man könnte jetzt die PAPLAY-Routine kapern, den anderen Geräten die Latenzen mitteilen und denen somit zu einem Sync verhelfen. ABER.. die Latenz wird ja immer größer, was bedeutet, daß bei jedem neuen Sync mehr Zeit vergeht, bis man was hört. Also auch mal 5 Sekunden schwarzes nichts. Das ist hochgradig Inakzeptabel.

Bugreports sind raus, werden nicht helfen, weil (C) endet 2006 . Sieht nicht so aus, als wenn da wer dran arbeitet.

Kommen wir zu ALSA

APLAY kann ALSA-Devices direkt ansprechen. Warum nutzen wir dann nicht APLAY, statt PAPLAY ? Gesagt, getan. Versuchts mal, viel Glück dabei. Das geht mit etwas Glück genau einmal und auch nur auf einem Device, aus das PA grade nichts ausgibt. Ist auch klar, weil PA ja ALSA als Unterbau hat. Wir erinnern uns, daß PAPLAY 1,9s Latenz hatte. APLAY, wenn man ein Device findet, das geht, hat 0ms und das Startdelay ist nicht ganz so funktional, wie sich APLAY das wünscht aka. auch buggy. ABER, 0ms sind cool, weil Android auch 0ms haben kann, ohne dabei drauf zu gehen. Der Lesezugriff für Netzwerkdaten für „16 Bit Stereo 48k“ auf einem Android liegt bei 1ms. d.b. nimmt man ALSA als Player und bekommt das Device frei, hat man eine echt geile Latenz von 1-2ms und das hört man nicht!

Der Resync

Jetzt gibt es allerlei Hürden, die man umschiffen muß. Androids fliegt das eigene Multitasking um die Ohren, da fängt der Ton dann an zu stottern. Vorwarnung : keine. Gegenmaßnahmen: derzeit unbekannt.Das funktioniert auf dem Desktop etwas besser.

Bei 0ms Latenz ist der Resync instant, da könnte man versucht sein, einfach pauschal alle paar Sekunden mal helfend durch einen Socket.close();Socket.connect() einzugreifen. Könnte klappen, muß nicht.Ist aber eine Option, wenn der Wiedergabetask das nicht merkt. Geheimtip: Vorsicht vor doppelten Daten im AudioBuffer. Vergleicht mal, ob Ihr nach dem connect()+read() einen Teil davon schon habt und schmeißt den raus.

LAHA

Unser ControllCenter steuert jetzt bereits beliebig viele Devices, kann Audiostreams von laufenden Apps kapern, z.b. MPV, FireFox etc. , hat diverse Backends zum Abspielen auf dem Desktop, könnte verschiedene Musikplayer als Quelle nutzen und damit auch Last.FM, Spotify etc. realisieren. Er verschiebt Metadaten, findet neue Geräte im Netz, erlaubt Endgeräten mit Screen ihn fernzusteuern und hat bereits erfolgreich ein Handy als Drahtloskopfhörer für Videos laufen gehabt. Dank MPVs negativer Latenz und der frei einstellbaren Endgeräte Latenz, kann man alles perfekt ausrichten 🙂

Wir sind also auf dem richtigen Weg. Ob das allerdings vor Weihnachten 100% zuverlässig läuft, kann ich nicht garantieren. Trotz des ganzen Frustes mit den Bugs der Anderen, hat das Projekt endlich mal wieder Spaß beim Programmieren beschert. Und das ist doch, weswegen man es tut, oder nicht 😀

Es ist Final Space Time bei NetFlix

Der Überraschungserfolg vor Weihnachten auf NetFlix: Final Space!

Die Animationserie handelt von Gerry und seinen Freunden, die das Ende des Universums abwenden wollen. Es gibt nur ein Problem: Gerry ist ein Kindskopf, der zu 5 Jahren Raumschiffknast verurteilt wurde, weil er eine Takobude in Luft gejagt hat… ja , ok, … UND 42 Raumschiffe zerstört hat.

Die Serie zu sehen, wird wohl niemand bereuen, vorsichtig optimistisch ausgedrückt, verschlingt man Sie am Stück. Das fällt nicht schwer, da es nur 10 Folgen sind. (Ist irgendwie komisch mit Netflix und der Staffellänge, oder?) Leider gibt es nur Staffel 1 auf NetFlix, aber Staffel 2 ist für 2019 angesagt worden \o/

Wenn Ihr noch was sucht um Zeitlücken zu füllen: Final Space! und grüßt Kevin, der hat’s nötig 😉

Fedora 28 und der OpenXenManager

Ja, daß Aftermatch von Fedora 28 geht in Runde 3 und die hats in sich. Jeder der OpenXenManager benutzt hat um seine XenServer zu versorgen, der sollte jetzt ganz genau weiterlesen. If you found this article about OXM, all relevant informations will be available in english too, the rest will be infos about the situation.

Fedoras Zukunft mit Python 2

Wir haben ein Problem. Eigentlich haben wir mehrere, aber eins nach dem Anderen. Der Entwickler des OpenXenManagers hat leider keine Zeit mehr für das Projekt. Das wäre an sich nicht soooo dramatisch, da es bis auf eine Kleinigkeit ganz gut funktioniert. Jetzt ist das Teil in Python 2 geschrieben. Das ist das Problem!

In Fedora 28 wurde die GTK-VNC Bindung für Python gekappt. Das Paket gibt es nicht mehr bei Fedora, weil GTK-VNC 0.8 kein Python 2 mehr können will, zumindest nicht so. Es gibt also eine neue API. Da kommt Problem 1 wieder ins Spiel: OXM müßte umgebaut werden, was aber nicht passiert, weil Daniel Lintott keine Zeit mehr hat. Deadlock!

In Fedora 30 wird Python 2 komplett entfernt. Wer also noch auf Python 2 setzt, ist dann raus.

Lösung – Solution

Bis Ihr einen Ersatz für den OXM habt, könnt Ihr das hier machen:

enter as root into a bash / als root in Bash eingeben:

rpm -i –force –nodeps http://dl.fedoraproject.org/pub/fedora/linux/releases/27/Everything/x86_64/os/Packages/g/gtk-vnc-python-0.7.1-3.fc27.x86_64.rpm

after this, OXM will start again / danach startet der OXM wieder

BUT / ABER

Your problem is not fixed yet, as Python 2 will be erased from Fedora 30. You need a new OXM, and there is no Opensource Version insight. https://xen-orchestra.com may be an alternative for Linux, but it’s commercial.

Wie oben schon angedeutet, mit Fedora 30 verschwindet Python 2 ganz. Bis dahin braucht Ihr Ersatz. https://xen-orchestra.com/ wurde da empfohlen, aber das ist kommerziell.

A skilled Python Dev could take over OXM for good and add the missing python gtk support again. If you know one, let him/her know.

Wer zufällig einen Python Entwickler kennt, könnte dem ja mal einen Tip geben. Da mir Python so gar nicht gefällt, kann ichs leider nicht machen.

Stimmt.. was war Runde 2? 🙂

Runde zwei war, das die Wetter-Anwendung aufgrund des libmozjs-38 Bugs nicht mehr startet, sondern einen core-dump produziert. Das muß man auch erstmal schaffen 🙂