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 ejemplo avanzado de iOS, usa la interacción del usuario con tu IU para detectar cuándo ejecutó una búsqueda. Conserva la hora de inicio de la búsqueda para verificar si se saltó una pausa publicitaria no reproducida en su búsqueda. Cuando el usuario suelte los controles de video, compara su hora actual con la hora de la pausa publicitaria más reciente. Si la pausa publicitaria se produce después de la hora de inicio de la búsqueda (lo que significa que el usuario la omitió) y aún no se reprodujo, regresa al usuario al inicio de la pausa publicitaria. Además, establece una marca de retroceso para verificarla más adelante en el controlador de finalización de la pausa publicitaria:

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

Regresa al punto de búsqueda original del usuario

En el controlador ad-break-ended, verifica si el corte anterior se reprodujo como resultado de un retroceso. Si es así, regresa al usuario al lugar al que intentó buscar inicialmente (siempre y cuando no haya sido la mitad de la pausa publicitaria que acaba de reproducirse):

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}