Krpano auf Raspberry Pi 4B mit FullHD Touchscreen (Probleme mit JS Touchevents)

  • Hallo zusammen,

    bevor ich zum eig. Problem komme möchte ich meinen Aktuellen Stand der Dinge schildern, damit
    a) andere die krpano auf dem Pi zum laufen bekommen möchten nicht über die selben Probleme stolpern wie ich, und
    b) bei evtl Fragen schonmal geklärt sind.

    Status Quo:
    Ich habe auf einem Raspberry Pi 4B (4GB RAM) mit dem Raspberry Pi OS versucht eine krpano tour anzusehen. Browser Chromium (86.0.4240.197), Hanns-G HT225 Touchscreen (FullHD per HDMI und USB). Ergebnis war bei Fullscreen leider sehr ruckelig. Ähnliches Ergebnis unter Ubuntu Desktop (20.10) mit ich glaube es war auch Chromium, version weis ich leider nicht mehr. Auch hier traten schon Probleme mit den Touchscreen auf, schildere ich aber weiter unten genauer.

    Versuche den Browser zu wechseln waren erfolglos:
    Firefox / Iceweasel unterstützen Touch nicht ausreichend, auch mit

    Code
    MOZ_USE_XINPUT2=1

    lief Firefox extrem langsam (Touch wurde nicht korrekt erkannt, und die Touchposition hängt mehrere Sekunden hinterher) und Vivaldi unterstützt am Pi WebGL, CSS3d und Hardwarebeschleunigung nicht.

    Mein nächster Versuch war es dann den Pi auf 2,1GHz für die CPU und 720MHz für die GPU zu übertakten. Danach lief der Viewer halbwegs "schnell". (12 bis 20 FPS beim drehen, 30 bis 60 FPS beim bewegen des Zeigers ohne zu klicken.) Damit war ich soweit zufrieden, da ich mehr vermutlich nicht aus dem Pi rausholen kann.

    Nun zu dem Problem mit dem Touchscreen:
    Bei Chromium wird mein Sichtfeld zwar korrekt gedreht, aber manchmal springt es beim nächsten ansetzen auf einen anderen Blickwinkel.
    Ich habe das Problem soweit zurückverfolgen können, dass ich weis, dass das "touchend" event nicht immer feuert. Sichtbar ist es bspw. durch den Cursor: Bei korrekter Ausführung wird beim Berühren der normale Mauscursor zu dem mit den 4 Pfeilen, und beim Loslassen wechselt er von den 4 Pfeilen zurück zum Mauscursor. Manchmal bleibt er aber bei dem Cursor mit den 4 Pfeilen also als hätte ich den Finger weiterhin auf dem Touchscreen.

    Verifizeren konnte ich dies wie folgt in der Console:

    Code
    n = 0;
    var krpano = document.getElementById("krpanoSWFObject");
    krpano.addEventListener('touchend',  function(e) {console.log("touch stopped " + n); n++;}, false );

    Ergebnis:
    Bei vielen "Wischbewegungen" um das Bild zu drehen, wird in der Konsole nicht "touch stopped x" angezeigt. Demzufolge geht krpano davon aus, dass die Bewegung noch nicht fertig ist, und beim nächsten aufsetzen wird das eben Interpretiert, wie wenn ich meinen Finger dorthin bewegt hätte, was sofort den Blickwinkel ändert.

    Leider habe ich noch kein Muster gefunden, von was es abhängt, wann der Fehler auftritt oder nicht.

    Bei meinem Windows Laptop funktioniert es mit dem Monitor einwandfrei. Krpano ist als Fehlerquelle auch ausgeschlossen, da der gleiche Fehler hier auch reproduzierbar ist.

    Falls jemanden etwas einfällt wie ich Chromium dazu bringe die Events richtig zu feuern immer her damit.


    Eventueller Workaround:
    Da ich bis jetzt im Internet nicht fündig geworden bin, versuche ich gerade einen Workaround zu basteln:
    Falls es möglich ist, würde ich gerne die Funktionen aus krpano die mit den touchevents verknüpft sind aus eigenen Funktionen aufrufen, und nicht mehr automatisch durch das Event. Somit könnte ich ja prüfen, ob bspw. eine gewisse Zeit kein Event gekommen ist, und wenn ja die Funktion die eig. durch touchend aufgerufen werden würde aufrufen, oder bei zu großen Sprüngen durch touchmove bevor ich die Funktion die vorher damit verknüpft war aufrufe, einmal die Funktionen von touchend und touchstart aufrufen.
    Natürlich wäre es viel sinniger, wenn die touchevents von anfang an korrekt getriggert werden würden.
    Hoffe das ist halbwegs verständlich erklärt.

    Danke schonmal für Antworten / Anregungen / Hinweise / etc.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!