Começar a usar o SDK de DAI do IMA

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 veiculação de anúncios nos seus apps. Com os SDKs do IMA DAI, os apps fazem uma solicitação de transmissão para anúncios e vídeos de conteúdo, seja VOD ou conteúdo ao vivo. O SDK retorna uma transmissão de vídeo combinada para que você não precise alternar entre o anúncio e o vídeo de conteúdo no app.

Selecione a solução de DAI de seu interesse

Veiculação de conjunto DAI

Este guia demonstra como reproduzir uma transmissão ao vivo ou VOD de veiculação de conjunto DAI usando o SDK DAI do IMA para tvOS com um player de vídeo. Para conferir ou seguir uma integração de exemplo concluída, faça o download do app de exemplo de pod (Obj C ou Swift).

Visão geral da veiculação de conjunto DAI do IMA

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

  • StreamRequest: um objeto que define uma solicitação de transmissão para os servidores de publicidade do Google. Precisa ser criado usando IMAPodStreamRequest ou IMAPodVODStreamRequest para ativar a veiculação de pods. Ambos os 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 acionar pings de rastreamento e encaminhar eventos de stream para o editor.

Pré-requisitos

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

  • Xcode 13 ou mais recente.
  • CocoaPods (preferido), Gerenciador de pacotes do Swift ou uma cópia salva do SDK do DAI do IMA para tvOS.
  • Um app para tvOS já configurado com o SDK do IMA DAI para reproduzir streams de vídeo com anúncios DAI. Se você ainda não tem um app assim, recomendamos usar o Exemplo básico de DAI para tvOS como ponto de partida. O BasicExample tem a base de código referenciada neste guia. Para mais informações sobre como implementar o SDK do IMA DAI, 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 no Swift ou ViewController.m no Objective-C. Os snippets neste guia usam a linguagem Swift por padrão. A primeira etapa é atualizar as variáveis constantes.

Estas são as constantes de solicitação de fluxo de blocos de anúncios a serem adicionadas:

  • STREAM_URL (usado apenas para transmissões ao vivo): o URL do stream de vídeo fornecido pelo manipulador de manifesto ou parceiro externo que usa a veiculação de conjunto. Ele precisa exigir que você insira o ID do 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 (usado apenas para transmissões ao vivo): a chave de recurso personalizada que identifica seu evento de veiculação de pod no Ad Manager 360. Ele pode ser criado pelo manipulador de manifesto ou pelo parceiro de veiculação de pods de terceiros.
  • API_KEY (usado apenas para transmissões ao vivo): uma chave de API opcional que pode ser necessária para extrair um ID de transmissão do SDK do IMA DAI.

Mude a seção de variável do exemplo para o seguinte:

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

Criar uma solicitação de transmissão de conjunto de anúncios ao vivo ou VOD

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

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

Modifique o método requestStream para criar uma solicitação de transmissão 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 do stream

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

Modifique os métodos IMAAdsLoaderDelegate usando streamManager.streamId para pegar o ID do fluxo. Em seguida, insira o ID do stream no STREAM_URL, substituindo "[[STREAMID]]". Depois que essa mudança for feita, o novo URL do stream 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 pod de stream VOD

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

Pronto! Agora você pode solicitar e mostrar anúncios em um fluxo de veiculação de conjuntos com o SDK DAI do IMA para tvOS. Para conferir outros exemplos de uso do SDK do IMA DAI, consulte os exemplos no GitHub.