En esta guía, se describe cómo insertar pausas publicitarias con el método de metadatos de sincronización de pausas publicitarias (ATM) para recuperar la sincronización y la duración precisas de las pausas publicitarias, incluidos los anuncios previos al video.
Para insertar anuncios previos al video y administrar el regreso al contenido después de las pausas publicitarias durante el video, te recomendamos que llames a las siguientes APIs:
- API de Ad pod Timing Metadata (ATM): Permite consultar los resultados de las decisiones del grupo de anuncios, incluidas las duraciones de los anuncios y las pizarras.
- Endpoint de segmento de anuncio: Solicita segmentos de anuncios o de pizarra con la opción de finalizar el pod de anuncios actual.
De manera opcional, para los eventos de transmisión en vivo con alta simultaneidad, te recomendamos que llames a la API de Early Ad Break Notification (EABN) para programar las decisiones sobre anuncios antes de que comience la pausa publicitaria.
Requisitos previos
Para comenzar, necesitas configurar un evento de transmisión en vivo para el tipo de inserción de anuncios dinámicos (DAI) de redireccionamiento de publicación de grupos de anuncios. Elige uno de los siguientes métodos:
- IU de Ad Manager: Configura una transmisión en vivo para la DAI.
- API de Ad Manager: Usa una biblioteca cliente (opciones disponibles) para llamar al método
LiveStreamEventService.createLiveStreamEvents
. Establece el parámetroLiveStreamEvent.dynamicAdInsertionType
enPOD_SERVING_REDIRECT
.
Recupera la transmisión de contenido
Cuando un usuario selecciona un evento de transmisión en vivo, la app cliente realiza una solicitud de transmisión a Google Ad Manager. En la respuesta de transmisión, la app extrae el ID de sesión y los metadatos de la DAI de Google para incluirlos en la solicitud del manifiesto de transmisión.
En el siguiente ejemplo, se pasa un ID de sesión de la DAI de Google a un manipulador de manifiestos:
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
Cuando proceses la solicitud de reproducción de contenido de video, almacena el ID de sesión de la DAI de Google y CUSTOM_ASSET_KEY de la solicitud para preparar la inserción de anuncios.
Recupera los metadatos de sincronización de los pods de anuncios
Para recuperar la sincronización del bloque de anuncios, sigue estos pasos:
- Genera un token HMAC.
- Llama a la API de ATM con el token de HMAC.
Genera un token de HMAC firmado
Para autenticar tus solicitudes, sigue estos pasos:
Crea una cadena de token concatenando los siguientes parámetros en orden alfabético, separados por una virgulilla
~
:Parámetro Obligatorio u opcional Descripción ad_break_id
Obligatorio Es una cadena que especificas para identificar la pausa publicitaria, por ejemplo, ad-break-1
. Para los anuncios previos al video, usapreroll
.custom_asset_key
Obligatorio Es la clave del activo personalizada del evento de transmisión en vivo. cust_params
Opcional Parámetros de segmentación personalizada Para obtener más detalles, consulta Cómo proporcionar parámetros de segmentación a tus novedades. exp
Obligatorio Fecha y hora de vencimiento de este token, medida como la cantidad total de segundos transcurridos desde la época de Unix. network_code
Obligatorio Tu código de red de Google Ad Manager Para obtener más información, consulta Cómo encontrar información de la cuenta de Ad Manager. pd
Obligatorio Es la duración de la pausa publicitaria en milisegundos. En el caso de los anuncios previos al video, la DAI de Google anula este parámetro con la configuración de tu evento de transmisión en vivo. scte35
Opcional Es un indicador SCTE-35 codificado en Base64. Verifica que la señal sea correcta. Si es incorrecto, se envía un mensaje al encabezado HTTP X-Ad-Manager-Dai-Warning
en la respuesta y el indicador se propaga de todos modos para crear una pausa publicitaria. Para obtener más detalles sobre los marcadores de pausas publicitarias admitidos, consulta Integración de HLS.Descarga tu clave de autenticación de DAI de Google de tipo HMAC. Para obtener más detalles, consulta Cómo autenticar solicitudes de transmisión de video por Internet de DAI.
Usa la clave HMAC que descargaste para generar la firma SHA256 de la cadena del token.
Concatena la cadena del token y la firma generada.
Aplica la codificación de URL a la cadena concatenada. La cadena codificada es el token de HMAC firmado para autenticar las solicitudes de la API de Ad pod Timing Metadata (ATM).
En el siguiente ejemplo, se genera un token HMAC firmado para los anuncios previos al video:
custom_asset_key="CUSTOM_ASSET_KEY"
exp="1750700000" # Expired on Mon Jun 23 2025 13:33:20 GMT-0400 (Eastern Daylight Time)
network_code="NETWORK_CODE"
ad_break_id="preroll"
pd="0" # Pod duration value is overridden by the livestream event settings.
# The HMAC authentication key associated with your livestream event in Google Ad Manager.
secret_key="24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C"
# Concatenate the parameters, keep the parameters alphabetically ordered by name.
token_string="ad_break_id=${ad_break_id}~custom_asset_key=${custom_asset_key}~exp=${exp}~network_code=${network_code}~pd=${pd}"
# Calculate the SHA256 signature of the token_string.
hmac_signature=$(echo -n "$token_string" | openssl dgst -sha256 -hmac "$secret_key" | awk '{print $2}')
# Concatenate the token string and the signature.
signed_token="${token_string}~hmac=${hmac_signature}"
url_encode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
# Apply URL encoding to the concatenated string.
url_encoded_signed_token=$(url_encode "$signed_token")
echo "Signed HMAC token:"
echo "${url_encoded_signed_token}"
# Example output:
# ad_break_id%3Dpreroll~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D21775744923~pd%3D180000~pod_id%3D5~hmac%3D24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C
Metadatos de sincronización de solicitudes para anuncios previos al video
Verifica la configuración de los anuncios previos al video de tu evento de transmisión en vivo con las siguientes opciones:
Para recuperar los resultados de la decisión del anuncio previo al video, realiza una solicitud a la API de ATM.
En el siguiente ejemplo, se realiza una solicitud de ATM para anuncios previos al video:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"
Solicita metadatos de sincronización para los anuncios durante el video
Para recuperar los metadatos de la tanda de anuncios de los anuncios intercalados, sigue estos pasos:
- Analiza el manifiesto de la transmisión en vivo para encontrar los marcadores de anuncios que contienen el tiempo y la duración de cada pausa publicitaria durante el video.
- Llama al extremo de la API de ATM para solicitar la duración precisa del segmento de anuncios y de la pizarra. La API devuelve un objeto JSON con los resultados de la decisión del segmento de anuncios.
En el siguiente ejemplo, se realiza una solicitud de ATM para los anuncios de intervalo medio:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"
Si se ejecuta de forma correcta, verás un resultado similar al siguiente objeto JSON:
{
"status": "final",
"ads": [
{
"duration_ms": 5046,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
}
}
}
],
"slate": {
"duration_ms": 0,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
}
}
}
}
Cómo unir anuncios en el manifiesto de contenido
En las siguientes secciones, se explica cómo modificar el manifiesto de la transmisión en vivo y agregar los segmentos de anuncios.
Identifica los segmentos de pausas publicitarias e inserta discontinuidades
A medida que procesas cada manifiesto de variantes, identifica las etiquetas EXT-X-CUE-IN
y EXT-X-CUE-OUT
en tu transmisión, que indican el inicio y el final de una pausa publicitaria.
Reemplaza las etiquetas EXT-X-CUE-IN
y EXT-X-CUE-OUT
por los elementos EXT-X-DISCONTINUITY
para que el reproductor de video del cliente pueda cambiar entre el contenido y los anuncios.
En el siguiente ejemplo de manifiesto, se reemplazan las etiquetas EXT-X-CUE-IN
y EXT-X-CUE-OUT
:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
En el siguiente ejemplo, se muestra un manifiesto reemplazado:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Los segmentos de anuncios de la DAI de Google no están encriptados. Si tu contenido está encriptado, quita la encriptación insertando el elemento EXT-X-KEY:METHOD=NONE
antes del primer segmento de anuncio de cada corte publicitario. Al final de la pausa publicitaria, vuelve a agregar la encriptación insertando un EXT-X-KEY
adecuado.
Haz un seguimiento de la hora de inicio, la duración y el índice de la próxima pausa publicitaria.
Crea URLs de segmentos de anuncios
Reemplaza los segmentos de contenido entre las etiquetas EXT-X-DISCONTINUITY
por URLs para cada segmento de anuncio. Para determinar cuántos segmentos de anuncios insertar, usa el ads.segment_durations.values
proporcionado en la respuesta JSON de la API de ATM.
Para finalizar un pod de anuncios antes de tiempo cuando se detecta una etiqueta EXT-X-CUE-IN
, agrega el parámetro d=
a la URL del segmento de anuncio final. Este parámetro acorta el segmento para evitar que se vea afectada la línea de tiempo del reproductor de video del cliente.
En el siguiente ejemplo, se ensambla una URL de segmento de anuncio previo al video en el manifiesto. Ten en cuenta que los segmentos de anuncios usan un índice basado en cero:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
En el siguiente ejemplo, se ensambla una URL de segmento de anuncio intercalado en el manifiesto:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
En el siguiente ejemplo, se insertan segmentos de anuncios en el manifiesto:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4
Crea segmentos de listas
Para llenar la brecha entre el anuncio y el contenido, inserta segmentos de cortinilla de video.
Usa el array slates.segment_durations.values
de la respuesta JSON de la API de ATM para determinar la duración de cada segmento de la pizarra. Repite la secuencia de duraciones de segmentos según sea necesario para completar toda la pausa publicitaria.
En el siguiente ejemplo, se ensambla un segmento de pizarra:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
El slate/0
del ejemplo representa el número de iteración de la pizarra. Consulta la compatibilidad y la capacidad de almacenamiento en caché del reproductor de video del cliente para determinar si debes comenzar en 0
y aumentar este número para cada bucle de la pizarra, o bien mantenerlo en 0
para todas las iteraciones.
Administra el regreso al contenido
Después de insertar todos los segmentos del bloque de anuncios, elige uno de los siguientes métodos para volver a tu transmisión de contenido:
Método | Descripción | Efectos en el reproductor de video del cliente |
---|---|---|
Fill with slate segments | Inserta los segmentos de pizarra y los repite. Completa la duración e inserta elementos EXT-X-DISCONTINUITY entre cada iteración de la pizarra. |
Sin efectos. El reproductor de video vuelve al contenido sin una línea de tiempo alterada. |
Cómo volver a alinear con un solo segmento de pizarra | Inserta un solo segmento de pizarra. Usa el parámetro d= para completar la duración hasta el inicio del contenido. |
Sin efectos. El reproductor de video vuelve al contenido sin una línea de tiempo alterada. |
Devolución inmediata | Insertar segmentos de contenido | Se altera la línea de tiempo del reproductor de video. Tu reproductor de video del cliente debe controlar la línea de tiempo alterada. |
Opcional: Programa una pausa publicitaria
Para mejorar tu tasa de relleno, envía una notificación de Early Ad Break Notification (EABN) con la duración del pod de anuncios, los parámetros de segmentación personalizados y los datos de la señal SCTE-35. Para obtener más información, consulta Cómo enviar notificaciones anticipadas de pausas publicitarias.