Marcadores de anuncios

En esta guía se describen los marcadores de anuncios admitidos por la API Video Stitcher. La API Video Stitcher identifica los límites de las pausas publicitarias mediante marcadores de anuncios en el archivo de manifiesto HLS o DASH de origen de una emisión en directo y realiza el stitching de anuncios en una pausa publicitaria de cada sesión de la emisión en directo.

Antes de empezar

Familiarízate con los conceptos y la terminología introductorios de la API 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 emisiones en directo se representan mediante señales SCTE-35 estándar. De la lista de comandos SCTE-35, la API Video Stitcher admite los dos siguientes:

  • splice_insert
  • time_signal

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

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

  • %%AD_TAG_ID%%: especifica la etiqueta de anuncio que se va a usar en la pausa publicitaria. El ID de la etiqueta de anuncio debe ser una de las claves de adTagMacrosde la sesión en directo.
  • %%SLATE_ID%%: especifica la cartela que se va a usar en la pausa publicitaria. El ID de la pizarra debe coincidir con el ID de una pizarra que ya se haya creado en el mismo Google Cloud proyecto.

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

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

En el flujo de trabajo de integración de Google Ad Manager, los mensajes SCTE35 pueden contener determinados valores que se pueden sustituir en la etiqueta de anuncio. Consulta la lista de macros admitidas.

Asegúrate de que la adTagUri configuración en directo registrada contiene las macros elegidas.

Por ejemplo, si el mensaje SCTE35 transmite un valor para %%SPLICE_INSERT_EVENT_ID%%, asegúrese de que la macro exista en adTagUri, tal como se muestra en el siguiente ejemplo:

AD_TAG_URI&macro=%%SPLICE_INSERT_EVENT_ID%%

Cuando la API Video Stitcher solicita los metadatos del anuncio y el splice_insert mensaje SCTE35 tiene el valor splice_insert_event_id definido como 123, utiliza la siguiente etiqueta de anuncio:

AD_TAG_URI&macro=123

Marcadores de anuncios 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 empalme de inicio inmediato de una pausa publicitaria.
  • Una etiqueta #EXT-X-DATERANGE con el atributo SCTE35-IN indica el punto de empalme final inmediato de una pausa publicitaria.
  • Los valores de SCTE35-OUT y SCTE35-IN deben estar 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

La etiqueta #EXT-X-DATERANGE solo se aplica al siguiente segmento de la lista de reproducción de variantes, aunque START-DATE no coincida con la marca de tiempo del segmento.

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 el valor debe estar 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 aunque la duración de la pausa publicitaria del mensaje SCTE-35 entre en conflicto con él. 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 usará el valor del mensaje SCTE-35.

Marcadores de anuncios DASH

Actualmente, la API Video Stitcher solo admite archivos de manifiesto DASH de varios periodos. En un archivo de manifiesto de DASH de varios periodos, una pausa publicitaria debe representarse mediante un elemento Period con un objeto EventStream que contenga un marcador de punto de salida. No es necesario un marcador de entrada, ya que el final del periodo de la pausa publicitaria indica el final de la pausa.

Si se presentan varios eventos de salida en el flujo de eventos SCTE-35 de un periodo de pausa publicitaria, la API 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 periodo.

A continuación, se muestra 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 se ha definido 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

Una secuencia de eventos cuyo schemeIdUri se ha definido como urn:scte:scte35:2013:xml contiene eventos que representan mensajes SCTE-35 en XML sin cifrar.

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 de pausa publicitaria anticipada en emisiones en directo

En el caso del costura en directo, las etiquetas de anuncio se procesan de forma síncrona cuando la API Video Stitcher recibe el marcador de anuncio cue-out en el manifiesto de una emisión en directo. Este procesamiento síncrono activa un gran número de solicitudes de etiquetas de anuncio y provoca grandes retrasos en las solicitudes de reproducción de la sesión en directo si la emisión tiene muchos usuarios.

La notificación anticipada de pausa publicitaria (EABN) da más tiempo a la API Video Stitcher para preparar los anuncios, ya que le avisa de una próxima pausa publicitaria.

Notificación de pausa publicitaria anticipada de HLS

Para notificar a la API sobre una próxima pausa publicitaria para que pueda preparar los anuncios con antelación, la lista de reproducción HLS de una emisión en directo debe cumplir los siguientes requisitos:

  • Usa #EXT-X-DATERANGE o EXT-X-CUE-OUT como marcador de anuncio
  • Repetir un marcador de anuncio de punto de salida en el manifiesto de origen de la emisión en directo

#EXT-X-DATERANGE

Cuando el codificador de origen programa una pausa publicitaria, puede insertar un marcador de salida de #EXT-X-DATERANGEen el archivo de manifiesto de origen. El atributo X-TYPE del marcador indica el tipo de marcador de anuncio. En el caso de la notificación de inserción de anuncio anticipada, el valor de X-TYPE debe ser EABN. El atributo START-TIME del marcador indica la hora de inicio real o prevista de la pausa publicitaria. El atributo DURATION del marcador es obligatorio para indicar la duración de la pausa publicitaria. Este marcador se denomina cue-out de EABN.

Al inicio real de la pausa publicitaria, el codificador de origen debe insertar un marcador de salida de #EXT-X-DATERANGE en el manifiesto de origen. El atributo ID del marcador debe ser el mismo que el del cue-out de EABN correspondiente. El valor de START-TIME de la marca debe ser el mismo que el tiempo multimedia del segmento en el que se inserta esta marca. Este marcador se llama cue-out inmediato.

El siguiente archivo de manifiesto de ejemplo contiene un cue-out de EABN, un cue-out inmediato y un 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

  • Usar #EXT-X-CUE-OUT como marcador de anuncio
  • Repetir un marcador de anuncio de punto de salida en el manifiesto de origen de la emisión en directo

Cuando el codificador de origen programa una pausa publicitaria, también puede insertar un marcador de salida de #EXT-X-CUE-OUTen el manifiesto de origen. El atributo X-TYPE del marcador indica el tipo de marcador de anuncio. En el caso de la notificación de inserción de anuncio anticipada, el valor de X-TYPE debe ser EABN. El atributo DURATION del marcador debe indicar la duración de la pausa publicitaria. Este marcador se denomina cue-out de EABN.

Al inicio real de la pausa publicitaria, el codificador de origen debe insertar un marcador de salida de #EXT-X-CUE-OUT en el manifiesto de origen. El atributo ID del marcador debe ser el mismo que el del cue-out de EABN correspondiente. Este marcador se llama cierre inmediato.

El siguiente archivo de manifiesto de ejemplo contiene un cue-out de EABN, un cue-out inmediato y un 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

Notificación de pausa publicitaria anticipada de DASH

Para notificar a la API sobre una pausa publicitaria que va a producirse para que pueda preparar los anuncios con antelación, un manifiesto de emisión en directo 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 va a haber una pausa publicitaria, y la segunda aparición en Ad Break Period indica el inicio inmediato de la pausa publicitaria.

A continuación, se muestra un ejemplo de manifiesto:

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

Siguientes pasos

Consulta cómo completar tareas específicas de la API Video Stitcher.