BRIGHTCOVE-PLAYER: ÄNDERUNGEN AM SSAI-PLUGIN FÜR VERSION 6.9.0

Bild von JESS R
JESS R

Das Brightcove-SDK v6.9.0 wurde am 22. Oktober 2019 veröffentlicht und enthält mehrere Änderungen (wie in den Versionshinweisen angegeben). In diesem Beitrag möchte ich jedoch speziell auf die Änderungen am SSAI-Plugin eingehen, insbesondere auf die zusätzliche Unterstützung für Live SSAI.

LIVE SSAI ÜBERSICHT

Was ist Live SSAI? Kurz gesagt ist Live SSAI ein Live-Stream mit dynamisch eingefügten Anzeigen. Weitere Informationen über die Live SSAI API finden Sie unter Live API: Server-Side Ad Insertion (SSAI)") - und auch unter Video Cloud SSAI Overview, um mehr über SSAI im Allgemeinen zu erfahren.

Wenn Sie einen SSAI-Livestream in einem beliebigen Player wiedergeben, sehen Sie sowohl den Content als auch die Werbung als Teil desselben Streams, und es gibt keine visuelle Unterscheidung zwischen den beiden. An dieser Stelle kommen das Brightcove-SDK und das SSAI-Plugin ins Spiel. Das SSAI-Plugin erkennt, wenn eine Werbeunterbrechung abgespielt wird, und der Controller ändert sich, um nützliche Informationen anzuzeigen, z. B. die Dauer der Werbeunterbrechung, die Dauer der einzelnen Anzeige und den Countdown für die Anzeigenanzahl.

ERSTE SCHRITTE

Bevor ich über Android und den SSAI-Plugin-Code spreche, müssen Sie die folgenden Dinge tun:

  1. Eine Live-Anzeigenkonfiguration erstellen
  2. Einrichten Ihres Live-Streams
  3. Suchen und kopieren Sie Ihre Live adConfigId

EINE LIVE-ANZEIGENKONFIGURATION ERSTELLEN

Sie müssen eine Anzeigenkonfiguration auf die gleiche Weise wie bei einem VOD-Video erstellen. Befolgen Sie dazu bitte die folgende Anleitung: Erstellen einer Live-Anzeigenkonfiguration. Sie können auch einen Blick auf Implementieren von serverseitigen Anzeigen im Live-Modul werfen.

IHREN LIVE-STREAM EINRICHTEN

Um Ihren Live-Stream mit SSAI-Unterstützung zu erstellen, folgen Sie bitte den Anweisungen: Erstellen eines Live-Events, das serverseitige Anzeigen unterstützt.

SUCHEN UND KOPIEREN SIE IHRE LIVE-KONFIGURATIONSDATEI

Wenn Sie in Schritt 1 eine Live-Anzeigenkonfiguration erstellen, erhalten Sie eine Id, und Sie könnten versucht sein, diese als adConfigId zu verwenden, wie es bei VOD SSAI der Fall ist. Dies ist jedoch nicht die Id, die wir für Live SSAI benötigen.

So finden Sie die Live adConfigIdmüssen Sie die Schritte in Veröffentlichung der Live-Veranstaltung. Im letzten Schritt wird die URL des Players angezeigt. Diese Player-URL enthält die adConfigId. Sie werden es unterscheiden können, weil diese adConfigId beginnt mit “live.”

IHR LIVE-SSAI-VIDEO MIT DEM SSAI-PLUGIN ANFRAGEN

Jetzt können wir das Video anfordern und abspielen.

Als erstes müssen wir eine HttpRequestConfig Objekt mit dem Live adConfigId.

String adConfigIdKey = "ad_config_id";
String adConfigIdValue = "live.eb5YO2S2Oqdzlhc3BCHAoXKYJJl4JZlWXeiH49VFaYO2qdTkNe_GdEBSJjir";

HttpRequestConfig httpRequestConfig = new HttpRequestConfig.Builder()
  .addQueryParameter(adConfigIdKey, adConfigIdValue)
   .build();

Zweitens: Wir erstellen die SSAIComponent Objekt, das den Live-SSAI-Stream auf die gleiche Weise wie einen VOD-SSAI-Stream behandelt.

SSAIComponent plugin = new SSAIComponent(this, brightcoveVideoView);

Dann erstellen wir die Catalog Objekt.

Catalog catalog = new Catalog(eventEmitter, accountId, policyKey);

Schließlich stellen wir die Videoanforderung mit der HttpRequestConfig erstellt, und wir verarbeiten das empfangene Video mit dem SSAI-Plugin. Das SSAI-Plugin fügt das Video automatisch zur Brightcove-Videoansicht hinzu.

catalog.findVideoByID(videoId, httpRequestConfig, new VideoListener() {
            @Override
            public void onVideo(Video video) {
                   plugin.processVideo(video);
            }
        });

Sie werden feststellen, dass dieser Vorgang genau derselbe ist wie bei einer VOD SSAI. Der einzige Unterschied ist die verwendete adConfigId.

GRUNDLEGENDE ÄNDERUNGEN

Im SSAI-Plugin v6.9.0 mussten wir aufgrund eines Problems mit der gespeicherten Abspielposition beim Unterbrechen und Wiederaufnehmen des Live-Videos eine potenzielle Änderung vornehmen. Dies betrifft Sie nur, wenn Sie die Funktion Event.PLAYHEAD_POSITION Eigenschaft von entweder der EventType.PROGRESS oder EventType.AD_PROGRESS Veranstaltung.

Die Event.PLAYHEAD_POSITION enthielt in früheren Versionen die relative Abspielposition zur Anzeige oder zum Hauptinhalt, in Version 6.9.0 hat sie die absolute Abspielposition.

Lassen Sie es mich anhand eines Beispiels erklären. In der folgenden Abbildung haben wir ein VOD SSAI-Video mit einer Gesamtdauer von 43 Sekunden. Der Hauptinhalt dauert 15 Sekunden, und es gibt drei Anzeigen, einen Pre-Roll von 6 Sekunden, einen Mid-Roll von 14 Sekunden und einen Post-Roll von 8 Sekunden. Wenn wir mit der Wiedergabe des Mid-Rolls beginnen, beträgt die absolute Abspielkopfposition 11 Sekunden, aber die relative Abspielkopfposition zum Mid-Roll ist Null. Die Event.PLAYHEAD_POSITION Wert ist in früheren Versionen Null, in Version 6.9.0 beträgt er 11 Sekunden.

HINWEIS: Alle tatsächlichen Werte für die Abspielkopfposition werden im Brightcove-SDK in Millisekunden angegeben.

ssai-Fortschrittsablaufdiagramm

Andererseits haben wir auch eine neue Ereigniseigenschaft namens Event.PROGRESS_BAR_PLAYHEAD_POSITION die die relative Abspielkopfposition enthält. Dieser Name beschreibt seinen Zweck besser, der letztlich darin besteht, dem Benutzer über den Fortschrittsbalken die Abspielposition des abspielenden Blocks (Anzeige oder Inhalt) anzuzeigen. Wenn Sie sich jedoch auf die Event.PLAYHEAD_POSITION Wert, müssen Sie nur noch mit Event.PROGRESS_BAR_PLAYHEAD_POSITION stattdessen.

Die Event.ORIGINAL_PLAYHEAD_POSITION wurde aus Kompatibilitätsgründen nicht verändert und enthält nach wie vor die absolute Abspielkopfposition.

In der folgenden Tabelle sind die Änderungen zusammengefasst:

     
Ereignis-Eigenschaft Vor 6.9.0 6.9.0 und höher
Event.PLAYHEAD_POSITION Relative Abspielkopfposition Absolute Abspielkopfposition
Event.ORIGINAL_PLAYHEAD_POSITION Absolute Abspielkopfposition Absolute Abspielkopfposition
Event.PROGRESS_BAR_PLAYHEAD_POSITION K.A. Relative Abspielkopfposition

ÜBERLEGUNGEN BEIM ABHÖREN DES FORTSCHRITTSEREIGNISSES

Es gibt ein paar Dinge, die Sie beachten müssen, wenn Sie sich die EventType.PROGRESS Ereignis im SSAI-Plugin. Der Zeitpunkt, zu dem Sie Ihren Hörer hinzufügen, ist wichtig.

Zunächst möchte ich Ihnen einige Informationen über die Funktionen des Brightcove-SDK und des SSAI-Plugins geben.

1. Erstens, die EventType.PROGRESS wird ursprünglich von der ExoPlayerVideoDisplayComponent Klasse und die Event.PLAYHEAD_POSITION Eigenschaft hat die Abspielkopfposition, die von ExoPlayer abgerufen wird (ich nehme an, Sie verwenden ExoPlayer), was die absolute Abspielkopfposition im SSAI-Kontext ist.

2. Dann fängt das SSAI-Plugin die EventType.PROGRESS Ereignis und vergleicht die Position des Abspielkopfes mit der SSAI-Zeitleiste, um festzustellen, ob der Inhalt oder die Werbung abgespielt wird. In beiden Fällen berechnen wir die relative Abspielposition und fügen eine neue Event.PROGRESS_BAR_PLAYHEAD_POSITION Eigenschaft mit diesem Wert.

  • Wenn der Inhalt abgespielt wird, wird das Ereignis an die übrigen Zuhörer weitergegeben.
  • Wenn eine Anzeige abgespielt wird, stoppen wir die Weitergabe der EventType.PROGRESS Ereignis, und senden Sie die EventType.AD_PROGRESS mit den gleichen Eigenschaften.

3. Schließlich werden alle Hörer, die nach SSAIEventType.AD_DATA_READY emittiert wird, oder solche mit dem @Default Annotation erhält die EventType.PROGRESS Veranstaltung.

Aufgrund der Art und Weise, wie die EventType.PROGRESS verarbeitet wird, erhalten Sie je nachdem, wann Sie Ihren Hörer hinzufügen, möglicherweise nicht die erwarteten Werte. Wenn Sie zum Beispiel den EventType.PROGRESS Hörer vor dem SSAIEventType.AD_DATA_READY ausgegeben wird, wird Ihr Listener aufgerufen, bevor er vom SSAI-Plugin verarbeitet wird, so dass Sie nicht in der Lage sein werden, die Event.PROGRESS_BAR_PLAYHEAD_POSITION Wert.

ANMERKUNG: Dieses Problem tritt auch in älteren Versionen auf, aber anstatt die Event.PROGRESS_BAR_PLAYHEAD_POSITION Wert, der Event.PLAYHEAD_POSITION hat die absolute Abspielposition anstelle der erwarteten relativen Abspielposition (auch hier gilt, dass dies für ältere Versionen gilt).

ANMERKUNG: Dieses Problem tritt nicht auf, wenn Sie die  EventType.AD_PROGRESS Veranstaltung.

Für den Fall, dass Sie in diese Situation geraten, können Sie einige Dinge ausprobieren:

  1. Fügen Sie die @Default Bemerkung zu Ihrem Hörer.
  2. Fügen Sie Ihren Hörer nach SSAIEventType.AD_DATA_READY emittiert wird.

ADD THE @DEFAULT BEMERKUNG ZU IHREM HÖRER

Intern kommentieren wir bestimmte Hörer mit dem @Default Bemerkung. Dadurch warten alle Hörer mit Standardkommentar darauf, dass zuerst alle Hörer ohne Standardkommentar aufgerufen werden, bevor die Hörer mit Standardkommentar aufgerufen werden.

Durch Hinzufügen dieser Bemerkung zu Ihrer EventType.PROGRESS Listener, lassen Sie ihn warten, bis das nicht standardmäßige SSAI-Plugin EventType.PROGRESS Hörer verarbeitet das Ereignis. Der einzige Vorbehalt ist, dass sich dieses Verhalten ändern kann, wenn das SSAI-Plugin EventType.PROGRESS Hörer ist mit dem Attribut @Default Anmerkung in einer zukünftigen Version (ich sehe dies derzeit nicht vor).

Das Beispiel sieht wie folgt aus:

eventEmitter.on(EventType.PROGRESS, new EventListener() {
   @Default
   @Override
   public void processEvent(Event event) {
       int absolutePlayheadPosition = event.getIntegerProperty(Event.PLAYHEAD_POSITION);
       int relativePlayheadPosition = event.getIntegerProperty(Event.PROGRESS_BAR_PLAYHEAD_POSITION);
   }
});

FÜGEN SIE IHREN HÖRER NACH SSAIEVENTTYPE.AD_DATA_READY WIRD AUSGESTRAHLT

Alternativ können Sie Ihren Hörer auch nach der SSAIEventType.AD_DATA_READY Das garantiert, dass Ihr Listener aufgerufen wird, nachdem das SSAI-Plugin die Chance hatte, das Ereignis zu verarbeiten.

Das Beispiel sieht wie folgt aus:

eventEmitter.once(SSAIEventType.AD_DATA_READY, adDataReady -> {
   eventEmitter.on(EventType.PROGRESS, progressEvent -> {
       int absolutePlayheadPosition = progressEvent.getIntegerProperty(Event.PLAYHEAD_POSITION);
       int relativePlayheadPosition = progressEvent.getIntegerProperty(Event.PROGRESS_BAR_PLAYHEAD_POSITION);
   });
});

Es gibt jedoch einen Vorbehalt. Da die SSAIEventType.AD_DATA_READY Ereignis jedes Mal ausgelöst wird, wenn das SSAI-Video (Live und VOD) geöffnet wird, müssen Sie sicherstellen, dass Sie nicht Ihre EventType.``PROGRESS Hörer mehrfach.

Eine Möglichkeit, dies zu vermeiden, ist das Speichern des Tokens beim Hinzufügen der EventType.PROGRESS Ereignis-Listener für den Ereignis-Emitter und verwenden Sie ihn, um diesen Listener nach jedem SSAIEventType.AD_DATA_READY Ereignis. Zum Beispiel:

// Declare member variable
private int mCurrentProgressToken = -1;

// Code called every time a SSAI video is processed with the SSAI plugin
eventEmitter.once(SSAIEventType.AD_DATA_READY, adDataReady -> {
   if (mCurrentProgressToken != -1) {
       eventEmitter.off(EventType.PROGRESS, mCurrentProgressToken);
   }

   mCurrentProgressToken = eventEmitter.on(EventType.PROGRESS, progressEvent -> {
       int absolutePlayheadPosition = progressEvent.getIntegerProperty(Event.PLAYHEAD_POSITION);
       int relativePlayheadPosition = progressEvent.getIntegerProperty(Event.PROGRESS_BAR_PLAYHEAD_POSITION);
   });
});

ZUSAMMENFASSUNG

Das SSAI-Plugin 6.9.0 leistet die Schwerstarbeit, um Live SSAI zu unterstützen. Es gibt keine signifikanten Änderungen in der Plugin-API, die verwendet wird, um die Wiedergabe von Live SSAI-Streams im Vergleich zu VOD SSAI zu starten. Der schwierige Teil ist die Einrichtung Ihres Live SSAI-Streams und die Identifizierung der richtigen Ad-Config-Id, die Sie an das Plugin übergeben müssen. HttpRequestConfig wenn Sie die Kataloganfrage stellen.

Es gibt potenzielle Änderungen, über die Sie sich im Klaren sein müssen, aber wenn Sie erst einmal festgestellt haben, ob Sie betroffen sind, ist es sehr einfach, Ihren Code zu korrigieren. Und für den Fall, dass Sie von der EventType.PROGRESS Ereignis müssen Sie auch besonders darauf achten, wann Sie Ihren Progress Listener hinzufügen und überprüfen, ob Sie die erwarteten Werte erhalten.

Teilen Sie

Brightcove unterstützte den bekanntesten Automobilmarktplatz bei der Verwaltung seiner umfangreichen, älteren Videobibliothek und deren Monetarisierung...
Um die Markenintegrität zu wahren, benötigen Einzelhandelsmarken anpassbare Videoplayer, die es ihnen ermöglichen, die Farben, die Schriftart...
Savoir média bietet seinem Publikum einzigartige Videoinhalte

SIND SIE BEREIT, LOSZULEGEN?

Setzen Sie sich mit uns in Verbindung, um zu erfahren, wie wir Ihre Videomarketing-Bemühungen verbessern und Ihnen dabei helfen können, die gewünschten Ergebnisse und den gewünschten ROI zu erzielen.