Marcadores de anuncios

En esta guía, se describen los marcadores de anuncios que admite la API de Video Stitcher. La API de Video Stitcher identifica los límites de las pausas publicitarias por marcadores de anuncios en el manifiesto HLS/DASH de origen de una transmisión en vivo y realiza la unión de anuncios dentro de una pausa publicitaria para cada sesión de la transmisión en vivo.

Antes de comenzar

Asegúrate de conocer los conceptos introductorios y la terminología de la API de Video Stitcher. Para obtener más información, consulta la descripción general técnica.

Consulta la especificación SCTE-35 Digital Program Insertion Cueing Message For Cable.

Comandos SCTE-35

Los marcadores de anuncios de transmisiones en vivo se representan con indicadores SCTE-35 estándar. Dentro de la lista de comandos SCTE-35, la API de Video Stitcher admite los siguientes dos comandos:

  • splice_insert
  • time_signal

Con time_signal, puedes proporcionar metadatos arbitrarios adicionales para la pausa publicitaria asociada en el primer identificador de programa único (UPID) de segmentación.

La API de Video Stitcher espera que segmentation_upid_type sea 0x0C, que representa MPU(). El private_data en MPU() debe ser una cadena JSON codificada en base64, en la que se reservan ciertas claves JSON para los siguientes fines específicos:

  • %%AD_TAG_ID%%: Especifica la etiqueta de anuncio que se usará para la pausa publicitaria. El ID de la etiqueta de anuncio debe ser una de las claves en el adTagMacros de la sesión en vivo.
  • %%SLATE_ID%%: Especifica la cortinilla que se usará para la pausa publicitaria. El ID de la pizarra debe coincidir con el ID de una pizarra que ya se haya creado en el mismo proyecto de Google Cloud.

Todos los demás pares clave-valor de la carga útil de UPID se usan para el reemplazo de macros de etiquetas de anuncios.

Por ejemplo, si el URI de una etiqueta de anuncio es https://example.com?key=[foo] y el private_data es eyJmb28iOiJiYXIifQ==, que es la representación en base64 de {"foo":"bar"}, la API de Video Stitcher reemplaza [foo] por bar y realiza una solicitud de etiqueta de anuncio a https://example.com?key=bar.

En el caso del flujo de trabajo de integración de Google Ad Manager, los mensajes SCTE35 pueden contener ciertos valores que se podrían reemplazar en la etiqueta de anuncio. Consulta la lista de macros compatibles.

Asegúrate de que el adTagUri registrado en la configuración en vivo contenga las macros elegidas.

Por ejemplo, si el mensaje SCTE35 pasa un valor para %%SPLICE_INSERT_EVENT_ID%%, asegúrate de que la macro exista en adTagUri, como se ilustra en el siguiente ejemplo:

AD_TAG_URI&macro=%%SPLICE_INSERT_EVENT_ID%%

Cuando la API de Video Stitcher solicita los metadatos del anuncio y el mensaje splice_insert SCTE35 tiene splice_insert_event_id establecido en 123, usa la siguiente etiqueta de anuncio:

AD_TAG_URI&macro=123

Marcadores de anuncios de HLS

EXT-X-DATERANGE

El uso de #EXT-X-DATERANGE se especifica en la especificación de HTTP Live Streaming:

  • Una etiqueta #EXT-X-DATERANGE con el atributo SCTE35-OUT indica el punto de unión de inicio inmediato de una pausa publicitaria.
  • Una etiqueta #EXT-X-DATERANGE con el atributo SCTE35-IN indica el punto de unión final inmediato de una pausa publicitaria.
  • Se espera que los valores de SCTE35-OUT y SCTE35-IN estén codificados en hexadecimal.

Ejemplo:

#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 y EXT-X-CUE-IN

Una etiqueta #EXT-X-CUE-OUT indica el inicio inmediato de una pausa publicitaria, y una etiqueta #EXT-X-CUE-IN indica el final inmediato de una pausa publicitaria.

Se puede usar una etiqueta #EXT-OATCLS-SCTE35 para el mensaje SCTE-35, y se espera que el valor esté codificado en base64.

Ejemplo (sin mensaje SCTE-35):

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

Ejemplo (con mensaje SCTE-35):

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

Si se especifica la duración de una etiqueta EXT-X-CUE-OUT, ese valor tiene prioridad, incluso si la duración de la pausa publicitaria en el mensaje SCTE-35 entra en conflicto con ella. Si no se especifica la duración de la etiqueta EXT-X-CUE-OUT y se especifica una en el mensaje SCTE-35 asociado, se usa el valor del mensaje SCTE-35.

Marcadores de anuncios de DASH

Actualmente, la API de Video Stitcher solo admite manifiestos DASH de varios períodos. En un manifiesto DASH de varios períodos, una pausa publicitaria debe estar representada por un Period con una transmisión de eventos que contenga un marcador de salida. No se requiere un marcador de entrada, ya que el final del período de la pausa publicitaria indica el final de la pausa.

Si se presentan varios eventos de salida en la transmisión de eventos SCTE-35 de un período de pausa publicitaria, la API de Video Stitcher solo usará el primero. Se ignora la hora de presentación del evento de salida, ya que la hora de inicio de la pausa es la misma que la hora de inicio del período.

La siguiente es una lista de los schemeIdUri admitidos para un flujo de eventos SCTE-35:

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

urn:scte:scte35:2014:xml+bin

Un flujo de eventos cuyo schemeIdUri está configurado como urn:scte:scte35:2014:xml+bin contiene eventos que representan mensajes SCTE-35 en formato binario codificado en base64.

Ejemplo:

  <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

Un flujo de eventos cuyo schemeIdUri está configurado en urn:scte:scte35:2013:xml contiene eventos que representan mensajes SCTE-35 en XML claro.

Ejemplo:

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

Notificación anticipada de pausa publicitaria para transmisiones en vivo

En el caso de la unión en vivo, las etiquetas de anuncios se procesan de forma síncrona cuando la API de Video Stitcher recibe el marcador de anuncio de salida en el manifiesto de una transmisión en vivo. Este procesamiento síncrono activa una gran cantidad de solicitudes de etiquetas de anuncios y provoca demoras prolongadas en las solicitudes de reproducción de la sesión en vivo si la transmisión está muy poblada.

La notificación anticipada de pausa publicitaria (EABN) le brinda a la API de Video Stitcher más tiempo para preparar los anuncios, ya que le notifica a la API que se aproxima una pausa publicitaria.

Notificación de pausa publicitaria anticipada de HLS

Para notificar a la API sobre una próxima pausa publicitaria, de modo que esta pueda preparar los anuncios con anticipación, la playlist HLS de una transmisión en vivo debe cumplir con los siguientes requisitos:

  • Usa #EXT-X-DATERANGE o EXT-X-CUE-OUT como el marcador de anuncio
  • Repite un marcador de anuncio de salida en el manifiesto de origen de la transmisión en vivo

#EXT-X-DATERANGE

Cuando el codificador de origen programa una próxima pausa publicitaria, puede insertar un marcador de salida #EXT-X-DATERANGE en el manifiesto de origen. El atributo X-TYPE del marcador indica el tipo de marcador de anuncio. Para la notificación de pausa publicitaria anticipada, se espera que el valor de X-TYPE sea EABN. El atributo START-TIME del marcador indica la hora de inicio real o planificada de la pausa publicitaria. El atributo DURATION del marcador es obligatorio para indicar la duración de la pausa publicitaria. Este marcador se denomina salida de EABN.

Al comienzo real de la pausa publicitaria, el codificador de origen debe insertar un marcador de salida #EXT-X-DATERANGE en el manifiesto de origen. El atributo ID del marcador debe ser el mismo que el de la salida de EABN correspondiente. El START-TIME del marcador debe ser el mismo que el tiempo de reproducción del segmento en el que se inserta. Este marcador se denomina salida inmediata.

El siguiente manifiesto de muestra contiene una salida de EABN, una salida inmediata y una entrada:

#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

  • Usa #EXT-X-CUE-OUT como marcador de anuncio
  • Repite un marcador de anuncio de salida en el manifiesto de origen de la transmisión en vivo

Cuando el codificador de origen programa una próxima pausa publicitaria, también puede insertar un marcador de salida #EXT-X-CUE-OUT en el manifiesto de origen. El atributo X-TYPE del marcador indica el tipo de marcador de anuncio. Para la notificación de pausa publicitaria anticipada, se espera que el valor de X-TYPE sea EABN. El atributo DURATION del marcador debe indicar la duración de la pausa publicitaria. Este marcador se denomina salida de EABN.

Al comienzo real de la pausa publicitaria, el codificador de origen debe insertar un marcador de salida #EXT-X-CUE-OUT en el manifiesto de origen. El atributo ID del marcador debe ser el mismo que el de la salida de EABN correspondiente. Este marcador se denomina salida inmediata.

El siguiente manifiesto de muestra contiene una salida de EABN, una salida inmediata y una entrada:

#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

Notificación de pausa publicitaria anticipada de DASH

Para notificar a la API sobre una próxima pausa publicitaria, de modo que esta pueda preparar los anuncios con anticipación, un manifiesto de transmisión en vivo de DASH debe repetir el evento de marcador de anuncio en Main Period y Ad Break Period.

La primera aparición en Main Period notifica a la API que se aproxima una pausa publicitaria, y la segunda aparición en Ad Break Period indica el inicio inmediato de la pausa publicitaria.

El siguiente es un manifiesto de muestra:

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

¿Qué sigue?

Aprende a completar tareas específicas de la API de Video Stitcher.