Pierwsze kroki z pakietem IMA DAI SDK

Pakiety IMA SDK ułatwiają integrację reklam multimedialnych z witrynami i aplikacjami. Pakiety IMA SDK mogą żądać reklam z dowolnego serwera reklam zgodnego z VAST i zarządzać odtwarzaniem reklam w aplikacjach. Dzięki pakietom IMA DAI SDK aplikacje wysyłają żądanie strumienia reklamy i treści wideo (VOD lub treści na żywo). Pakiet SDK zwraca następnie połączony strumień wideo, dzięki czemu nie musisz zarządzać przełączaniem się między reklamą a filmem z treściami w aplikacji.

Wybierz interesujące Cię rozwiązanie DAI

Wyświetlanie bloków reklamowych w ramach dynamicznego wstawiania reklam

Ten przewodnik pokazuje, jak odtwarzać strumień na żywo lub VOD z dynamicznym wstawianiem reklam za pomocą pakietu IMA DAI SDK na tvOS z odtwarzaczem wideo. Aby wyświetlić lub prześledzić zakończoną przykładową integrację, pobierz aplikację z przykładem obsługi strumieniowego (Obj C lub Swift).

Omówienie wyświetlania bloków reklamowych w ramach IMA DAI

Wdrożenie wyświetlania bloków reklamowych za pomocą pakietu IMA DAI SDK na potrzeby tvOS obejmuje 2 główne komponenty:

  • StreamRequest: obiekt definiujący żądanie strumienia do serwerów reklamowych Google. Aby włączyć obsługę podów, musisz utworzyć je za pomocą pliku IMAPodStreamRequest lub pliku IMAPodVODStreamRequest. Obie metody wymagają kodu sieci, a IMAPodStreamRequest wymaga też klucza zasobu niestandardowego. Klucz interfejsu API jest opcjonalny.

  • IMAStreamManager: obiekt obsługujący komunikację między strumieniem wideo a pakietem IMA DAI SDK, np. wysyła pingi śledzące i przekazuje zdarzenia strumienia do wydawcy.

Wymagania wstępne

Zanim zaczniesz, musisz mieć:

  • Xcode w wersji 13 lub nowszej.
  • CocoaPods (preferowana opcja), menedżer pakietów Swift lub pobrana kopia pakietu IMA DAI SDK na potrzeby tvOS.
  • Aplikacja na tvOS już skonfigurowana za pomocą pakietu IMA DAI SDK do odtwarzania strumieni wideo z reklamami DAI. Jeśli nie masz jeszcze takiej aplikacji, zalecamy użycie przykładu podstawowego DAI na platformie tvOS jako punktu wyjścia. Przykład podstawowy zawiera bazę kodu, do której odwołuje się ten przewodnik. Więcej informacji o wdrażaniu pakietu IMA DAI SDK znajdziesz w krótkim przewodniku.

Konfigurowanie zmiennych wyświetlania bloków reklamowych

Wszystkie zmiany potrzebne do obsługi podkategorii są wprowadzane w Swift za pomocą ViewController.swift lub w Objective-C za pomocą ViewController.m. Fragmenty kodu w tym przewodniku są domyślnie pisane w języku Swift. Pierwszym krokiem jest zaktualizowanie stałych zmiennych.

Oto stałe żądania strumienia podgrupy reklam, które należy dodać:

  • STREAM_URL (używany tylko w przypadku transmisji na żywo): adres URL strumienia wideo podany przez manipulującego plikiem manifestu lub partnera zewnętrznego korzystającego z dynamicznego wstawiania reklam. Zanim prześlesz żądanie, musisz w nim podać identyfikator strumienia dostarczony przez pakiet IMA DAI SDK. W tym przypadku adres URL strumienia zawiera obiekt zastępczy "[[STREAMID]]", który przed wysłaniem żądania jest zastępowany identyfikatorem strumienia.
  • NETWORK_CODE: kod sieci konta Ad Managera 360.
  • CUSTOM_ASSET_KEY (używany tylko w przypadku transmisji na żywo): klucz zasobu niestandardowego, który identyfikuje zdarzenie wyświetlania bloku reklamowego w usłudze Ad Manager 360. Może go utworzyć manipulator pliku manifestu lub zewnętrzny partner obsługujący wyświetlanie bloków reklamowych.
  • API_KEY (używany tylko w przypadku transmisji na żywo): opcjonalny klucz interfejsu API, który może być wymagany do pobrania identyfikatora strumienia z pakietu IMA DAI SDK.

Zmień sekcję zmiennej przykładu na taką:

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl =
    "https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
  static let networkCode = "51636543"
  static let customAssetKey = "google-sample"
  static let APIKey = ""
  static let backupStreamURLString =
    "http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"

  var adsLoader: IMAAdsLoader?
  ...

Utwórz żądanie pod strumienia na potrzeby transmisji na żywo lub VOD.

Obsługa poddomeny transmisji na żywo

Zmodyfikuj metodę requestStream, aby utworzyć żądanie podstreamu na żywo, tworząc instancję IMAPodStreamRequest.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodStreamRequest(
      networkCode: self.networkCode,
      customAssetKey: self.customAssetKey,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

Wyświetlanie bloków reklamowych w strumieniu VOD

Zmodyfikuj metodę requestStream, aby utworzyć żądanie strumienia pod VOD, tworząc instancję IMAPodVODStreamRequest.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodVODStreamRequest(
      networkCode: self.networkCode,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

Edytowanie i ustawianie adresu URL strumienia

Obsługa poddomeny transmisji na żywo

Zmodyfikuj metody IMAAdsLoaderDelegate, używając funkcji streamManager.streamId do pobrania identyfikatora strumienia. Następnie wstaw identyfikator strumienia w polu STREAM_URL, zastępując "[[STREAMID]]". Po wprowadzeniu tej zmiany możesz ustawić nowy adres URL strumienia za pomocą videoDisplay.loadStream().

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
    let loadedStreamUrl = URL(string:urlString)
    self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
    self.videoDisplay.play()
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

  ...

Wyświetlanie bloków reklamowych w strumieniu VOD

Zmodyfikuj metody IMAAdsLoaderDelegate, używając funkcji streamManager.streamId do pobrania identyfikatora strumienia. Następnie poproś o adres URL strumienia od dostawcy technologii wideo (VTP) i wywołaj funkcję IMAStreamManager.loadThirdPartyStream(), aby IMA załadowała adres URL strumienia i wszystkie napisy zwracane przez dostawcę TVP.

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    // 'vtpInterface' is a place holder for your own video technology partner
    // (VTP) API calls.
    let streamUrl = vtpInterface.requestStreamURL(streamID)
    self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

Czyszczenie komponentów IMA DAI

Po zakończeniu przesyłania żądań i wyświetlania reklam w strumieniu z dynamicznym wstawianiem reklam za pomocą pakietu IMA DAI SDK zalecamy usunięcie wszystkich zasobów po zakończeniu sesji Pod Serving. Wywołanie IMAStreamManager.destroy() służy do zatrzymywania odtwarzania strumienia, zatrzymywania śledzenia reklam i zwalniania wszystkich załadowanych zasobów strumienia.

Inne przykłady użycia pakietu SDK tvOS znajdziesz w przykładach na GitHubie.