En tant qu'éditeur de vidéos, vous pouvez empêcher les spectateurs de passer vos annonces mid-roll. Lorsqu'un utilisateur passe une coupure publicitaire, vous pouvez le ramener au début de cette coupure, puis le renvoyer à l'emplacement qu'il avait sélectionné une fois la coupure publicitaire terminée. Cette fonctionnalité est appelée "retour rapide".
Pour en savoir plus, consultez le diagramme ci-dessous. Un spectateur regarde une vidéo et décide de passer de 5 à 15 minutes. Cependant, une coupure publicitaire est prévue à 10 minutes et vous souhaitez qu'il la regarde avant de pouvoir visionner le contenu qui suit :

Pour afficher cette coupure publicitaire, procédez comme suit :
- Vérifiez si l'utilisateur a passé une coupure publicitaire non visionnée. Si c'est le cas, ramenez-le à cette coupure.
- Une fois la coupure publicitaire terminée, renvoyez-le à l'emplacement qu'il avait sélectionné.
Voici le diagramme correspondant :

Voici comment implémenter ce workflow dans le SDK IMA DAI, comme dans AdvancedExample.
Empêcher un utilisateur de passer une coupure publicitaire sans la regarder
Vérifiez si l'utilisateur a passé une coupure publicitaire non visionnée. Si c'est le cas, ramenez-le à cette coupure.
Dans le SDK Android, utilisez l'objet PlayerControl pour détecter la sélection d'un point précis de la vidéo.
Lorsque l'utilisateur sélectionne un point précis de la vidéo, déclenchez la méthode onSeek() de SampleHlsVideoPlayerCallback implémentée par SampleAdsWrapper.
Cette méthode (présentée ci-dessous) vérifie le point de repère avant l'heure de sélection de l'utilisateur. S'il n'a pas été visionné, accédez au début de cette coupure publicitaire au lieu du point de sélection initial souhaité, et enregistrez ce point de sélection souhaité dans 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));
}
Ramener l'utilisateur à l'emplacement qu'il avait sélectionné
Lorsque vous recevez un événement onAdBreakEnded, vérifiez si snapBackTime est défini. Si c'est le cas, redirigez l'utilisateur vers ce point du flux, car la coupure publicitaire qu'il vient de regarder est le résultat d'un retour rapide :
@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;
}