Cómo comenzar a usar el SDK de IMA de DAI

Los SDKs de IMA facilitan la integración de anuncios multimedia en tus sitios web y apps. Los SDKs de IMA pueden solicitar anuncios de cualquier servidor de anuncios que cumpla con VAST y administrar la reproducción de anuncios en tus apps. Con los SDKs de DAI de IMA, las apps realizan una solicitud de transmisión de anuncios y videos de contenido, ya sea VOD o contenido en vivo. Luego, el SDK muestra una transmisión de video combinada para que no tengas que administrar el cambio entre el video de anuncios y el de contenido dentro de tu app.

Selecciona la solución de DAI que te interesa

DAI de publicación de grupos de anuncios

En esta guía, se muestra cómo reproducir una transmisión en vivo o de VOD de la Publicación de grupos de anuncios de DAI con el SDK de IMA DAI para tvOS con un reproductor de video simple. Si deseas seguir el proceso con una muestra completa, descarga la app de ejemplo de Pod Serving (Obj C o Swift).

Descripción general de la Publicación de grupos de anuncios de DAI de IMA

La implementación de la publicación de grupos con el SDK de DAI de IMA para tvOS implica dos componentes principales:

  • StreamRequest: Es un objeto que define una solicitud de transmisión a los servidores de publicidad de Google. Se debe crear con IMAPodStreamRequest o IMAPodVODStreamRequest para habilitar la entrega de Pods. Ambos métodos requieren un código de red y IMAPodStreamRequest también necesita una clave de activo personalizado. Una clave de API es opcional.

  • IMAStreamManager: Es un objeto que controla la comunicación entre la transmisión de video y el SDK de DAI de IMA, como activar pings de seguimiento y reenviar eventos de transmisión al publicador.

Requisitos previos

Antes de comenzar, necesitas lo siguiente:

  • Xcode 13 o una versión posterior
  • CocoaPods (preferido), Swift Package Manager o una copia descargada del SDK de IMA DAI para tvOS
  • Una app para tvOS ya configurada con el SDK de DAI de IMA para reproducir transmisiones de video con anuncios de DAI Si aún no tienes una app de este tipo, te recomendamos que uses BasicExample de DAI de tvOS como punto de partida. BasicExample tiene la base de código a la que se hace referencia en esta guía. Para obtener más información sobre cómo implementar el SDK de IMA DAI, consulta la guía de inicio rápido.

Configura las variables de publicación de grupos de anuncios

Todos los cambios necesarios para la publicación de pods se realizan en ViewController.swift en Swift o ViewController.m en Objective-C. En los fragmentos de esta guía, de forma predeterminada, se usa el lenguaje Swift. El primer paso es actualizar las variables constantes.

Estas son las constantes de solicitud de flujo de grupos de anuncios que se deben agregar:

  • STREAM_URL (Solo se usa para transmisiones en vivo): Es la URL de transmisión de video que proporciona el manipulador de manifiestos o el socio externo con la publicación de grupos. Debería requerir que insertes el ID de transmisión que proporciona el SDK de IMA DAI antes de realizar una solicitud. En este caso, la URL de la transmisión incluye un marcador de posición, "[[STREAMID]]", que se reemplaza por el ID de la transmisión antes de realizar una solicitud.
  • NETWORK_CODE: Es el código de red de tu cuenta de Ad Manager 360.
  • CUSTOM_ASSET_KEY (Solo se usa para transmisiones en vivo): Es la clave de activo personalizado que identifica tu evento de publicación de grupos de anuncios en Ad Manager 360. Tu manipulador de manifiestos o tu socio de publicación de pods de terceros pueden crearlo.
  • API_KEY (Solo se usa para transmisiones en vivo): Es una clave de API opcional que se puede requerir para recuperar un ID de transmisión desde el SDK de DAI de IMA.

Cambia la sección de variables del ejemplo para que coincida con lo siguiente:

...
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?
  ...

Crea una solicitud de transmisión continua de grupos de anuncios en vivo o de VOD

Publicación de grupos de anuncios de transmisión en vivo

Crea una instancia de IMAPodStreamRequest para modificar el método requestStream y crear una solicitud de transmisión continua de pods en vivo.

  ...

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

  ...

Publicación de grupos de anuncios de transmisión de VOD

Crea una instancia de IMAPodVODStreamRequest para modificar el método requestStream y crear una solicitud de transmisión de pod de VOD.

  ...

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

  ...

Edita y configura la URL de transmisión

Publicación de grupos de anuncios de transmisión en vivo

Modifica los métodos IMAAdsLoaderDelegate y usa streamManager.streamId para obtener el ID de transmisión. Luego, inserta el ID de flujo en STREAM_URL y reemplaza "[[STREAMID]]". Una vez que se realice este cambio, se puede establecer la nueva URL de transmisión con 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
  }

  ...

Publicación de grupos de anuncios de transmisión de VOD

Modifica los métodos IMAAdsLoaderDelegate y usa streamManager.streamId para obtener el ID de transmisión. Luego, solicita una URL de transmisión a tu socio de tecnología de video (VTP) y llama a IMAStreamManager.loadThirdPartyStream() para que IMA cargue la URL de transmisión y los subtítulos que devuelva tu 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
  }

Eso es todo. Ahora solicitas y muestras anuncios en una transmisión de publicación de grupos con el SDK de DAI de IMA para tvOS. Para ver otros ejemplos del uso del SDK de IMA DAI, consulta los ejemplos en GitHub.