Beiträge von Wellenreiter

    Hallo,
    ich hatte das Problem, eine String-Variable mit Sonder- und Leerzeichen aus Python an die Shell übergeben zu müssen und habe alles mögliche ausprobiert. Das Abfangen der Sonderfälle - eine einzige Eierei. Bin dann doch wieder bei der Dateivariante gelandet und schreibe diese in das Verzeichnis /run/shm, das eine (sehr kleine, aber ausreichende) "RAM-Disk" ist. Damit ist die SD-Karte aus dem Rennen. Die Datei ist nach dem nächsten Neustart logischerweise verschwunden.

    Ausgabe in Python:
    # encoding: utf-8
    ...
    fobj = open("/run/shm/temp.txt", "w")
    fobj.write(Stringvariable)
    fobj.close

    Wiederaufruf im Shellsript:
    #!/bin/bash
    IFS='
    '
    # vorhergehende 2 Zeilen ermoeglichen den Umgang mit Leerzeichen, Tabulatoren und Zeilenumbrüchen
    Stringvariable=$(cat /run/shm/temp.txt)

    Geht bestimmt eleganter, aber das ist ja nur eine Anregung. Ich mußte auch nur eine Zeile auslesen - das müßte man modifizieren.
    Grüße

    Hi Dennis,
    habe gerade sowas ähnliches gebaut. Eine genaue Anleitung wäre jetzt zu umfangreich, deshalb nur eine grobe Übersicht - aber Du findest zu jedem einzelnen Punkt jede Menge Beispiele im Internet und diesem Forum. Ich bin so vorgegangen:

    - 2 Taster + 2 Widerstände an entsprechende GPIO-Ports angeschlossen
    - Rasperian wheezy raufgeladen
    - Voreinstellungen so, daß immer die grafische Oberfläche (X) gestartet wird
    (bei mir war das nötig, weil mein Programm die Namen der Videos anzeigen soll;
    wenn Du nur abspielen willst, kannst Du das auch von der Konsole tun)
    - Bildschirmschoner abgeschaltet - je nachdem, ob Du von der Konsole oder X startest, sind das unterschiedliche Befehle
    - Login Passworteingabe abgeschaltet
    - Raspi-Bildschirmauflösung auf 1920x1080 geändert (Full HD)
    - Einen Ordner "Daten" erstellt, dort meine Videos reingeladen
    - Netzwerkzugang mit Samba eingerichtet und meinen Ordner "Daten" freigegeben, damit über WLAN Videos nachladen kann
    - Das entsprechende Programm in Python geschrieben
    - Dieses Programm als Autostart definiert

    jetzt zum Python-Programm:

    - Als erstes erstelle ich eine Liste der Dateien im "Daten"-Ordner (bei mir waren es mehr als 2)
    - dann initialisiere ich meine beiden GPIO-Ports, an denen die Taster hängen, als Eingänge
    - jetzt definiere ich eine Funktion zum Videoabspiel
    1. sie killt den gerade laufenden Videoplayer
    2. sie startet den Videoplayer über Systembefehl mit der entsprechenden Datei aus der Liste neu
    Als Videoplayer nehme ich den omx-Player, der bei mir als einziger stabil gelaufen ist und auch die nötige
    Hardwareunterstützung für FUll HD bietet. Wenn Du dabei HDMI-Video und -audio benutzt, kommt es zu verzögertem Audiostart;
    den Befehl, der das verhindert, kannst Du in Python gleich mit einbinden (Dazu habe ich unlängst im Forum was geschrieben)

    - als nächstes definiere ich einen Thread, der im Hintergrund die beiden GPIO-Ports, also die Taster abfragt
    1. Er enthält gegen dauernde CPU-Auslastung und Tastenprellen je eine Verzögerung
    2. Er guckt nach, ob der omx-Player noch läuft, wenn nicht, wird die Abspielfunktion mit Video 1 gestartet
    Dieser Fall tritt ein, wenn ein Video nach Tastendruck abgelaufen ist und die Schleife wieder starten soll
    3. Er guckt nach, ob eine Taste gedrückt wurde, wenn ja, wird die Abspielfunktion für das entspr. Video gestartet
    Schau Dir dazu die Optionen des omx-Players an, da ist alles dabei, was Du brauchst, auch --loop
    Die eine Datei rufst Du also mit der Option loop auf, die andere nicht

    - Dann starte ich einmalig eine Schleife von 5 s Dauer, in der ich mit einem Tastendruck noch das Programm beenden kann
    Das hat den Grund, das Du nur mit 2 Tastern das Programm schlecht beenden kannst, wenn die Videoschleife einmal läuft.
    Du kommst dann an die Rechneroberfläche nicht mehr ran und so hast Du noch eine Abbruchmöglichkeit, wenn Du z.B. Dateien über USB laden willst

    - dann wird über die Funktion zum Videoabspiel die Schleife erstmalig gestartet
    - zum Schluss starte ich den Thread für die GPIO-Abfrage für das weitere Abspiel

    Bei mir funktioniert das auf diese Weise seit einem halben Jahr im Dauerbetrieb.

    Gruß Wellenreiter

    Lösung des verzögerten Audiostarts:
    Das Problem tritt nicht nur unter wheezy auf. Somit könnte der verzögerte Toneinstieg damit zusammenhängen, das bei jedem Abspiel der omxplayer neu aufgerufen wird und den HDMI-Audioausgang neu initialisiert. Dies dauert einfach zu lange, besonders dann, wenn über HDMI auch ein Bild ausgegeben werden soll.
    Die Lösung besteht darin, die Audioausgabe vorab zu initialisieren und dann ständig in Betrieb zu halten. Im Internet bin ich fündig geworden:
    der Konsolenbefehl "aplay -c2 -r48000 -fS16_LE < /dev/zero &" tut genau dies, indem er quasi ständig eine Nulldatei ausgibt.
    Einfach per Hand oder automatisch ausführen, danach tritt das Problem nicht mehr auf.
    Dazu ist in der Standardinstallation von whezzy nichts weiter runterzuladen, die zusätzliche CPU-Auslastung kann man vernachlässigen und der omxplayer läuft parallel dazu endlich so, wie er soll.

    Danke für die Anregung, werde ich mal ausprobieren.
    Ich setze die Pis in einer Ausstellung ein, in der man per Knopfdruck mehrere Filme abrufen kann. Leider beginnen einige mit Interviews ab erstem Bild. Da ist es einfach lästig, wenn man Leute reden sieht, aber erstmal nicht hört und das bei allen Filmen so ist, die man startet. Wie gesagt, nur wenn der Ton über HDMI läuft.
    Für heute gute Nacht und vielen Dank in die Runde.


    Der Ton fängt einmalig 2sec. später an? Danach ist er sync?

    Genau. Der Ton ist lippensynchron. Er ist beim Starten am analogen Ausgang sofort, bei HDMI ziemlich genau 2 Sekunden später da. Ist das Video einmal geladen, und wird zwischendurch angehalten, startet der Ton dann korrekt mit dem Bild.
    Das Ganze passiert unabhängig von der Auflösung und Komprimierung des Videos, von der Taktfrequenz, vom angeschlossenen Monitortyp und von den HDMI-Einstellungen in der /boot/config.txt auf drei Raspberry Pi2. Allerdings sind alle drei gleich konfiguriert.


    Vielleicht eine USB Soundkarte?
    Habe das selbe Problem und hab ne Soundkarte von CSL Computer genommen. Hat etwa 5€ gekostet.


    toasty


    Hallo toasty,
    danke Dir für die schnelle Antwort. Das löst das Kernproblem noch nicht ganz, weil die Monitore, die ich nutzen muß, nur HDMI können und für Zusatzlautsprecher kein Platz ist, ich also HDMI zwingend nutzen muss. Du hast mich aber auf eine andere Idee gebracht, nämlich notfalls einen AV-Inserter zu nutzen und das Audiosignal neu dazuzusetzen, falls sich keine Softwarelösung findet.
    Vielen Dank nochmal

    Hallo zusammen,
    als Neuling, was Linux und Raspberry betrifft, wende ich mich an das Forum in der Hoffnung, das jemand sich mit demselben Phänomen herumgeschlagen hat.
    Ich habe mehrere Raspberry Pi2 mit Wheezy bespielt und betreibe sie als ferngesteuerte Multimediaplayer für mp4-Videos in Full HD. Zum Abspielen dient der omxplayer.
    Dabei läuft die Wiedergabe korrekt, wenn der Ton ANALOG und das Bild über HDMI ausgegeben werden.
    Wird der Ton ebenfalls über HDMI ausgegeben, schaltet er sich erst nach 2 s synchron zum Bild dazu - egal, welche Optionen ich am omxplayer ausprobiert habe. Auch bei sonstigen Konfigurationseinstellungen hatte ich bis jetzt keinen Erfolg.
    Weiß jemand eine Lösung?

    Danke, Wellenreiter