Marcadores de anúncios

Este guia descreve os marcadores de anúncios suportados pela API Video Stitcher. A API Video Stitcher identifica os limites das pausas para anúncios através de marcadores de anúncios no manifesto HLS/DASH de origem de uma stream em direto e realiza a união de anúncios numa pausa para anúncios para cada sessão da stream em direto.

Antes de começar

Certifique-se de que conhece os conceitos introdutórios e a terminologia da API Video Stitcher. Para mais informações, consulte a vista 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 streams em direto são representados por sinais SCTE-35 padrão. Na lista de comandos SCTE-35, a API Video Stitcher suporta os seguintes dois comandos:

  • splice_insert
  • time_signal

Com o time_signal, pode fornecer metadados arbitrários adicionais para a pausa publicitária associada no primeiro identificador de programa exclusivo (UPID) de segmentação.

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

  • %%AD_TAG_ID%%: especifica a etiqueta de anúncio a usar para a pausa para anúncios. O ID da etiqueta de anúncio deve ser uma das chaves no adTagMacros da sessão em direto.
  • %%SLATE_ID%%: especifica a faixa a usar para a pausa para anúncios. O ID da ardósia tem de corresponder ao ID de uma ardósia que já tenha sido criada no mesmo Google Cloud projeto.

Todos os outros pares de chave-valor na carga útil do UPID são usados para a substituição de macros de etiquetas de anúncios.

Por exemplo, se um URI de etiqueta do 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 substitui [foo] por bar e faz um pedido de etiqueta do anúncio para https://example.com?key=bar.

Para o fluxo de trabalho de integração do Google Ad Manager, as mensagens SCTE35 podem conter determinados valores que podem ser substituídos na etiqueta do anúncio. Consulte a lista de macros suportadas.

Certifique-se de que o adTagUri registado na configuração em direto contém as macros escolhidas.

Por exemplo, se a mensagem SCTE35 transmitir um valor para %%SPLICE_INSERT_EVENT_ID%%, certifique-se de que a macro existe no adTagUri, conforme ilustrado no exemplo seguinte:

AD_TAG_URI&macro=%%SPLICE_INSERT_EVENT_ID%%

Quando a API Video Stitcher pede os metadados dos anúncios e a mensagem splice_insert SCTE35 tem splice_insert_event_id definido como 123, usa a seguinte etiqueta de anúncio:

AD_TAG_URI&macro=123

Marcadores de anúncios HLS

EXT-X-DATERANGE

A utilização de #EXT-X-DATERANGE é especificada na especificação HTTP Live Streaming:

  • Uma etiqueta #EXT-X-DATERANGE com o atributo SCTE35-OUT indica o ponto de divisão de início imediato de uma pausa para anúncios.
  • Uma etiqueta #EXT-X-DATERANGE com o atributo SCTE35-IN indica o ponto de edição imediato de uma pausa para anúncios.
  • Espera-se que os valores de SCTE35-OUT e SCTE35-IN sejam 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

A etiqueta #EXT-X-DATERANGE aplica-se apenas ao segmento seguinte na playlist de variantes, mesmo quando a etiqueta START-DATE não corresponde à data/hora do segmento.

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

Uma etiqueta #EXT-X-CUE-OUT indica o início imediato de uma pausa para anúncios e uma etiqueta #EXT-X-CUE-IN indica o fim imediato de uma pausa para anúncios.

Pode usar uma etiqueta #EXT-OATCLS-SCTE35 para a mensagem SCTE-35, e espera-se que o valor seja 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 etiqueta EXT-X-CUE-OUT for especificada, esse valor tem precedência, mesmo que a duração da pausa para anúncios na mensagem SCTE-35 esteja em conflito com ele. Se a duração da etiqueta EXT-X-CUE-OUT não for especificada e for especificada na mensagem SCTE-35 associada, é usado o valor da mensagem SCTE-35.

Marcadores de anúncios DASH

Atualmente, a API Video Stitcher só suporta manifestos DASH de vários períodos. Num manifesto DASH de vários períodos, uma pausa para anúncios deve ser representada por um elemento Period com uma stream de eventos que contenha um marcador de cue-out. Não é necessário um marcador cue-in, uma vez que o fim do período de pausa para anúncios indica o fim da pausa para anúncios.

Se forem apresentados vários eventos cue-out no fluxo de eventos SCTE-35 de um período de pausa para anúncios, a API Video Stitcher só usa o primeiro. A hora de apresentação do evento de indicação de fim é ignorada, uma vez que a hora de início da pausa é igual à hora de início do período.

Segue-se uma lista dos schemeIdUri suportados para uma stream de eventos SCTE-35:

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

urn:scte:scte35:2014:xml+bin

Uma stream de eventos cujo 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

Uma stream de eventos cujo schemeIdUri está definido como urn:scte:scte35:2013:xml contém eventos que representam mensagens SCTE-35 em XML não codificado.

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 de pausa para anúncios antecipada para streams em direto

Para a união em direto, as etiquetas de anúncios são processadas de forma síncrona quando a API Video Stitcher recebe o marcador de anúncio cue-out no manifesto de uma stream em direto. Este processamento síncrono aciona um grande número de pedidos de etiquetas de anúncios e provoca longos atrasos nos pedidos de reprodução da sessão em direto se a stream tiver muitos anúncios.

A notificação de pausa para anúncios antecipada (EABN) dá à API Video Stitcher mais tempo para preparar anúncios através da notificação da API sobre uma futura pausa para anúncios.

Notificação de pausa para anúncios antecipada HLS

Para notificar a API de uma próxima pausa para anúncios, para que a API possa preparar os anúncios antecipadamente, a playlist HLS de uma stream em direto tem de:

  • Use #EXT-X-DATERANGE ou EXT-X-CUE-OUT como marcador de anúncio
  • Repita um marcador de anúncio de sinalização no manifesto de origem da stream em direto

#EXT-X-DATERANGE

Quando o codificador de origem agenda uma pausa para anúncios futura, pode inserir um marcador de sinalização de saída #EXT-X-DATERANGE no manifesto de origem. O atributo X-TYPE do marcador indica o tipo de marcador de anúncio. Para a notificação de intervalo de anúncios antecipado, espera-se que o valor de X-TYPE seja EABN. O atributo START-TIME do marcador indica a hora de início real ou planeada da pausa para anúncios. O atributo DURATION do marcador é obrigatório para indicar a duração da pausa publicitária. Este marcador é denominado EABN cue-out.

No início real da pausa para anúncios, o codificador de origem tem de inserir um marcador de #EXT-X-DATERANGE cue-out no manifesto de origem. O atributo ID do marcador tem de ser igual ao cue-out EABN correspondente. O valor de START-TIME do marcador tem de ser igual ao tempo de multimédia do segmento no qual este marcador é inserido. Este marcador chama-se sinal de saída imediato.

O manifesto de exemplo seguinte contém um cue-out EABN, um cue-out imediato e um cue-in:

#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

  • Use #EXT-X-CUE-OUT como marcador de anúncio
  • Repita um marcador de anúncio de sinalização no manifesto de origem da stream em direto

Quando o codificador de origem agenda uma próxima pausa para anúncios, também pode inserir um #EXT-X-CUE-OUT marcador de indicação de fim no manifesto de origem. O atributo X-TYPE do marcador indica o tipo de marcador de anúncio. Para a notificação de intervalo de anúncios antecipado, espera-se que o valor de X-TYPE seja EABN. O atributo DURATION do marcador tem de indicar a duração da pausa de anúncios. Este marcador é denominado EABN cue-out.

No início real da pausa para anúncios, o codificador de origem tem de inserir um marcador de #EXT-X-CUE-OUT cue-out no manifesto de origem. O atributo ID do marcador tem de ser igual ao cue-out EABN correspondente. Este marcador denomina-se sinal de saída imediato.

O manifesto de exemplo seguinte contém um cue-out EABN, um cue-out imediato e um cue-in:

#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 de pausa para anúncios antecipada DASH

Para notificar a API de uma pausa para anúncios futura, para que a API possa preparar os anúncios antecipadamente, um manifesto de stream em direto DASH tem de repetir o evento de marcador de anúncio no elemento Main Period e no elemento Ad Break Period.

A primeira ocorrência em Main Period notifica a API de uma pausa para anúncios futura e a segunda ocorrência em Ad Break Period indica o início imediato da pausa para anúncios.

Segue-se 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>

O que se segue?

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