procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
Item := PlaybackControl(PlaylistIndex).GetPlayer (PlayerIndex) .GetItem;
if (Item.GetItemType = pitMusic) then begin
ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;
Jetzt mal
procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if (Item.GetItemType = pitMusic) then begin
ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;
gemacht.
Immerhin ist der Fehler weg, der beim Laden des Scriptes angezeigt wurde. Nun kommt im “Auslösemoment” des EOF folgende Meldung:
23.09.2021 20:57:48 Fehler Runtime error “Null Pointer Exception” in background script R:#PC-Config\mAirlist\Master-Scripts\QLCRemote-via-Companion.mls (line 73, column 1) handling message:
Ja tut es. Aber auf einem RaspberryPi. Die Eingaben im Script gehen an sfk.exe und dieses sendet die Befehle an Companion weiter, welches Art-Net Kanäle verändert.
Danke @Tondose Ich nutze sfk.exe ja auch, nur nicht ganz so exzessiv. Ich konnte da keine Performance Verluste feststellen. Die OBS Fernsteuerung zickt da schon eher, die bleibt nämlich hängen, wenn OBS nicht antwortet/ nicht läuft.
Trotzdem, kann mAirlist nicht direkt UDP Pakete senden und man kann sfk weg lassen?
Was zum teufel ist eigentlich dieses „Companion“? Übersetzt sich als Begleiter, Weggefährte. Im Modellnau kenne ich die 9x companion.
Wird mit dem eigentlichen Problem nichts zu tun haben aber wenn schon, hätte ich versucht, QLC+ irgendwie direkt anzusteuern.
Artnet oder OSC sind ja auch nur UDP Pakete, die muss man zwar einmal ermitteln aber so spart man sich den Umweg über noch ein Stück Software dazwischen.
Item wird bei der EOF-Prozedur nicht mitgeliefert. (Habe ich mit der Prozedur für die Cartwall verwechselt, sorry.) Item muß also tatsächlich einmal (!) definiert werden, allerdings in folgender Form:
procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
var
Item: IPlaylistItem;
begin
Item := PlaybackControl(PlaylistIndex).GetPlayer(PlayerIndex).GetItem;
if (Item.GetItemType = pitMusic) then begin
// usw.
end;
end;
(@Torben: Könntest Du in dieser Prozedur das Item nachreichen?)
Theoretisch ja, klar. Aber dann kommen wir genau in die Situation bzw. das Problem, das oben beschrieben ist: Alle müssten ihre Scripts anpassen, da sie sich sonst den Speicher zerschießen.
Daher würde ich sowas nur beim nächsten großen Versionssprung machen (in der Hoffnung, dass alle das Changelog lesen); oder in Form einer zweiten Variante OnPlayerEOFWarning2.
Das ist um einen virtuellen Schalter ein- und wieder auszuschalten.
Entschuldigt bitte, wenn ich die nächsten Tage sehr inaktiv sein werde, ich bin da leider nicht mehr in der Nähe des Studios. Ich habe das Script aber dabei um eure Verbesserungen (Vielen vielen Dank dafür!!!) einzuarbeiten.
Um die Diskussion wieder zum Laufen zu bringen und vor allem meine Probleme zu lösen würde ich gerne wissen, wie ich das Script anpassen muss, damit mAirlist wieder flüssig und ohne Fehler läuft?