applescript und vlc player

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
Hallo zusammen

ich bin ein ziemliches Greenhorn was applescript betrifft, habe es aber geschafft den VLC Player über diverse Scripts zu steuern (App laden, playlist laden, einzelne Filme starten etc.) Ich benötige aber mehrere Instanzen des Players, die ich mit folgendem Script erstelle:

on run
do shell script "open -n /Applications/VLC.app"
tell application "VLC" to activate
end run

on open theFiles
repeat with theFile in theFiles
do shell script "open -na /Applications/VLC.app " & quote & (POSIX path of theFile) & quote
end repeat
tell application "VLC" to activate
end open

Nun versuche ich verweifelt, die einzelnen Instanzen zu adressieren, also ein Script spezifisch zB nur an die zweite Instanz zu senden. Ist das überhaupt möglich und falls ja, wie kann man das bewerkstelligen? Bin dankbar um jeden Tipp!

Thomas
 

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
Vielen Dank für Deine Message! Hmm, gute Frage - wohl weil ich was Shellscripts anbelangt wohl noch unerfahrener bin als mit Applescripts ;-) Ziel ist eigentlich, dass die VLC Instanzen aus QLab heraus gesteuert werden können - soweit läuft ja auch alles bestens, nur kann ich die einzelnen Instanzen nicht aktivieren. Wäre allenfalls lediglich dieser Vorgang mit einem Shellscript machbar und der Rest mit den bestehenden Applescripts?
 

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
Vielen Dank, mausfang, für all die Infos! Naja, ich hab' mir das alles durchgeschaut aber denke, das ist 10 Kategorien zu hoch für mich... Ich muss wohl generell eine andere Lösung finden, weiss aber im Moment noch nicht, welcher Spur ich folgen soll ;-) Eine Idee war, dass ich die VLC Player app physisch kopiere und ihr einen anderen Namen gebe, zB VLC2. Gewisse Scripts lassen sich so zwar den beiden Playern zuweisen, aber eben nicht alle und obwohl der zweite Player einen anderen Namen hat, erscheint er in den Prozessen trotzdem als "VLC". Mit einer eindeutigen PID für jede Instanz würde das Ganze wohl laufen, aber ich bin ehrlich gesagt zu unerfahren damit, diese PID zu ermitteln...

Edit: Ok, natürlich, ich kann mehrere Instanzen des VLS Players über applescript erstellen und sehe im Activity Monitor auch die entsprechenden PID :) Wenn ich nun gleich nach dem Erstellen der Instanz die PID auslesen könnte und anschliessend das Script an die entsprechende PID senden könnte, wäre mein Problem gelöst... ?
 
Zuletzt bearbeitet:

mausfang

Aktives Mitglied
Mitglied seit
04.08.2016
Beiträge
1.919
Beschreibe doch mal kurz wofür Du mehrere Instanzen auf einer physischen Maschine laufen hast, und was Du über die Scripts zeitgleich parallel steuerst ...
 

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
Gerne: In einer Ausstellung sollen insgesamt 7 Bildschirme als "virtuelle Fenster" eines kleinen Ausstellungsraum dienen, auf welchen Videos der Aussenansicht zu sehen sind. Der Raum wird interaktiv "bespielt" mit Licht, Ton und eben diesen "Fenstern". Der Raum reagiert mit Ton- und Lichtänderungen auf Bewegungen der Besucher, auf das Anfassen von Gegenständen etc. Gesteuert wird das Ganze über QLab welches Interaktionsmeldungen über OSC von diversen Arduinos im Raum erhält. Das gleichzeitige Abspielen von 7 Videos über 2 Grafikkarten zwingt den Rechner aber in die Knie - werden die 7 Videos hingegen über VLC Instanzen abgespielt, wird rund 75% weniger Leistung in Anspruch genommen. Dies ist der Grund für die 7 Instanzen auf einer physischen Maschine.
 

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
ich bin vielleicht einen Schritt weiter... Mit

tell application "System Events"
set pidList to the unix id of (processes whose name contains "VLC")
tell (first process whose unix id is item 2 of pidList)
set frontmost to true
end tell
end tell

schaffe ich es, die verschiedenen PIDs der Instanzen auszulesen, anzuwählen und zu aktivieren - weitere Scriptbefehle gehen jedoch immer an die als erstes geöffnete Instanz...
 

oneOeight

Aktives Mitglied
Mitglied seit
23.11.2004
Beiträge
56.487
Hast du die auch im richtigen Tell Block mit drin?
 

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
wie meinst Du das? Müsste da ein eigener Tell Block erstellt werden (also innerhalb meines geposteten Scripts) oder kann der Befehl nicht einfach an den frontmost PID geschickt werden? (Sorry, ich bin wirklich ziemlich unbedarft was Applescript betrifft und heftig am lernen...)
 

oneOeight

Aktives Mitglied
Mitglied seit
23.11.2004
Beiträge
56.487
Frontmost ist die App die im Vordergrund ist.
Wenn du schon über die PID gehst, wäre es wohl transparenterr wenn du auch darüber die Instanzen ansprichst, statt erst eine nach vorne zu holen.
 

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
Du meinst also, dass ich anstelle von "set frontmost to true" den entsprechenden Befehl/Script einfüge, als zB "play"? Dann erhalte ich eine Fehlermeldung, da "play" als nicht definierte Variable angesehen wird...
 

oneOeight

Aktives Mitglied
Mitglied seit
23.11.2004
Beiträge
56.487
Ich würde eh eher activate statt frontmost nehmen.
Play erkennt der wohl nicht, weil der über pid wohl nicht das dictionary richtig zuordnet.
Gibt bestimmt einen Trick wie du dann trotzdem VLC zuordnest.
 

tcgass

Neues Mitglied
Thread Starter
Mitglied seit
15.02.2011
Beiträge
33
das habe ich auch schon versucht, geht aber nicht. Activate kann ich über "do shell script "osascript -e 'tell application \"VLC\" to activate'"" erreichen, aber ebenfalls nicht als Ziel für Scripts definieren.
Den Trick gibt's wahrscheinlich schon, aber eben... wie? ;-)
 

oneOeight

Aktives Mitglied
Mitglied seit
23.11.2004
Beiträge
56.487
In dem anderen script statt set frontmost ein activate geht nicht?
Ist wohl auch eine Variable, keine Eigenschaft wie frontmost.
Kann gerade nicht an einen Mac zum Testen.

Vielleicht spuckt Google was mit applescript pid as app dictionary.
 
Oben