Bug: OnCartPlayerStart/Stop funktioniert nicht in V5.1.3.2786

Hi Torben,

laut Background Script Template müsste das doch noch genauso funktionieren wie in V4:

procedure OnCartPlayerStart(PlayerIndex: integer; Item: IPlaylistItem);

OnCartPlayerStart und OnCartPlayerStop funktionieren offenbar nicht,
OnPlayerStart und -Stop funktionieren korrekt.

Hat vielleicht was mit der neuen Cartwall zu tun?

Derzeit ist nur die folgende, neue Funktion implementiert:

// Called when the state of a player on the current cartwall page changes
// (or the user switches to another page).
procedure OnCartwallPlayerStateChange(PlayerIndex: integer;
  OldState: TPlayerState; NewState: TPlayerState;
  Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem;
  OnAirMode: TCartwallOnAirMode);
begin
end;

Hintergrund ist, dass es ja eigentlich keine festen Player mehr gibt, sondern ein “Grid”, auf dem sich die Elemente anordnen lassen (und dann automatisch eine Nummer erhalten nach dem vorgegebenen Schema).

Die o.g. Funktion bezieht sich immer auf die aktuelle Seite. Das heißt, wenn du von einer Seite mit einem aktiven “Player” auf eine andere wechselst, wo der Player nicht aktiv ist, dann siehst du einen Zustandswechsel von psPlaying nach psLoaded (oder gar psEmpty).

Die Funktion ist insofern dafür ausgelegt, dass man den Zustand der “Player” auf einem externen Gerät wie einem MIDI-Controller etc. abbildet.

Wofür genau habt ihr OnCartPlayerStart bisher verwendet?

Also, wir brauchen eigentlich insbesondere die Info, ob ein Element gestartet oder gestoppt wurde, sowie das Item. Die Cart-Nr. haben wir nicht weiter verwendet, sondern haben das IPlaylistItem übergeben.

Wir nutzen es für ein Script, das die RDS-Daten generiert. Da dieses Script auf sämtliche startenden und stoppenden Player reagiert, ist es egal, ob der Nutzer z.B. ein Verkehrsjingle aus der Playlist oder aus der Cart startet: Das Script bemerkt es und setzt das TA-Flag etc.

Das soll auch mit der neuen Cartwall so sein. Daher habe ich mich gerade mal an OnCartwallPlayerStateChange versucht, um dem “RdsHandler” die benötigten Variablen zu übergeben. Nur: Es funktioniert nicht.

EDIT: Doch, doch, funktioniert bestens. Hatte hier was übersehen.

[code]procedure OnCartPlayerStart(PlayerIndex: integer; Item: IPlaylistItem);
begin
SystemLog(‘OnCartPlayerStart’);
RdsHandler(1, Item);
end;

procedure OnCartPlayerStop (PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
SystemLog(‘OnCartPlayerStop’);
RdsHandler(0, Item);
end;

procedure OnCartwallPlayerStateChange(PlayerIndex: integer;
OldState: TPlayerState; NewState: TPlayerState;
Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem;
OnAirMode: TCartwallOnAirMode);
begin
SystemLog(‘OnCartwallPlayerStateChange’);
case NewState of
psPlaying: RdsHandler(1, PlaylistItem);
psFading: RdsHandler(0, PlaylistItem);
psStopped: RdsHandler(0, PlaylistItem);
end;
end;[/code]

Ich hätte trotzdem nichts dagegen, wenn Du OnCartPlayerStart/Stop einfach auch wieder implementierst. :wink:

Warum so kompliziert?

// Called when on-air playback of an item (in any player) begins
procedure OnItemStart(Item: IPlaylistItem; Region: byte; UniqueID: string);
begin
end;

// Called when on-air playback of an item (in any player) ends
procedure OnItemStop(Item: IPlaylistItem; Region: byte; UniqueID: string; Duration: TTimeValue);
begin
end;

:smiley: Ja, cool. Danke. Ändere ich dann mal … :wink: