Lesezeichen

In diesem Leitfaden wird beschrieben, wie Sie Lesezeichen mit dem IMA DAI SDK bei Verwendung der dynamischen Anzeigenbereitstellung für Video-on-Demand-Streams implementieren. Hierbei wird von einer funktionierenden Implementierung der dynamischen Anzeigenbereitstellung ausgegangen, wie z. B. im Startleitfaden beschrieben.

Was ist Lesezeichen?

Lesezeichen ist die Möglichkeit, einen bestimmten Punkt im Inhaltsstream zu speichern und dann wieder dorthin zurückzukehren. Angenommen, ein Nutzer sieht sich Inhalte fünf Minuten lang an, verlässt den Videostream und kehrt dann zu ihm zurück. Durch Lesezeichen wird die Position des Nutzers im Stream gespeichert. So kann der Stream an der Stelle fortgesetzt werden, an der er unterbrochen wurde, und bietet so eine nahtlose Erfahrung für den Betrachter.

Interne Lesezeichen für die dynamische Anzeigenbereitstellung

Wenn Sie einen Stream für die dynamische Anzeigenbereitstellung als Lesezeichen speichern, müssen Sie die Stream-ID und die Zeit erfassen, zu der der Nutzer das Video verlässt. Wenn der Nutzer zurückkehrt, fordern Sie den Stream noch einmal an und suchen Sie nach der gespeicherten Zeit. Da jede Instanz des angeforderten Streams Werbeunterbrechungen mit unterschiedlicher Dauer haben kann, reicht es nicht aus, die Streamzeit zu speichern. Sie sollten eigentlich bei der gleichen Inhaltszeit weitermachen.

Konvertierungsmethoden zur Lösung

Das IMA DAI SDK umfasst mehrere Methoden, mit denen die Inhaltszeit für eine bestimmte Streamzeit und die Streamzeit für eine Inhaltszeit angefordert werden. Mit diesen Konvertierungsmethoden können Sie die mit einem Lesezeichen versehene Inhaltszeit speichern und dann die entsprechende Streamzeit in der neuen Instanz des Streams suchen. Hier ist der Ansatz einschließlich eines Links zu einer Beispiel-App, die eine funktionierende Lesezeichenimplementierung zeigt.

Lesezeichen speichern

Lesezeichen speichern, wenn die Aktivität pausiert ist.

- (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;
    ...
    }
  }
}

Lesezeichen werden geladen

Lesezeichen beim erneuten Anfordern eines Streams laden. Er ist Teil der Implementierung der VideoStreamPlayer-Schnittstelle.

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

Beispielanwendung

Beispiel-App