Zapisywanie i wczytywanie zakładek strumienia reklam

Wybierz platformę: HTML5 Android iOS tvOS Roku

Z tego przewodnika dowiesz się, jak zaimplementować dodawanie do zakładek za pomocą pakietu IMA DAI SDK podczas korzystania z dynamicznego wstawiania reklam (DAI) w przypadku strumieni wideo na żądanie (VOD). Zakładamy, że masz działającą implementację IMA DAI, taką jak ta przedstawiona w artykule Pierwsze kroki.

Co to jest dodawanie do zakładek?

Tworzenie zakładek to możliwość oznaczenia konkretnego momentu podczas strumieniowania zawartości i powrócenia do niego. Załóżmy, że użytkownik obejrzał pięć minut filmu, zamknął strumień wideo, a potem do niego powrócił. Funkcja tworzenia zakładek zapisuje postęp oglądania treści, dzięki czemu użytkownik może wygodnie wznowić odtwarzanie.

Zakładki DAI w GA4

Podczas dodawania do zakładek strumienia DAI musisz zarejestrować identyfikator strumienia i czas, gdy użytkownik opuści film. Gdy użytkownik wróci, ponownie poproś o strumień i przejdź do zapisanego momentu. Każda instancja żądanego strumienia może zawierać przerwy na reklamy o różnym czasie trwania, więc samo zapisanie czasu strumienia nie wystarczy. W rzeczywistości chcesz kontynuować od tego samego momentu.

Metody konwersji na ratunek

Pakiet IMA DAI SDK udostępnia parę metod do wysyłania żądań czasu treści dla danego czasu strumieniaczasu strumienia dla danego czasu treści. Dzięki tym metodom konwersji możesz zapisać czas treści dodanych do zakładek, a następnie przejść do odpowiedniego czasu transmisji w nowej instancji transmisji. Poniżej znajdziesz opis tego podejścia oraz link do przykładowej aplikacji, która pokazuje działającą implementację zakładek.

Zapisywanie zakładek

Zapisz zakładkę, gdy aktywność jest wstrzymana.

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

Wczytuję zakładki

Załaduj zakładkę, gdy ponownie zażądasz strumienia. Jest to część implementacji interfejsu 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
    }
  }

Przykładowa aplikacja

Przykładowa aplikacja