Kapsül hizmeti DAI ile ayarlama

Platform seçin: HTML5 Android iOS tvOS Yayınla Roku

Bu kılavuzda, tvOS için IMA DAI SDK'yı bir video oynatıcıyla kullanarak DAI kapsül yayınlama canlı veya VOD akışının nasıl oynatılacağı gösterilmektedir. Tamamlanmış bir örnek entegrasyonu görüntülemek veya takip etmek için kapsül yayınlama örnek uygulamasını (Obj C veya Swift) indirin.

IMA DAI Kapsül Yayınlama'ya genel bakış

tvOS için IMA DAI SDK'yı kullanarak kapsül yayınlamayı uygulamak iki ana bileşenden oluşur:

  • StreamRequest: Google'ın reklam sunucularına yönelik bir akış isteğini tanımlayan nesne. Kapsül yayınlamayı etkinleştirmek için IMAPodStreamRequest veya IMAPodVODStreamRequest kullanılarak oluşturulmalıdır. Her iki yöntem de Ağ Kodu gerektirir ve IMAPodStreamRequest için ayrıca Özel Öğe Anahtarı gerekir. API anahtarı isteğe bağlıdır.

  • IMAStreamManager: Video akışı ile IMA DAI SDK'sı arasındaki iletişimi (ör. izleme ping'lerini tetikleme ve akış etkinliklerini yayıncıya yönlendirme) yöneten bir nesne.

Ön koşullar

Başlamadan önce aşağıdakilere ihtiyacınız vardır:

  • Xcode 13 veya sonraki sürümler.
  • IMA SDK'sını yükleme yöntemi:
  • DAI reklamları içeren video akışlarını oynatmak için IMA DAI SDK ile önceden ayarlanmış bir tvOS uygulaması. Böyle bir uygulamanız yoksa başlangıç noktası olarak tvOS DAI BasicExample'ı kullanmanızı öneririz. BasicExample, bu kılavuzda referans verilen kod tabanına sahiptir. IMA DAI SDK'yı nasıl uygulayacağınız hakkında daha fazla bilgi için Hızlı başlangıç kılavuzuna bakın.

Kapsül yayınlama değişkenlerinizi ayarlama

Kapsül yayınlama ile ilgili tüm değişiklikleri Swift'te ViewController.swift veya Objective-C'de ViewController.m içinde yapın. Bu kılavuzdaki snippet'ler varsayılan olarak Swift dilini kullanır. İlk adım, sabit değişkenleri güncellemektir.

Aşağıdaki reklam kapsülü akış isteği sabitlerini ekleyin:

  • STREAM_URL (Yalnızca canlı yayınlar için kullanılır): Kapsül yayınlama kullanan manifest manipülatörünüz veya üçüncü taraf iş ortağınız tarafından sağlanan video akışı URL'si. İstek göndermeden önce IMA DAI SDK tarafından sağlanan akış kimliğini girmeniz gerekir. Bu durumda akış URL'si, istekte bulunmadan önce akış kimliğiyle değiştirdiğiniz bir yer tutucu ("[[STREAMID]]") içerir.
  • NETWORK_CODE: Ad Manager 360 hesabınızın ağ kodu.
  • CUSTOM_ASSET_KEY (Yalnızca canlı yayınlar için kullanılır): Ad Manager 360'ta kapsül yayınlama etkinliğinizi tanımlayan özel öğe anahtarı. Manifest manipülatörünüz veya üçüncü taraf kapsül yayınlama iş ortağınız bunu oluşturabilir.
  • API_KEY (Yalnızca canlı yayınlar için kullanılır): IMA DAI SDK'sından akış kimliği almak için gerekebilen isteğe bağlı bir API anahtarı.

Örneğin değişken bölümünü aşağıdaki gibi değiştirin:

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl = ""
  static let networkCode = ""
  static let customAssetKey = ""
  static let APIKey = ""
  static let backupStreamURLString = ""

  var adsLoader: IMAAdsLoader?
  ...

Canlı veya VOD kapsül akışı isteği oluşturma

Canlı Yayın Kapsül Yayınlama

IMAPodStreamRequest örneğini oluşturarak canlı kapsül akışı isteği oluşturmak için requestStream yöntemini değiştirin.

  ...

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

  ...

VOD akışı kapsül yayınlama

IMAPodVODStreamRequest örneğini oluşturarak VOD kapsül akışı isteği oluşturmak için requestStream yöntemini değiştirin.

  ...

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

  ...

Yayın URL'sini düzenleme ve ayarlama

Canlı Yayın Kapsül Yayınlama

Akış kimliğini almak için streamManager.streamId kullanarak IMAAdsLoaderDelegate yöntemlerini değiştirin. Ardından, akış kimliğini STREAM_URL içine ekleyerek "[[STREAMID]]" değerini değiştirin. Bu değişikliği yaptıktan sonra videoDisplay.loadStream() kullanarak yeni yayın URL'sini ayarlayın.

  ...

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

  ...

VOD akışı kapsül yayınlama

Akış kimliğini almak için streamManager.streamId kullanarak IMAAdsLoaderDelegate yöntemlerini değiştirin. Ardından, video teknolojisi iş ortağınızdan (VTİO) bir akış URL'si isteyin ve IMA'nın akış URL'sini ve TVİO'nuz tarafından döndürülen tüm altyazıları yüklemesi için IMAStreamManager.loadThirdPartyStream() yöntemini çağırın.

  ...

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

IMA DAI öğelerini temizleme

IMA DAI SDK ile kapsül sunma akışında reklam isteme ve gösterme işlemlerini başarıyla tamamladığınızda, kapsül sunma oturumu tamamlandıktan sonra tüm kaynakları temizlemenizi öneririz. Canlı yayın oynatmayı durdurmak, tüm reklam izlemeyi durdurmak ve yüklenen tüm canlı yayın öğelerini serbest bırakmak için IMAStreamManager.destroy() yöntemini çağırın.

tvOS SDK'nın kullanıldığı diğer örnekleri görmek için GitHub'daki örneklere bakın.