Hier ein Problem, wo mir ein Lösungsansatz fehlt und ich hoffe, dass jemand helfen kann:
Wir setzen ein Script ein welches auf ein “OnPlayerStop” setzt, was auch gut funktioniert,
wenn allerdings die Moderatoren die Titel VERKNÜPFEN, um bspw. bessere Ramps zu fahren,
wird kein OnPlayerStop ausgelöst.
Daher die Frage an Euch: Gibt es in den “Einstellungstiefen” der Konfiguration von Mairlist eine Möglichkeit, bei jeder Art von Titelende den Event “OnPlayerStop” auszulösen oder ggf. eine andere Funktion, die das bei Verknüpfungen übernimmt?
Nach meiner Beobachtung hinsichtlich verknüpfter Elemente bei mAirList findet innerhalb der Verknüpfung gar kein PlayerStop statt, sondern die Kette wird als eine Einheit betrachtet und ausgeführt.
Das nächste Stop, auf das das Script reagieren sollte, wäre meiner Meinung nach erst am Ende der Kette.
Vielleicht überprüft ihr das ja mal, dann lässt sich das besser eingrenzen.
Als Alternative - ohne jetzt nachgeschaut zu haben - käme vielleicht etwas aus der “Load next”-Ecke infrage, aber das ist ein spontaner Schuss ins Blaue.
eine derartige Funktion in der Konfiguration ist mir nicht bekannt.
Dennoch lässt sich dein Problem durch das Umschreiben des Scriptes lösen.
Kannst du das aktuelle Script hochladen? Dann kann ich sehen was du genau machst.
Falls du es selbst machen möchtest, wäre die Funktion
// Called when (playlist) player changes its state
procedure OnPlayerStateChange(PlaylistIndex: integer; PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState; Item: IPlaylistItem);
begin
end;
Das “onPlayerState” kenne ich. Leider wird hier keine effektive Laufzeit des Titels (wie es bei PlayerStop) übermittelt.
Ist jemanden ein Event, ähnlich der “Mairlist-Loggingmöglichkeit” bekannt, das über ein Script bei jedem Titelende (egal wie er beendet wird) ausgelöst wird?
(die Loggingmöglichkeit kann ich leider nicht nutzen, da ich hier nicht übermitteln kann, welcher Encoder bspw läuft und auch keine Abhängigkeiten einbauen kann)
(bspw. darf das Logging nicht erfolgen, wenn der Encoder2 auf Sendung ist)
// Called when on-air playback of an item (in any player) ends
procedure OnItemStop(Item: IPlaylistItem; Region: byte; OnAir: boolean; UniqueID: string; Duration: TTimeValue);
begin
end;
[quote=“Torben, post:5, topic:11910”]
// Called when on-air playback of an item (in any player) ends
procedure OnItemStop(Item: IPlaylistItem; Region: byte; OnAir: boolean; UniqueID: string; Duration: TTimeValue);
begin
end;
[/quote]
Danke für den Tip, allerdings führt der Einbau dieser Prozedur zu einem Runtime-Error (“List index out of bounds (9)” in background script…")
Handling Message: ITEM STOP 14AA48B3166BF981 ? 00 {93050352-1379-4ED1-800F-EC46E3A28394} 27,55
Es wird die Mairlist-Version 5.3.16 Build 3267 eingesetzt.
Der Runtime-Fehler kommt auch, wenn die Prozedur komplett Leer ist…
Wenn in der Prozedur etwas drin ist, wird das jedoch komplett abgearbeitet. Danach kommt aber sofort der o.g. Fehler.
p.s. Wie kann man es anstellen, dass die Prozedur nur bei Playlist-Playern und nicht bei der Cardwall ausgelöst wird?
Bzgl. Fehlermeldung kann ich nichts beitragen, da ich das Script nicht kenne.
Zu deinem Postskriptum:
Welche Elemente hast du denn in der Cartwall und welche in der Playlist? Evtl. könnte man mit einer if-Abfrage des Items zwischen Cartwall und Playlist differenzieren.
Es ist vom Script vollkommen unabhängig, denn der Fehler kommt selbst, wenn nur die Funktion drin ist und selbst diese vollkommen leer ist.
Der Fehler wird scheinbar ausgelöst, wenn die Funktion abgearbeitet wurde, denn wenn etwas drin ist, wird das komplett abgearbeitet, erst dann kommt der Fehlerhinweis.
In dem aktuellen Snapshot von Mairlist 6 ist das Problem nicht. Es hat also irgendwas mit der 4er und 5er zu tun.
Kennst Du eine Funktion aus dem Item, wo man den Auslöser des ItemStops bekommen kann? Bisher habe ich die in der Doku nicht gefunden.
Schade, dass der Hersteller nicht auch mal Weihnachten, Neujahr und ein paar Tage Urlaub haben darf, ohne gleich dafür angegangen zu werden
In v5.3 muss die Signatur der Prozedur folgendermaßen lauten:
// Called when on-air playback of an item (in any player) ends
procedure OnItemStop(Item: IPlaylistItem; Region: byte; UniqueID: string; Duration: TTimeValue);
begin
end;
Die Script-Engine ist leider technisch nicht dazu in der Lage, die Korrektheit der Parameterliste zu überprüfen, daher führen Abweichungen dann zu solchen Laufzeitfehlern.