Snapback

In qualità di publisher di video, potresti voler impedire agli spettatori di che cerca oltre gli annunci mid-roll. Quando un utente va oltre un'interruzione pubblicitaria, puoi riportarli all'inizio dell'interruzione pubblicitaria e poi tornare alla loro posizione di ricerca al termine dell'interruzione pubblicitaria. Questo è chiamata "snapback".

Osserva il diagramma seguente come esempio. Lo spettatore sta guardando un video e decide di andare dalla soglia dei 5 minuti fino al limite dei 15 minuti. C'è, tuttavia, un'interruzione pubblicitaria al contrassegno dei 10 minuti che vorresti prima di poter guardare i contenuti successivi:

Per visualizzare questa interruzione pubblicitaria:

  1. Controllare se l'utente ha eseguito una ricerca saltata oltre un'interruzione pubblicitaria non guardata. e, in questo caso, riportali all'interruzione pubblicitaria.
  2. Al termine dell'interruzione pubblicitaria, riportali alla ricerca originale.

Il diagramma ha il seguente aspetto:

Di seguito viene spiegato come implementare questo flusso di lavoro nell'SDK IMA DAI, come illustrato nella sezione AdvancedExample.

Impedire a una ricerca di lasciare un'interruzione pubblicitaria non guardata

Controlla se l'utente ha eseguito una ricerca successiva a un'interruzione pubblicitaria non guardata e, in questo caso, riportali all'interruzione pubblicitaria. Nell'SDK Android, utilizza l'oggetto PlayerControl per rilevare la ricerca. Quando l'utente esegue la ricerca, attiva il metodo onSeek() della SampleHlsVideoPlayerCallback implementato da SampleAdsWrapper. Questo metodo (presentato di seguito) controlla il cue point prima che l'utente ricercare il tempo. Se non viene riprodotta, vai all'inizio dell'interruzione pubblicitaria. invece del punto di ricerca desiderato iniziale, e salva la punto 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));
}

Riporta l'utente alla ricerca originale

Ora, quando ricevi un evento onAdBreakEnded, controlla se snapBackTime è impostata. In questo caso, porta l'utente a quel punto dello stream, perché l'annuncio l'interruzione appena vista è il risultato di uno snapshot:

@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;
}