Favoritos

En esta guía, se muestra cómo implementar favoritos con el SDK de DAI de IMA cuando se usa la inserción de anuncios dinámicos (DAI) para transmisiones de video on demand (VOD). De este modo, se da por sentado que hay una implementación de DAI de IMA que funciona, como la que se presenta en Comenzar.

¿Qué es agregar a favoritos?

Agregar a favoritos es la capacidad de guardar y, luego, volver a un punto específico de la transmisión de contenido. Supongamos que un usuario mira cinco minutos de contenido, abandona la transmisión de video por Internet y, luego, regresa a ella. Los favoritos guardan la posición del usuario en la transmisión para que pueda retomarla desde donde la dejó, lo que le brinda una experiencia fluida al usuario.

Funcionamiento interno de favoritos de la DAI

Cuando agregues una transmisión de DAI a favoritos, debes registrar el ID de transmisión y la hora a la que el usuario abandona el video. Cuando el usuario regrese, vuelve a solicitar la transmisión y busca el tiempo ahorrado. Dado que cada instancia de la transmisión solicitada puede tener pausas publicitarias de diferentes duraciones, el hecho de guardar el tiempo de transmisión no funcionará. Lo que realmente debes hacer es continuar desde el mismo tiempo de contenido.

Métodos de conversión al rescate

El SDK de IMA de DAI proporciona un par de métodos para solicitar el tiempo de transmisión de un tiempo de transmisión determinado y el tiempo de transmisión de un tiempo de contenido determinado. Con estos métodos de conversión, puedes almacenar el tiempo de contenido agregado a favoritos y, luego, buscar el tiempo de transmisión correspondiente en la instancia nueva de la transmisión. A continuación, se describe el enfoque, que incluye un vínculo a una app de ejemplo que muestre una implementación de favoritos en funcionamiento.

Cómo guardar favoritos

Guardar un favorito cuando la actividad esté en pausa

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];
  [self.contentPlayer pause];
  // Ignore this if you're presenting a modal view (e.g. in-app clickthrough).
  if ([self.navigationController.viewControllers indexOfObject:self] ==
      NSNotFound) {
    NSTimeInterval contentTime =
        [self.streamManager contentTimeForStreamTime:CMTimeGetSeconds(
            self.contentPlayer.currentTime)];
    self.video.savedTime = contentTime;
    ...
    }
  }
}

Cargando favoritos

Carga el favorito cuando vuelvas a solicitar una transmisión. Es parte de la implementación de la interfaz VideoStreamPlayer.

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  ...
  case kIMAAdEvent_STREAM_LOADED: {
    if (self.video.savedTime > 0) {
      NSTimeInterval streamTime =
          [self.streamManager streamTimeForContentTime:self.video.savedTime];
      [self.IMAVideoDisplay.playerItem
          seekToTime:CMTimeMakeWithSeconds(streamTime, NSEC_PER_SEC)];
      self.video.savedTime = 0;
    }
  }
}

App de ejemplo

App de ejemplo