Snapback

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

Ad esempio, consulta il diagramma riportato di seguito. Lo spettatore sta guardando un video e decide di andare dall'indicatore dei 5 minuti a quello dei 15 minuti. Tuttavia, c'è un'interruzione pubblicitaria in corrispondenza dell'indicatore dei 10 minuti che vuoi che i tuoi spettatori 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, ha il seguente aspetto:

Ecco come implementare questo flusso di lavoro nell'SDK IMA DAI, come fatto in AdvancedExample.

Impedire a una ricerca di interrompere la visione di un'interruzione pubblicitaria

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 la ricerca, attiva il metodo onSeek() dell'SampleHlsVideoPlayerCallback implementato da SampleAdsWrapper. Questo metodo (presentato di seguito) verifica 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, quindi 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));
}

Ripristinare la ricerca originale dell'utente

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