En tant qu'éditeur de vidéos, vous pouvez empêcher vos spectateurs de passer les annonces mid-roll. Lorsqu'un utilisateur passe une coupure publicitaire en sélectionnant un point précis de la vidéo, vous pouvez le ramener au début de cette coupure, puis le renvoyer à cet emplacement, une fois la coupure publicitaire terminée. Cette fonctionnalité est appelée "retour rapide".
Par exemple, consultez le diagramme ci-dessous. Votre spectateur regarde une vidéo et décide de passer de la 5e à la 15e minute. Toutefois, il y a une coupure publicitaire à 10 minutes que vous souhaitez qu'ils regardent avant de pouvoir regarder le contenu qui suit :
Pour afficher cet emplacement publicitaire, procédez comme suit :
- Vérifiez si l'utilisateur a effectué une recherche qui a sauté une coupure publicitaire non regardée et, le cas échéant, ramenez-le à la coupure publicitaire.
- Une fois la coupure publicitaire terminée, renvoyez-le à l'emplacement de la vidéo qu'il avait sélectionné.
Sous forme de diagramme, cela se présente comme suit :
Voici comment implémenter ce workflow dans le SDK IMA DAI, comme dans AdvancedExample.
Empêcher une avance rapide de laisser une coupure publicitaire non regardée
Vérifiez si l'utilisateur a effectué une recherche qui a dépassé une coupure publicitaire non regardée et, le cas échéant, ramenez-le à la coupure publicitaire.
Dans le SDK Android, utilisez l'objet PlayerControl
pour détecter la recherche.
Lorsque l'utilisateur effectue une recherche, 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 le temps de recherche de l'utilisateur. Si elle n'a pas été lue, revenez au début de la coupure publicitaire au lieu du point de recherche initial souhaité, et enregistrez ce point de recherche 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 à la position de recherche d'origine
Désormais, 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 le bloc d'annonces qu'il vient de regarder est le résultat d'un retour en arrière :
@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;
}