Marcadores de anúncio

Este guia descreve os marcadores de anúncios aceitos pela API Video Stitcher. A API Video Stitcher identifica os limites do intervalo de anúncio por marcadores de anúncio no manifesto HLS/DASH de origem de uma transmissão ao vivo e realiza a junção de anúncios em um intervalo de anúncio para cada sessão da transmissão ao vivo.

Antes de começar

Verifique se você está familiarizado com os conceitos e a terminologia introdutórias na API Video Stitcher. Para mais informações, consulte a visão geral técnica.

Consulte a especificação SCTE-35 Digital Program Insertion Cueing Message For Cable.

Comandos SCTE-35

Os marcadores de anúncios de transmissões ao vivo são representados por indicadores SCTE-35 padrão. Na lista de comandos SCTE-35, a API Video Stitcher oferece suporte aos dois seguintes comandos:

  • splice_insert
  • time_signal

Com time_signal, você pode fornecer outros metadados arbitrários para o intervalo de anúncio associado no primeiro identificador de programa exclusivo (UPID) da segmentação.

A API Video Stitcher espera que o segmentation_upid_type seja 0x0C, que significa MPU(). O private_data no MPU() precisa ser uma string JSON codificada em base64, em que determinadas chaves JSON são reservadas para os seguintes fins específicos:

  • %%AD_TAG_ID%%: especifica a tag de anúncio a ser usada no intervalo de anúncio. O ID da tag de anúncio precisa ser uma das chaves na adTagMacros da sessão ao vivo.
  • %%SLATE_ID%%: especifica a placa a ser usada para o intervalo de anúncio. O ID da prancha precisa corresponder ao ID de uma prancha que já foi criada no mesmo projeto do Google Cloud.

Todos os outros pares de chave-valor no payload do UPID são usados para a substituição de macros de tags de anúncios.

Por exemplo, se um URI da tag de anúncio for https://example.com?key=[foo] e o private_data for eyJmb28iOiJiYXIifQ==, que é a representação base64 de {"foo":"bar"}, a API Video Stitcher vai substituir [foo] por bar e fazer uma solicitação de tag de anúncio para https://example.com?key=bar.

No fluxo de trabalho de integração do Google Ad Manager, as mensagens SCTE35 podem conter alguns valores que podem ser substituídos na tag de anúncio. Consulte a lista de macros compatíveis.

Verifique se o adTagUri registrado na configuração ativa contém as macros escolhidas.

Por exemplo, se a mensagem SCTE35 transmitir um valor para %%SPLICE_INSERT_EVENT_ID%%, verifique se a macro existe no adTagUri, conforme ilustrado no exemplo a seguir:

AD_TAG_URI&macro=%%SPLICE_INSERT_EVENT_ID%%

Quando a API Video Stitcher solicita os metadados do anúncio e a mensagem splice_insert SCTE35 tem splice_insert_event_id definido como 123, ela usa a seguinte tag de anúncio:

AD_TAG_URI&macro=123

Marcadores de anúncios HLS

EXT-X-DATERANGE

O uso de #EXT-X-DATERANGE é especificado na especificação HTTP Live Streaming:

  • Uma tag #EXT-X-DATERANGE com o atributo SCTE35-OUT indica o ponto de união de início imediato de um intervalo de anúncio.
  • Uma tag #EXT-X-DATERANGE com o atributo SCTE35-IN indica o ponto de emenda imediato de um intervalo de anúncio.
  • Os valores de SCTE35-OUT e SCTE35-IN devem ser codificados em hexadecimal.

Exemplo:

#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036

EXT-X-CUE-OUT e EXT-X-CUE-IN

Uma tag #EXT-X-CUE-OUT indica o início imediato de um intervalo de anúncio, e uma tag #EXT-X-CUE-IN indica o fim imediato de um intervalo de anúncio.

Uma tag #EXT-OATCLS-SCTE35 pode ser usada para a mensagem SCTE-35, e o valor deve ser codificado em base64.

Exemplo (sem mensagem SCTE-35):

#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN

Exemplo (com mensagem SCTE-35):

#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN

Se a duração de uma tag EXT-X-CUE-OUT for especificada, esse valor terá precedência, mesmo que a duração do intervalo de anúncio na mensagem SCTE-35 entre em conflito com ele. Se a duração da tag EXT-X-CUE-OUT não for especificada e uma for especificada na mensagem SCTE-35 associada, o valor da mensagem SCTE-35 será usado.

Marcadores de anúncio DASH

No momento, a API Video Stitcher só oferece suporte a manifestos DASH de vários períodos. Em um manifesto DASH de vários períodos, um intervalo de anúncio precisa ser representado por um Period com um fluxo de eventos que contenha um marcador de saída. Um marcador de ponto de início não é necessário, porque o fim do período de intervalo de anúncio indica o fim do intervalo de anúncio.

Se vários eventos de saída forem apresentados em um fluxo de eventos SCTE-35 de um período de intervalo de anúncio, a API Video Stitcher vai usar apenas o primeiro. O horário de apresentação do evento de saída é ignorado porque o horário de início do intervalo é o mesmo do início do período.

Confira a seguir uma lista de schemeIdUri com suporte para um fluxo de eventos SCTE-35:

  • urn:scte:scte35:2014:xml+bin
  • urn:scte:scte35:2013:xml

urn:scte:scte35:2014:xml+bin

Um stream de eventos em que schemeIdUri está definido como urn:scte:scte35:2014:xml+bin contém eventos que representam mensagens SCTE-35 em binário codificado em base64.

Exemplo:

  <Period start="PT444334H55M0.010S" id="break-1">
    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
      <Event presentationTime="0" duration="5400000" id="1">
        <Signal xmlns="urn:scte:scte35:2014:xml+bin">
          <Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
        </Signal>
      </Event>
    </EventStream>
    ...
  </Period>

urn:scte:scte35:2013:xml

Um fluxo de eventos em que schemeIdUri está definido como urn:scte:scte35:2013:xml contém eventos que representam mensagens SCTE-35 em XML claro.

Exemplo:

  <Period start="PT444334H55M0.010S" id="break-1">
    <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
      <Event duration="5400000">
        <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
          <scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
            <scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
            <scte35:BreakDuration autoReturn="true" duration="5400000"/>
          </scte35:SpliceInsert>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
    ...
  </Period>

Notificação antecipada de intervalo de anúncio para transmissões ao vivo

Para a costura ao vivo, as tags de anúncios são processadas de forma síncrona quando a API Video Stitcher recebe o marcador de anúncio de saída no manifesto de uma transmissão ao vivo. Esse processamento síncrono aciona um grande número de solicitações de tag de anúncio e causa longos atrasos nas solicitações de reprodução da sessão ao vivo se o fluxo estiver muito populoso.

A notificação antecipada de intervalo de anúncio (EABN) dá à API Video Stitcher mais tempo para preparar anúncios ao notificar a API sobre um intervalo de anúncio próximo.

Notificação antecipada de intervalo de anúncio HLS

Para notificar a API sobre um intervalo de anúncio futuro e permitir que ela prepare os anúncios com antecedência, a playlist HLS de uma transmissão ao vivo precisa:

  • Use #EXT-X-DATERANGE ou EXT-X-CUE-OUT como marcador do anúncio
  • Repetir um marcador de anúncio de saída no manifesto de origem da transmissão ao vivo

#EXT-X-DATERANGE

Quando o codificador da fonte programa um intervalo de anúncio, ele pode inserir um marcador de saída #EXT-X-DATERANGE no manifesto da fonte. O atributo X-TYPE do marcador indica o tipo de marcador de anúncio. Para a notificação intervalo de anúncio antecipado, o valor de X-TYPE precisa ser EABN. O atributo START-TIME do marcador indica o horário de início real ou planejado do intervalo de intervalo de anúncio. O atributo DURATION do marcador é necessário para indicar a duração do intervalo de anúncio. Esse marcador é chamado de saída de EBAN.

No início do intervalo de anúncio, o codificador da origem precisa inserir um marcador de saída #EXT-X-DATERANGE no manifesto da origem. O atributo ID do marcador precisa ser o mesmo que a saída de EABN correspondente. O START-TIME do marcador precisa ser igual ao tempo de mídia do segmento em que esse marcador é inserido. Esse marcador é chamado de saída imediata.

O exemplo de manifesto a seguir contém uma saída de sinalização EABN, uma saída de sinalização imediata e uma entrada de sinalização:

#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts

#EXT-X-CUE-OUT

  • Usar #EXT-X-CUE-OUT como marcador do anúncio
  • Repetir um marcador de anúncio de saída no manifesto de origem da transmissão ao vivo

Quando o codificador de origem programa um intervalo de anúncio, ele também pode inserir um marcador de saída #EXT-X-CUE-OUT no manifesto de origem. O atributo X-TYPE do marcador indica o tipo de marcador de anúncio. Para a notificação intervalo de anúncio antecipado, o valor de X-TYPE precisa ser EABN. O atributo DURATION do marcador precisa indicar a duração do intervalo de anúncio. Esse marcador é chamado de saída de EBAN.

No início do intervalo de anúncio, o codificador da origem precisa inserir um marcador de saída #EXT-X-CUE-OUT no manifesto da origem. O atributo ID do marcador precisa ser o mesmo que a saída de EABN correspondente. Esse marcador é chamado de saída imediata.

O exemplo de manifesto a seguir contém uma saída de sinalização EABN, uma saída de sinalização imediata e uma entrada de sinalização:

#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts

Notificação antecipada de intervalo de anúncio do DASH

Para notificar a API sobre um intervalo de anúncio que vai acontecer para que ela possa preparar os anúncios com antecedência, um manifesto de transmissão ao vivo DASH precisa repetir o evento de marcador de anúncio no Main Period e no Ad Break Period.

A primeira aparição no Main Period notifica a API de um intervalo de anúncio iminente, e a segunda aparição no Ad Break Period indica o início imediato do intervalo de anúncio.

Confira a seguir um exemplo de manifesto:

<MPD>
<Period id="1">
   <!-- Main Period -->
   <EventStream timescale="90000"  schemeIdUri="urn:scte:scte35:2013:xml">
     <Event duration="5400000" presentationTime="53460000" id="1">
       <scte35:SpliceInfoSection>
          <scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
            <scte35:BreakDuration autoReturn="true" duration="5400000"/>
            </scte35:SpliceInsert>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
   ...
</Period>

<Period start="PT9M54S" id="2">
    <!-- Ad Break Period -->
   <EventStream timescale="90000"  schemeIdUri="urn:scte:scte35:2013:xml">
     <Event duration="5400000" id="1">
       <scte35:SpliceInfoSection>
          <scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
            <scte35:BreakDuration autoReturn="true" duration="5400000"/>
            </scte35:SpliceInsert>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
   ...
</Period>

<Period start="PT10M54S" id="3">
    <!-- Main Period -->
    ...
</Period>
</MPD>

A seguir

Saiba como concluir tarefas específicas da API Video Stitcher.