Salvare e caricare i preferiti degli stream di annunci

Seleziona la piattaforma: HTML5 Android iOS tvOS Roku

Questa guida mostra come implementare l'aggiunta ai preferiti utilizzando l'SDK IMA DAI quando si utilizza l'inserimento di annunci dinamici (DAI) per gli stream video on demand (VOD). Ciò presuppone un'implementazione di IMA DAI funzionante, come quella presentata in Guida introduttiva.

Che cos'è l'aggiunta ai preferiti?

Il bookmarking consente di salvare e ritornare successivamente a un punto specifico dello streaming di contenuti. Supponiamo che un utente guardi cinque minuti di contenuti, lasci lo stream video e poi lo riprenda. Bookmarking salva la posizione dell'utente nello stream e riprende la riproduzione dal punto di interruzione, per garantire allo spettatore un'esperienza perfettamente integrata.

Funzionalità di bookmarking della DAI

Quando aggiungi un flusso DAI ai preferiti, devi registrare l'ID flusso e l'ora in cui l'utente abbandona il video. Quando l'utente torna, richiedi di nuovo lo stream e cerca il punto in cui aveva interrotto la visione. Poiché ogni istanza dello stream richiesto può avere interruzioni pubblicitarie di durata diversa, il semplice salvataggio dell'ora dello stream non funzionerà. Quello che vuoi fare è continuare dallo stesso tempo dei contenuti.

Metodi di conversione in soccorso

L'SDK IMA DAI fornisce una coppia di metodi per richiedere l'ora dei contenuti per una determinata ora dello stream e l'ora dello stream per una determinata ora dei contenuti. Utilizzando questi metodi di conversione, puoi memorizzare il tempo dei contenuti aggiunto ai preferiti e poi cercare il tempo dello stream corrispondente nella nuova istanza dello stream. Ecco l'approccio, incluso un link a un'app di esempio che mostra un'implementazione di aggiunta ai preferiti funzionante.

Salvataggio dei preferiti

Salva un segnalibro quando l'attività è in pausa.

Objective-C

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];
  [self.contentPlayer pause];
  // Ignore this if we're presenting a modal view (e.g. in-app clickthrough).
  if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
    // Don't save bookmark if we're playing a live stream.
    if (self.video.streamType != StreamTypeLive) {
      NSTimeInterval contentTime = [self.streamManager
          contentTimeForStreamTime:CMTimeGetSeconds(self.contentPlayer.currentTime)];
      [self.delegate videoViewController:self didReportSavedTime:contentTime forVideo:self.video];
    }

Swift

override func viewWillDisappear(_ animated: Bool) {
  super.viewWillDisappear(animated)
  contentPlayer.pause()
  if isMovingFromParent {
    // Only save bookmark if we're playing a VOD stream.
    if let vodStream = stream as? VODStream, let streamManager = streamManager {
      let contentTime = streamManager.contentTime(
        forStreamTime: contentPlayer.currentTime().seconds)
      if contentTime.isFinite, contentTime > 0 {
        delegate?.videoViewController(self, didReportBookmarkedTime: contentTime, for: vodStream)
      }
    }
    if trackingContent {
      removeContentPlayerObservers()
    }
    streamManager?.destroy()
    adsLoader?.contentComplete()
    streamManager = nil
    adsLoader = nil
  }
}

Caricamento dei preferiti in corso…

Caricare il segnalibro quando viene richiesta nuovamente una trasmissione. Fa parte dell'implementazione dell'interfaccia VideoStreamPlayer.

Objective-C

case kIMAAdEvent_STREAM_LOADED: {
  if (self.video.streamType == StreamTypeVOD) {
    [self addContentPlayerObservers];
    if (self.video.savedTime > 0) {
      NSTimeInterval streamTime =
          [self.streamManager streamTimeForContentTime:self.video.savedTime];
      [self.IMAVideoDisplay seekStreamToTime:streamTime];
      self.video.savedTime = 0;
    }
  }

Swift

case .STREAM_LOADED:
  guard let stream else { return }
  addContentPlayerObservers()
  if let vodStream = stream as? VODStream, vodStream.bookmarkTime > 0 {
    bookmarkStreamTime = streamManager.streamTime(forContentTime: vodStream.bookmarkTime)
    if let time = bookmarkStreamTime {
      pendingBookmarkSeek = true
      logMessage(
        "STREAM_LOADED: Bookmark pending for contentTime: \(String(format: "%.2f", vodStream.bookmarkTime)) (streamTime: \(String(format: "%.2f", time)))"
      )
      vodStream.bookmarkTime = 0
    }
  }

App di esempio

App di esempio