Als Videoverleger möchtest du möglicherweise verhindern, dass Zuschauer deine Mid-Roll-Anzeigen überspringen. Wenn ein Nutzer eine Werbeunterbrechung überspringt, kannst du ihn an den Beginn dieser Werbeunterbrechung zurückbringen und ihn dann nach Abschluss der Werbeunterbrechung zu seiner Suchposition zurückleiten. Diese Funktion wird als „Snapback“ bezeichnet.
Ein Beispiel sehen Sie im Diagramm unten. Ein Zuschauer sieht sich ein Video an und beschließt, von der 5‑Minute zur 15‑Minute zu springen. Bei der 10-Minuten-Marke gibt es jedoch eine Werbeunterbrechung, die sich die Zuschauer ansehen müssen, bevor sie sich den Content danach ansehen können:
So zeigen Sie diese Werbeunterbrechung an:
- Prüfe, ob der Nutzer eine Suche durchgeführt hat, bei der eine nicht angesehene Werbeunterbrechung übersprungen wurde. Wenn ja, führe ihn zur Werbeunterbrechung zurück.
- Nach der Werbeunterbrechung kehren sie zur ursprünglichen Suchposition zurück.
In Diagrammform sieht das so aus:
So implementieren Sie diesen Workflow im IMA DAI SDK, wie im AdvancedExample beschrieben.
Verhindern, dass eine Werbeunterbrechung durch das Vorspulen nicht angesehen wird
Prüfe, ob der Nutzer eine Suche durchgeführt hat, die über eine nicht angesehene Werbeunterbrechung hinausging. Wenn ja, leite ihn zur Werbeunterbrechung zurück.
Verwenden Sie im Android SDK das PlayerControl
-Objekt, um Suchvorgänge zu erkennen.
Wenn der Nutzer sucht, lösen Sie die onSeek()
-Methode des von SampleAdsWrapper
implementierten SampleHlsVideoPlayerCallback
aus.
Bei dieser Methode (siehe unten) wird der Cuepoint vor der Suchzeit des Nutzers geprüft. Wenn sie nicht abgespielt wurde, suche stattdessen den Anfang dieser Werbeunterbrechung auf und speichere den gewünschten Suchpunkt in snapBackTime
.
@Override
public void onSeek(int timeMillis) {
double timeToSeek = timeMillis;
if (streamManager != null) {
CuePoint cuePoint =
streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
if (cuePoint != null && !cuePoint.isPlayed()) {
snapBackTime = timeToSeek / 1000.0; // Update snapback time.
// Missed cue point, so snap back to the beginning of cue point.
timeToSeek = cuePoint.getStartTime() * 1000;
videoPlayer.seek(Math.round(timeToSeek));
videoPlayer.setCanSeek(false);
return;
}
}
videoPlayer.seek(Math.round(timeToSeek));
}
Den Nutzer zur ursprünglichen Position zurückbringen
Wenn Sie jetzt ein onAdBreakEnded
-Ereignis erhalten, prüfen Sie, ob snapBackTime
festgelegt ist. Wenn ja, leite den Nutzer zu dieser Stelle im Stream weiter, da die Werbeunterbrechung, die er sich gerade angesehen hat, das Ergebnis von Snapback war:
@Override
public void onAdBreakEnded() {
// Re-enable player controls.
videoPlayer.setCanSeek(true);
videoPlayer.enableControls(true);
if (snapBackTime > 0) {
videoPlayer.seek(Math.round(snapBackTime * 1000));
}
snapBackTime = 0;
}