omxplayer Filme ruckeln nach Mehrfachstart

  • Hallo und gesundes Neues!


    Nutze ein Script, um nach dem pi-Start ein Standbild laufen zu lassen und beim Drücken diverser Buttons verschiedene Filme laufen lässt. Nachdem der jeweilige Film abgespielt wurde, erscheint wieder das Standbild. Das Script funktioniert soweit gut und auch das erste Abspielen eine Filmes läuft flüssig. Leider beginnen die Filme nach mehrmaliger Buttonnutzung mit der Zeit zu ruckeln.


    Wenn ich die Filme direkt aus der Kommandozeile ohne Button starte, laufen sie immer flüssig. Ich glaube also nicht, dass es an den Filmen liegt. Es sind auch nur kleine Filme mit maximal 20 MB. Der pi-Prozessor geht höchstens auf 35% Auslastung. Scheint also auch kein Hardwareproblem zu sein. Ich habe das Gefühl, dass das Script die Ursache ist. Vielleicht überlagern sich Prozesse?


    Danke für Eure Hilfe!


    Nachfolgend das Script:


    Edited once, last by bigf00D: quelltext verstümmelt ().

  • Hallo,

    Dein Code ist verstümmelt worden, z.B. sind alle Einrückungen verlorengegangen.


    Das kannst Du verhindern, wenn Du den Code in einen Codeblock (das ist das </>-Symbol im schwarzen Balken) einfügst.


    Du kannst einen eigenen Beitrag ändern mit dem Button Bearbeiten und Beitrag bearbeiten.

    Probiers mal und ein gutes neues Jahr, kle

  • Die while Schleife sieht auf jeden Fall potentiel problematisch aus. Das würde ich genauer untersuchen. Z.B. ob die Prozesse auch immer wirklich sauber beendet werden. Gibt es evtl. ein Speicherleck? Fehlerbehandlung? Delays ggf. einfügen? Oder nach einer besseren Möglichkeit der Steuerung suchen.

  • Danke für den Tip! Erledigt! Gibts sonst noch Lösungsoptionen?

  • Hallo,


    was sehr obskur ist: du benutzt richtigerweise `subprocess` und falscherweise das veraltete `os.system` im gleichen Skript. Warum? Bzw.: verstehst du, was in deinem Skript so abläuft?


    In der Zeile 21 bindest du den `subprocess.Popen` Aufruf an `p`, was grundsätzlich ok ist - aber du benutzt `p` danach nicht mehr.

    In der 26 bindest du `subprocess.Popen` nicht - warum nicht? Und warum nutzt du `p` nicht, im den Mirage Bildbetrachter zu schließen?

    Mit der Zeit hast du X Instanzen von Mirage offen, dir geht der Speicher aus und das System fängt an zu swappen. Was ggf. das besagte Problem verursachen kann.


    Zum Skript:

    • Kommentare sollen _zusätzliche_ Infos zum Skript liefern, nicht das offensichtliche beschreiben -> alle deine Kommentare können weg.
    • RPi.GPIO ist alt / veraltet. Nutz' das neuere / schönere / bessere gpiozero.
    • Du importierst `sys`, benutzt es aber nicht.
    • Es gibt Python Bindings für den omxplayer, die solltest du nutzen. Dann kannst du dir `subprocess` und dieses Abschießen via `killall` sparen.


    Gruß, noisefloor

  • Danke, für die Hinweise.


    Den Code hat mir ein Freund geschrieben. Habe zwar rudimentäre Programmier-Kenntnisse in anderen Sprachen, aber Python ist mir quasi neu. Daher verstehe jetzt nicht im Detail jede Zeile. Habe das Problem (hoffentlich) wie folgt gelöst:


    Im Prinzip habe ich also

    1. nur den killall-Befehl um ein sudo ergänzt und

    2. die zeile "os.system('sudo killall omxplayer.bin')" nach dem Videoabspiel-Befehl wiederholt.

    Punkt 1. allein hat nicht gereicht. Ist sicher nicht elegant, funktioniert bisher aber.

  • Hallo,


    Quote


    Ist sicher nicht elegant,

    Nee, ist es nicht. Um es mal auf den Punkt zu bringen: das ist ziemlich grottig.

    Und von den Verbesserungsvorschlägen hast du keinen umgesetzt...


    Quote

    funktioniert bisher aber

    Immerhin. Macht den Code aber keine Millimeter besser.


    Gruß, noisefloor