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 do IMA DAI para iOS com um player de vídeo. Para conferir ou seguir uma integração de exemplo completa, faça o download do exemplo de envio de pod para Objective-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 iOS 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 iOS.
  • Um app iOS já configurado com o SDK da DAI do IMA para reproduzir streams de vídeo com anúncios da DAI. Se você ainda não tem um app assim, recomendamos usar o iOS DAI BasicExample 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 veiculaçã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.

Estas são as constantes de solicitação de fluxo de anúncios que precisam ser 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 fluxo inclui um marcador de posição, "[[STREAMID]]", que é substituído pelo ID do fluxo 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?
  ...

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

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

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

Exibiçã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). Em seguida, chame IMAStreamManager.loadThirdPartyStream() para que o IMA carregue o URL do stream e 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
  }

Limpar recursos da DAI do IMA

Quando você terminar de solicitar e exibir anúncios em um fluxo de veiculação de pods com o SDK DAI do IMA, sugerimos que limpe todos os recursos depois que a sessão de veiculação de pods for concluída. Chame IMAStreamManager.destroy() para interromper a reprodução do stream, parar todo o acompanhamento de anúncios e liberar todos os recursos de stream carregados.

Para conferir outros exemplos de uso do SDK para iOS, consulte exemplos no GitHub.