In qualità di editore di video, potresti voler impedire ai tuoi spettatori di andare avanti oltre gli annunci mid-roll. Quando un utente avanza oltre un'interruzione pubblicitaria, puoi riportarlo all'inizio dell'interruzione pubblicitaria e poi alla posizione che aveva raggiunto dopo che l'interruzione pubblicitaria è terminata. Questa funzionalità si chiama "ritorno".
Ad esempio, vedi il diagramma riportato di seguito. Lo spettatore sta guardando un video e decide di passare dal minuto 5 al minuto 15. Tuttavia, c'è un'interruzione pubblicitaria al minuto 10 che vuoi che guardino prima di poter guardare i contenuti successivi:
Per mostrare questa interruzione pubblicitaria, segui questi passaggi:
- Controlla se l'utente ha eseguito un avanzamento che ha saltato un'interruzione pubblicitaria non guardata e, in caso affermativo, riportalo all'interruzione pubblicitaria.
- Al termine dell'interruzione pubblicitaria, riporta l'utente alla posizione di avanzamento originale.
In forma di diagramma, la formula è la seguente:
Ecco come implementare questo flusso di lavoro nell'SDK IMA DAI, come fatto in AdvancedExample.
Impedire che una ricerca lasci un'interruzione pubblicitaria non visualizzata
Controlla se l'utente ha eseguito una ricerca che ha superato un'interruzione pubblicitaria non visualizzata
e, in caso affermativo, 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()
di
SampleHlsVideoPlayerCallback
implementato da SampleAdsWrapper
.
Questo metodo (presentato di seguito) controlla il cue point prima del tempo di ricerca dell'utente. Se non è stato riprodotto, cerca l'inizio dell'interruzione pubblicitaria
anziché il punto di ricerca iniziale desiderato e salva questo punto di ricerca
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 posizione di riproduzione originale
Ora, quando ricevi un evento onAdBreakEnded
, controlla se snapBackTime
è impostato. In questo caso, porta l'utente al punto dello stream in cui si trovava, perché la pausa pubblicitaria
che ha appena guardato è il risultato della funzionalità di ripristino:
@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;
}