mAirlist 3.1 Encoder

Hi Torben,
erstmal ein paar Hintergrund Infos:
Wir übertragen in den Metadaten des MP3 streams im Feld ICQ und AIM, Moderatoren ID und Studio ID. Daraus ermittelt die Webseite welches Moderatoren Bild bzw. Studiobild angezeigt wird.
Kann man ja alles wunderbar einstellen, nun das Problem.
Es gibt Off-Air Produktionen, die jeweils Ihre eigene ID haben, ich möchte die über die Automation Zeitgesteuert abfahren. Nur muß sich je nach dem welche Produktion gerade läuft, die ID ändern. Im Momten müsste ich mehrere mAirlist Instanzen laufen lassen oder jedes mal die Konfiguration aufrufen und mAirlist neustarten.

Nun der eigentlich Feature Request: Ich möchte diese Metadaten ändern, während der Encoder verbunden ist.
z.B. per Script was über ein Event abgerufen wird, oder von einem Playlist Element abgerufen wird.

Vielleicht hast Du auch noch eine andere Idee, ich möchte jedenfalls mehrere Instanzen verhindern und mAirlist auch nicht neu starten.

Greetz
Malte

mAirList-Systemsteuerung: Ctrl+Alt+X

Da kannst du die Parameter zur Laufzeit verändern, und beim nächsten Connect werden sie dann gesetzt.

Ab dem nächsten Build ist die Systemsteuerung auch über das Menü zu erreichen.

WOW ich bin mal wieder positiv überrascht.
Muß ich die Tastenkombination im Setup Dialog drücken, oder in der normalen mAirlist ansicht?
Würde das auch funktionieren, wenn ich mit einer externen Anwendung die INI Datei modifiziere?
Weil ich will das ja zeitgesteuert machen. Ich würde dann über ein Script mit “ExecuteCommand” aus der commandozeile die 2 Werte in der INI ersetzen.
Dann einmal offAIR schalten und wieder onAIR schalten. Encoder Connect ist mit onAIR schalter verlinkt. Vorher muß ich nur das neuladen der Configuration auslösen, Ctr+Alt+X, da hab ich noch keine Idee, wie ich das automatisch machen soll.

Hi Torben,
hab’s grade auspobiert, klappt leider nicht. Egal wo ich die Tastenkombination drücke. Version 3.1 Build 705 (das neueste wsa ich gefunden habe)
Die geänderten Metadaten werden nicht übernommen.
Ich hab auch extra bis zum Titelupdate gewartet, auch das hilft nicht.

Greetz
Malte

Ich hab den Fehler inzwischen gefunden.
Strg+Alt+x ist bei mir belegt zum abfeuern eines CART players. Daher funktioniert die Tastenkombination nicht um die Systemsteuerung aufzurufen.

Bleibt noch die Frage offen, wie ich das automatisch hin bekomme. Kann ich das neu einlesen der Settings irgendwie per Event/ Script steuern?

Im neuen Build 706 ist die Systemsteuerung auch über das neue Menü neben dem Info-Button erreichbar.

Der Zugriff auf die Parameter via Script ist noch immer nicht möglich. Das muss ich noch nachrüsten.

So, jetzt ist Build 708 aktuell, und dort kann man per Scripts auf den Encoder zugreifen. Ausgangspunkt ist die Funktion “Encoder”, die ein Interface vom Typ IBassStreamingEncoder zurückliefert. Dort kann man mittels GetConnections auf die einzelnen eingerichteten Verbindungen zugreifen, die allerdings in den meisten Fällen vorher noch einem Typecast unterzogen werden müssen, in IShoutcastEncoderConnection oder IIcecastEncoderConnection, je nachdem. Hier ist ein Beispiel, wie man mehrere Parameter von der ersten Verbindung - in diesem Falle Shoutcast - ändert:

var
  conn: IShoutcastEncoderConnection;

begin
  conn := IShoutcastEncoderConnection(Encoder.GetConnections.GetItem(0));

  conn.BeginUpdate;
  try
    conn.SetURL('http://www.mAirList.com');
    conn.SetICQ('12345');
  finally
    conn.EndUpdate;
  end;
end

Um die Metadaten (ICQ etc.) auf dem Server zu ändern, muss die Verbindung unterbrochen und neu hergestellt werden (jedenfalls ist mir nichts Gegenteiliges bekannt). Der Encoder tut das automatisch, sobald man einen Parameter ändert. Möchte man mehrere Parameter gleichzeitig ändern, sollte man wie oben ein “BeginUpdate” und “EndUpdate” um die Aufrufe herum setzen, am besten noch in “try…finally” gekapselt - dadurch wird erreicht, dass die Verbindung nur einmalig unterbrochen wird und nicht nach jeder einzelnen Parameteränderung.

Ich habe auch mal eine aktuelle Script-Referenz hochgeladen, unter dem Punkt “BassStreamingInterfaces” kann man alle beteiligten Interfaces und ihre Methoden nachschlagen: http://www.mairlist.com/download/mAirList/v3.1/scriptinghelp/

Dann will ich meine frühere Frage nochmal stellen:
“Kann ich den Live-Button des encoder meters über ein notification script setzen? (OnLoad)”

Habe die Script Referenz zwar schon mehrmals durchgefilzt aber da ist nix was jezt offensichtlich drauf hinweist. (Zumindest nicht für mein Verständnis ;D )

Gruss:
-Serge-

Ja, das geht jetzt auch:

Encoder.SetLiveFeedEnabled(true);

Aktionen folgen später.

Danke Torben.

Obwohl ich das jetzt momentan nicht brauch, aber gibt’s das auch für den OnAir-Button?
Das müsste ja dann irgendwie:

Engine.SetOnAir(true);

oder ähnlich heissen. Dazu finde ich auch nix in der Referenz…

Merci im Voraus:
-Serge-

Instance.SetOnAir(true);

(Denk dran, der On-Air-Status ist ein mAirList-weiter Wert, der nicht direkt etwas mit dem Encoder zu tun hat - der Encoder überwacht ihn nur und verbindet sich entsprechend, wenn die Option aktiviert ist.)

Hallo Torben,
ich habe Dein Script Beispiel genau so eingefügt, als mls gespeichert und auf ein Audio Element als Aktion bei Start gelegt.
Da bekomme ich beim schließen des Dialog schon den Fehler:
Overflow while converting variant of type (LongWord) into type (integer). Der Bug Report als Anhang.

Hab dann noch mal SetURL in SetAIM geändert, aber das ändert auch nix.


bugreport.txt (28.8 KB)

Mit der Build 710 ist der Fehler weg, aber ich hab einen neuen.
Error running script: [Error] (15:1):period(’.’) expected

Vielleicht sollte man das mal ins Bug Forum verschieben, wollte das Tehma nur nicht auseinanderreissen.

Greetz
Malte

Ähm, was ich oben schrieb war natürlich nur eine Zeile aus einem Script. Damit es ein ganzes Script wird, musst du noch “begin” davor und “end.” dahinter schreiben.

Sorry, hab mich nicht klar ausgedrückt. Ich meine dieses Script hier:

var
  conn: IShoutcastEncoderConnection;

begin
  conn := IShoutcastEncoderConnection(Encoder.GetConnections.GetItem(0));

  conn.BeginUpdate;
  try
    conn.SetURL('http://www.mAirList.com');
    conn.SetICQ('12345');
  finally
    conn.EndUpdate;
  end;
end

Beim letzten “end” fehlt der Punkt dahinter. Ist mir wohl beim Copy&Paste verloren gegangen.

Och nööö, da hätte ich auch selber drauf kommen können. :wink: Da kann man mal wieder sehen, wie planlos ich in sachen Programierung bin.
Werd’s heute abend testen und hier berichten.
Danke schonmal.

JA, geht natürlich.
Danke für’s Augen öffnen!