Cómo volver a una pausa publicitaria omitida

Selecciona la plataforma: HTML5 Android iOS tvOS Roku

Como publicador de videos, es posible que quieras evitar que los usuarios adelanten los anuncios durante el video. Cuando un usuario busca más allá de una pausa publicitaria, puedes llevarlo de regreso al inicio de esa pausa y, luego, regresarlo a su ubicación de búsqueda una vez que se haya completado esa pausa. Esta función se llama "recuperación".

Como ejemplo, consulta el siguiente diagrama. El usuario está mirando un video y decide adelantar desde el minuto 5 hasta el minuto 15. Sin embargo, hay una pausa publicitaria en el minuto 10 que quieres que miren antes de poder ver el contenido después de ella:

Para mostrar esta pausa publicitaria, sigue estos pasos:

  1. Comprueba si el usuario realizó una búsqueda que omitió una pausa publicitaria sin mirar y, si es así, llévalo de regreso a la pausa publicitaria.
  2. Una vez que finalice la pausa publicitaria, regrésalos a su búsqueda original.

En forma de diagrama, se ve así:

A continuación, se explica cómo implementar este flujo de trabajo en el SDK de DAI de IMA, como se hace en AdvancedExample.

Evita que se omita una pausa publicitaria sin mirar

Comprueba si el usuario realizó una búsqueda que pasó una pausa publicitaria sin mirar y, si es así, llévalo de vuelta a la pausa publicitaria. En el SDK de Android, usa el objeto PlayerControl para detectar la búsqueda. Cuando el usuario busque, activa el método onSeek() del SampleHlsVideoPlayerCallback implementado por SampleAdsWrapper. Ese método (que se presenta a continuación) verifica el punto de referencia antes del tiempo de búsqueda del usuario. Si no se reprodujo, busca el inicio de esa pausa publicitaria en lugar del punto de búsqueda deseado inicial y guarda ese punto de búsqueda deseado en 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));
}

Regresa al punto de búsqueda original del usuario

Ahora, cuando recibas un evento onAdBreakEnded, verifica si snapBackTime está configurado. Si es así, lleva al usuario a ese punto de la transmisión, ya que la pausa publicitaria que acaba de mirar fue el resultado de la función de recuperación:

@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;
}