Snapback

In qualità di publisher di video, puoi impedire agli spettatori di guardare oltre gli annunci mid-roll. Quando un utente cerca di andare oltre un'interruzione pubblicitaria, puoi riportarlo all'inizio dell'interruzione e riportarlo alla posizione di ricerca al termine dell'interruzione. Questa funzione è chiamata "snapback".

Come esempio, vedi il diagramma seguente. Lo spettatore sta guardando un video e decide di andare dall'indicatore dei 5 minuti a quello dei 15 minuti. Tuttavia, è presente un'interruzione pubblicitaria in corrispondenza dell'indicatore dei 10 minuti in cui vuoi che guardino prima che possano guardare i contenuti successivi:

Per mostrare questa interruzione pubblicitaria, svolgi i seguenti passaggi:

  1. Controlla se l'utente ha eseguito una ricerca che ha superato un'interruzione pubblicitaria non guardata e, in questo caso, riportalo all'interruzione pubblicitaria.
  2. Al termine dell'interruzione pubblicitaria, riporta l'utente alla ricerca originale.

In forma di diagramma, l'aspetto è simile al seguente:

Di seguito è riportata la procedura per implementare questo flusso di lavoro nell'SDK IMA di Android, come indicato in AdvancedExample.

Impedire che una ricerca lasci un'interruzione pubblicitaria non guardata

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

Riportare l'utente alla ricerca originale

Ora, quando ricevi un evento onAdBreakEnded, controlla se snapBackTime è impostato. In tal caso, indirizza l'utente a quel punto dello stream, perché l'interruzione pubblicitaria che ha appena guardato è 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;
}