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 eladTagMacros
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
.
Integración de Google Ad Manager
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¯o=%%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¯o=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 atributoSCTE35-OUT
indica el punto de unión de inicio inmediato de una pausa publicitaria. - Una etiqueta
#EXT-X-DATERANGE
con el atributoSCTE35-IN
indica el punto de unión final inmediato de una pausa publicitaria. - Se espera que los valores de
SCTE35-OUT
ySCTE35-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
oEXT-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.