Configurar o SDK do IMA para DAI

Os SDKs do IMA facilitam a integração de anúncios multimídia aos seus sites e apps. Os SDKs do IMA podem solicitar anúncios de qualquer servidor de anúncios compatível com VAST e gerenciar a reprodução de anúncios nos seus apps. Com os SDKs de DAI do IMA, os apps fazem uma solicitação de stream para anúncios e vídeos de conteúdo, sejam eles VOD ou ao vivo. Em seguida, o SDK retorna um stream de vídeo combinado para que você não precise gerenciar a troca entre o anúncio e o vídeo de conteúdo no app.

Selecione a solução de DAI que você quer usar

DAI de veiculação de conjunto

Este guia mostra como reproduzir um stream ao vivo ou VOD de veiculação de conjunto DAI usando o SDK de DAI do IMA para tvOS com um player de vídeo. Para conferir ou seguir um exemplo de integração concluído, baixe o app de exemplo Pod Serving (Obj C ou Swift).

Visão geral da Veiculação de conjunto DAI da IMA

A implementação da Veiculação de conjunto usando o SDK DAI do IMA para tvOS envolve dois componentes principais:

  • StreamRequest: um objeto que define uma solicitação de stream para servidores de publicidade do Google. Precisa ser criado usando IMAPodStreamRequest ou IMAPodVODStreamRequest para ativar a veiculação de pods. Os dois métodos exigem um código de rede, e IMAPodStreamRequest também precisa de uma chave de recurso personalizada. Uma chave de API é opcional.

  • IMAStreamManager: um objeto que processa a comunicação entre o stream de vídeo e o SDK do IMA DAI, como o disparo de pings de rastreamento e o encaminhamento de eventos de stream para o editor.

Pré-requisitos

Antes de começar, os seguintes itens são necessários:

  • Xcode 13 ou versões mais recentes.
  • CocoaPods (preferencial), Gerenciador de pacotes do Swift ou uma cópia baixada do SDK da DAI do IMA para tvOS.
  • Um app tvOS já configurado com o SDK DAI do IMA para reproduzir streams de vídeo com anúncios de DAI. Se você ainda não tiver um app assim, recomendamos usar o tvOS DAI BasicExample como um ponto de partida. O BasicExample tem a base de código referenciada neste guia. Para mais informações sobre como implementar o SDK DAI do IMA, consulte o guia de início rápido.

Configurar as variáveis de veiculação de conjunto

Todas as mudanças necessárias para a exibição de pods são feitas em ViewController.swift em Swift ou ViewController.m em Objective-C. Os snippets neste guia usam a linguagem Swift por padrão. A primeira etapa é atualizar as variáveis constantes.

Confira as constantes de solicitação de stream de bloco de anúncios que precisam ser adicionadas:

  • STREAM_URL (usado apenas em transmissões ao vivo): o URL de stream de vídeo fornecido pelo manipulador de manifesto ou parceiro terceirizado usando a veiculação de conjunto. Ele deve exigir que você insira o ID de stream fornecido pelo SDK do IMA DAI antes de fazer uma solicitação. Nesse caso, o URL do stream inclui um marcador de posição, "[[STREAMID]]", que é substituído pelo ID do stream antes de fazer uma solicitação.
  • NETWORK_CODE: o código de rede da sua conta do Ad Manager 360.
  • CUSTOM_ASSET_KEY (usada somente em transmissões ao vivo): a chave de recurso personalizada que identifica seu evento de veiculação de pods no Ad Manager 360. Ele pode ser criado pelo gerenciador de manifesto ou por um parceiro terceirizado de veiculação de pods.
  • API_KEY (usada apenas em transmissões ao vivo): uma chave de API opcional que pode ser necessária para recuperar um ID de transmissão do SDK do IMA DAI.

Mude a seção de variáveis do exemplo para corresponder ao seguinte:

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

  var adsLoader: IMAAdsLoader?
  ...

Criar uma solicitação de stream de podcast ao vivo ou de VOD

Disponibilização de pods de transmissões ao vivo

Modifique o método requestStream para criar uma solicitação de transmissão de pod ativo instanciando 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)
  }

  ...

Veiculação de conjunto de stream de VOD

Modifique o método requestStream para criar uma solicitação de stream de pod de VOD instanciando 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)
  }

  ...

Editar e definir o URL da transmissão

Disponibilização de pods de transmissões ao vivo

Modifique os métodos IMAAdsLoaderDelegate usando streamManager.streamId para receber o ID do fluxo. Em seguida, insira o ID do fluxo em STREAM_URL, substituindo "[[STREAMID]]". Depois que essa mudança for feita, o novo URL de transmissão poderá ser definido usando 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
  }

  ...

Veiculação de conjunto de stream de VOD

Modifique os métodos IMAAdsLoaderDelegate usando streamManager.streamId para receber o ID do fluxo. Em seguida, peça um URL de stream ao seu parceiro de tecnologia de vídeo (VTP) e chame IMAStreamManager.loadThirdPartyStream() para que a IMA carregue o URL de stream e as legendas retornadas pelo seu 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
  }

Limpar recursos da DAI da IMA

Quando você terminar de solicitar e exibir anúncios em um fluxo de veiculação de pod com o SDK de DAI do IMA, recomendamos que você limpe todos os recursos após a conclusão da sessão de veiculação de pod. Chame IMAStreamManager.destroy() para interromper a reprodução de stream, parar todo o rastreamento de anúncios e liberar todos os recursos de stream carregados.

Para ver outros exemplos do uso do SDK do tvOS, consulte exemplos no GitHub.