Forum: Mikrocontroller und Digitale Elektronik Raspi: OMXPlayer blockiert andere Anwendungen


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich wollte eine GUI-Anwendung für den Raspi schreiben, die per OMXPlayer 
verschiedene Videos startet.

Über die Aufruf-Parameter (--window) für den OMXPlayer kann ich dafür 
sorgen, dass, während das Video läuft, sich die Videowiedergabe nicht 
über den gesamten Bildschirm erstreckt, und damit die Steuerbuttons der 
Anwendung (Stop, Vor, Zurück usw.) sichbar bleiben.

Blöderweise scheint der OMXPlayer, während ein Video läuft, sämtliche 
Events an sich zu reissen, so dass keinerlei Maus- oder 
Touch-"Klick"-Events an meine App im Hintergrund durchkommen. Ich habe 
auch das App-Window komplett klein genug gemacht, so dass es quasi neben 
dem laufenden Video liegt. Aber die App ist wie tot, reagiert erst dann 
wieder, wenn das Video durch ist. Auch innerhalb der App per Timer 
ausgeführte Kommandos, diese in den Vordergrund zu bringen, helfen 
nicht.

Kann man das mit irgendwelchen (mir nicht bekannten) Aufruf-Parametrn 
für den OMXPlayer lösen?

Danke für Tips.

: Bearbeitet durch User
von Chris M. (chris_appment)


Lesenswert?

Wie ist die Anwendung programmiert? Klingt so, als würde dein Player als 
Funktion laufen und das Programm erst weiterlaufen, sobald die Funktion 
beendet wurde.

Stichwort Threading.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Chris M. schrieb:
> Wie ist die Anwendung programmiert? Klingt so, als würde dein
> Player als
> Funktion laufen und das Programm erst weiterlaufen, sobald die Funktion
> beendet wurde.
>
> Stichwort Threading.

Die Anwendung ist in Xojo (früher RealBasic / RealStudio) geschrieben. 
Der OMXPlayer wird mittels Shell-Kommando gestartet, das sieht in Etwa 
so aus:

dim s as new shell
s.mode=1 //async (non blocking) mode
s.execute "omxplayer --win 0 0 1920 900 home/pi/Documents/video.mp4"

Damit startet der Player. Der OMXPlayer reagiert auf Tasten, die bei 
einem Touchscreen natürlich nicht existieren. Deshalb will ich bei 
Tastendruck auf die Buttons in meiner App weitere Shell-Kommados 
auslösen (mit xdotool), die Tastatureingaben simulieren. Allerdings 
kommen die Tipps auf meine Buttons garnicht erst an, so lange das 
aktuelle Video läuft ...

: Bearbeitet durch User
von Alex G. (dragongamer)


Lesenswert?

Kommt ein print an die Console direkt nach dem Aufruf von
1
dim s as new shell
2
s.mode=1 //async (non blocking) mode
3
s.execute "omxplayer --win 0 0 1920 900 home/pi/Documents/video.mp4"
sofort durch? Oder wird nichts anch diesem Code ausgeführt bis das Vid 
zuende ist?

Falls es nicht durchkommt, bist du wohl im "synchronous mode" aber du 
brauchst einen "asynchronous mode", wie hier in der Doku der .execute 
Funktion erwähnt:

[quote]
If you are in Synchronous mode (mode 0), the Result property will 
contain the results. The Command parameter is the path/name of the 
executable to run and the second parameter contains the arguments to 
pass to the executable. You can specify the executable without passing a 
second parameter. On Windows, if the path/name of the executable 
contains spaces and you want to pass arguments to it, it is safer to 
separate the two.

If you are in Asynchronous mode (mode 1 or 2), use the Execute method 
for the first command to be executed. In Interactive mode (mode 2), you 
can then later use Write or WriteLine to send data or new commands to 
the Shell.
[/quote]

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.