Inserir anúncios com metadados de tempo de agrupamento de anúncios

Este guia descreve como inserir intervalos de anúncio usando o método de metadados de tempo de conjunto de anúncios (ATM) para buscar o tempo e a duração exatos dos intervalos, incluindo anúncios precedentes.

Para inserir anúncios precedentes e gerenciar o retorno ao conteúdo após intervalos de anúncios intermediários, recomendamos chamar as seguintes APIs:

Opcionalmente, para eventos de transmissão ao vivo com alta simultaneidade, recomendamos chamar a API Early Ad Break Notification (EABN) para programar decisões de anúncio antes do início do intervalo de anúncio.

Pré-requisitos

Para começar, você precisa configurar um evento de transmissão ao vivo para o tipo de Inserção de anúncios dinâmicos (DAI) de redirecionamento de veiculação de pods. Escolha um dos seguintes métodos:

Recuperar o stream de conteúdo

Quando um usuário seleciona um evento de transmissão ao vivo, o app cliente faz uma solicitação de streaming para o Google Ad Manager. Na resposta de stream, o app extrai o ID da sessão e os metadados da DAI do Google para incluir na solicitação de manifesto de stream.

O exemplo a seguir transmite um ID de sessão da DAI do Google para um manipulador de manifesto:

https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY

Ao processar a solicitação de reprodução de conteúdo de vídeo, armazene o ID da sessão da DAI do Google e CUSTOM_ASSET_KEY da solicitação para se preparar para a junção de anúncios.

Recuperar metadados de marcação de tempo de um conjunto de anúncios

Para recuperar a marcação de tempo do conjunto de anúncios, siga estas etapas:

  1. Gere um token HMAC.
  2. Chame a API ATM com o token HMAC.

Solicitar metadados de tempo para anúncios precedentes

Verifique as configurações de anúncio precedente do seu evento de transmissão ao vivo usando as seguintes opções:

Para recuperar os resultados da decisão de anúncio precedente, faça uma solicitação à API ATM.

O exemplo a seguir faz uma solicitação de ATM para anúncios precedentes:

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"

Solicitar metadados de tempo para anúncios intermediários

Para recuperar metadados de um conjunto de anúncios intermediários, siga estas etapas:

  1. Analise o manifesto da transmissão ao vivo para encontrar os marcadores de anúncio que contêm o tempo e a duração de cada intervalo de anúncio intermediário.
  2. Chame o endpoint da API ATM para solicitar a duração exata do conjunto de anúncios e da inserção. A API retorna um objeto JSON com os resultados da decisão do conjunto de anúncios.

O exemplo a seguir faz uma solicitação de ATM para anúncios intermediários:

curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"

Se for bem-sucedido, você vai ver uma saída semelhante ao seguinte objeto JSON:

{
  "status": "final",
  "ads": [
    {
      "duration_ms": 5046,
      "variants": {
        "devrel1428000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        },
        "devrel1928000": {
          "segment_extension": "ts",
          "segment_durations": {
            "timescale": 1000,
            "values": [
              5045
            ]
          }
        }
      }
    }
  ],
  "slate": {
    "duration_ms": 0,
    "variants": {
      "devrel1428000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      },
      "devrel1928000": {
        "segment_extension": "ts",
        "segment_durations": {
          "timescale": 1000,
          "values": [
            5005,
            ...
            5046
          ]
        }
      }
    }
  }
}

Inserir anúncios no manifesto de conteúdo

As seções a seguir explicam como modificar o manifesto da transmissão ao vivo e adicionar os segmentos de anúncio.

Identificar segmentos de intervalo de anúncio e inserir descontinuidades

Ao processar cada manifesto de variante, identifique as tags EXT-X-CUE-IN e EXT-X-CUE-OUT no seu stream, indicando o início e o fim de um intervalo de anúncio.

Substitua as tags EXT-X-CUE-IN e EXT-X-CUE-OUT pelos elementos EXT-X-DISCONTINUITY para que o player de vídeo do cliente alterne entre conteúdo e anúncios.

O manifesto de exemplo a seguir substitui as tags EXT-X-CUE-IN e EXT-X-CUE-OUT:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:17.450
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXTINF:2.450,
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

O exemplo a seguir mostra um manifesto substituído:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Os segmentos de anúncios da DAI do Google não são criptografados. Se o conteúdo estiver criptografado, remova a criptografia inserindo o elemento EXT-X-KEY:METHOD=NONE antes do primeiro segmento de anúncio de cada intervalo de anúncio. No final do intervalo de anúncio, adicione a criptografia novamente inserindo um EXT-X-KEY adequado.

Acompanhe o horário de início, a duração e o índice do próximo intervalo de anúncio futuro.

Criar URLs de segmentos de anúncios

Substitua os segmentos de conteúdo entre as tags EXT-X-DISCONTINUITY por URLs de cada segmento de anúncio. Para determinar quantos segmentos de anúncio inserir, use o ads.segment_durations.values fornecido na resposta JSON da API ATM.

Para voltar ao conteúdo antes da conclusão do conjunto de anúncios, como ao detectar uma tag EXT-X-CUE-IN, o manipulador de manifesto precisa adicionar o parâmetro d= ao URL do segmento final do anúncio. Esse parâmetro encurta o segmento para evitar afetar a linha do tempo do player de vídeo do cliente.

O exemplo a seguir cria um URL de segmento de anúncio precedente no manifesto. Observação: os segmentos de anúncios usam um índice com base em zero:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

O exemplo a seguir monta um URL de segmento de anúncio intermediário no manifesto:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

O exemplo a seguir insere segmentos de anúncio no manifesto:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/3.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Criar segmentos de inserção

Para preencher a lacuna entre o anúncio e o conteúdo, insira segmentos de inserção. Use a matriz slates.segment_durations.values da resposta JSON da API ATM para determinar a duração de cada segmento de bloco. Faça um loop na sequência de durações de segmento conforme necessário para preencher todo o intervalo de anúncio.

Para voltar ao conteúdo antes da conclusão do conjunto de anúncios, como ao detectar uma tag EXT-X-CUE-IN, adicione o parâmetro d= ao URL do segmento final de inserção. Esse parâmetro encurta o segmento para evitar afetar a linha do tempo do player de vídeo do cliente. O valor dos parâmetros d= precisa ser um número inteiro que represente a duração em milissegundos para encurtar o segmento.

O exemplo a seguir monta um segmento de programação:

https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID

O slate/0 no exemplo representa o número da iteração da tela. Consulte a compatibilidade e a capacidade de armazenamento em cache do player de vídeo do cliente para determinar se você deve começar em 0 e aumentar esse número a cada loop da lista ou manter em 0 para todas as iterações.

Gerenciar o retorno ao conteúdo

Depois que o manipulador de manifesto inserir todos os segmentos do conjunto de anúncios, ele precisará voltar para o stream de conteúdo. Para voltar ao stream de conteúdo, escolha um dos métodos a seguir. Cada método exige um segmento de realinhamento final para manter a linha do tempo do stream precisa.

Preencher e realinhar:insira os segmentos de claquete e faça um loop. Preencha a duração e insira elementos EXT-X-DISCONTINUITY entre cada iteração de lista. Para o último segmento, adicione o parâmetro d= em milissegundos para corresponder ao início do conteúdo.

Retorno imediato:insira um único segmento de reajuste usando o parâmetro d= e seguindo com o conteúdo.

O player de vídeo volta ao conteúdo sem uma linha do tempo alterada.

O exemplo a seguir cria uma transição preenchendo o restante da duração do intervalo de anúncio com segmentos de inserção.

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Nesse método, o manipulador de manifesto faz um loop da tela conforme necessário e anexa o parâmetro de URL d= apenas ao último segmento da tela. Esse processo se alinha precisamente com o início programado do conteúdo.

O exemplo a seguir mostra como usar um único segmento de inserção com o parâmetro d= para manter a linha do tempo do player precisa quando você não preenche todo o restante do intervalo com inserções em loop.

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Opcional: programar um intervalo de anúncio

Para aumentar sua taxa de preenchimento, envie uma notificação de intervalo de anúncio antecipado (EABN) com a duração do conjunto de anúncios, parâmetros de segmentação personalizada e dados de sinal SCTE-35. Para mais detalhes, consulte Enviar notificações antecipadas de intervalo de anúncio.