Construimos un framework CSAI multiplataforma con una capa unificada de orquestación de anuncios que analiza los marcadores SCTE-35 de los manifiestos HLS/DASH, se comunica con los servidores de anuncios VAST/VMAP y gestiona el ciclo de vida de la reproducción de anuncios en la web (Video.js/Shaka), iOS (AVPlayer), Android (ExoPlayer) y reproductores de TV conectada.
Arquitectura
- Entrega de Contenido: Streams HLS/DASH con marcadores SCTE-35 a través de AWS MediaPackage + CloudFront
- Servidor de Decisión de Anuncios: Google Ad Manager (GAM) / SpotX con soporte para VAST 4.2 y VMAP
- Reproductor Web: Video.js con parser de cue SCTE-35 personalizado e integración con Google IMA SDK
- Reproductor iOS: AVPlayer con listener
AVDateRangeMetadataGroup y IMA iOS SDK
- Reproductor Android: ExoPlayer con listener
MetadataOutput y IMA Android SDK
- TV Conectada: Reproductores nativos de plataforma (Roku RAF, Fire TV IMA, Apple TV AVKit) con adaptadores de framework de anuncios
- Analíticas de Anuncios: Pipeline de eventos personalizado para seguimiento de impresión, cuartiles, finalización, clics y visibilidad
- Respaldo: Entrega de anuncios internos/de la casa cuando no hay disponibilidad de anuncios o se detecta un bloqueador de anuncios
Análisis SCTE-35 del Lado del Cliente
Marcadores del Manifiesto HLS
Las señales SCTE-35 aparecen en los manifiestos HLS en dos formatos, ambos analizados por el cliente:
EXT-X-DATERANGE (HLS v7+)
- El reproductor escucha las etiquetas
#EXT-X-DATERANGE con atributos SCTE35-OUT y SCTE35-IN
- Los atributos incluyen
PLANNED-DURATION para la duración de la pausa publicitaria e ID para la correlación de eventos
- Formato preferido para reproductores modernos (AVPlayer, ExoPlayer, Shaka)
EXT-X-CUE-OUT / EXT-X-CUE-IN (Heredado)
#EXT-X-CUE-OUT:DURATION= marca el inicio de la pausa publicitaria
#EXT-X-CUE-IN marca el regreso al contenido
- Compatible con reproductores y codificadores más antiguos para compatibilidad con versiones anteriores
Marcadores del Manifiesto DASH
- Las señales SCTE-35 aparecen como elementos
en el MPD DASH con schemeIdUri="urn:scte:scte35:2013:xml"
- Los elementos
contienen presentationTime, duration y una carga útil binaria SCTE-35 codificada en base64
- Shaka Player y ExoPlayer los analizan de forma nativa a través de sus API de listeners de eventos
Flujo de Procesamiento de Marcadores
- Detección — El listener de metadatos del reproductor detecta el evento de cue SCTE-35 durante el análisis del manifiesto
- Extracción — Duración de la pausa, ID del evento y tipo de segmentación extraídos del marcador
- Solicitud de Anuncios — Solicitud VAST/VMAP enviada al servidor de decisión de anuncios con parámetros de segmentación (ID de contenido, género, tipo de dispositivo, segmento de usuario, ubicación geográfica)
- Planificación del Pod — Respuesta de anuncios analizada para construir un pod de anuncios (lista ordenada de creatividades de anuncios que llenan la duración de la pausa)
- Precarga — Creatividades de anuncios precargadas durante la reproducción de contenido para eliminar la latencia al inicio de la pausa publicitaria
- Pausa y Cambio — La reproducción de contenido se pausa en el punto de cue, el reproductor cambia a la reproducción de anuncios
- Reproducción de Anuncios — Los anuncios se reproducen secuencialmente con seguimiento por cuartiles, visualización de banners complementarios y gestión de clics
- Reanudación — Después de la finalización del pod, la reproducción de contenido se reanuda desde el fotograma exacto después del punto de cue
Implementaciones Específicas de Plataforma
Web (Video.js + IMA SDK)
- El plugin personalizado de Video.js intercepta los metadatos
#EXT-X-DATERANGE a través de eventos de cambio de cue de textTrack
- El Google IMA HTML5 SDK gestiona las solicitudes de anuncios VAST, la reproducción de anuncios y el renderizado de complementos
- Superposición del contenedor de anuncios posicionada encima del elemento de video para soporte de clics y botones para omitir
- Detección de bloqueadores de anuncios a través de una solicitud de "canary" — recurre a anuncios internos o reanudación de contenido al detectarse
- Soporte de preroll, midroll y postroll a través de VMAP o programación manual de puntos de cue
iOS (AVPlayer + IMA SDK)
- Se utilizan
AVPlayerItem.navigationMarkerGroups y AVDateRangeMetadataGroup para detectar cues SCTE-35
- El delegado
AVPlayerItemMetadataOutput se activa en cada evento de cue con el tiempo y la carga útil analizados
- El Google IMA iOS SDK gestiona la solicitud VAST y la reproducción de anuncios en una instancia
AVPlayer separada
- Picture-in-Picture (PiP) pausado durante las pausas publicitarias según la política de anuncios de la plataforma
- Audio de fondo manejado — los anuncios no se reproducen en modo de fondo
Android (ExoPlayer + IMA SDK)
Player.Listener.onMetadata() con MetadataOutput captura eventos SCTE-35 de HLS/DASH
- Google IMA Android SDK integrado a través de la extensión
ImaAdsLoader de ExoPlayer
- La reproducción de anuncios utiliza una
MediaSource separada para evitar contaminar el búfer de contenido
- Gestiona el ciclo de vida de la Activity — el estado del anuncio se conserva a través de cambios de configuración y puesta en segundo plano
- Android TV y móvil comparten la misma lógica de anuncios con adaptaciones a nivel de UI
Plataformas de TV Conectada
Roku (RAF — Roku Ad Framework)
- La biblioteca nativa RAF de Roku analiza directamente los marcadores SCTE-35 de los manifiestos HLS
RAF.setAdUrl() configurado con endpoint VAST; RAF gestiona la solicitud de anuncios, la construcción del pod y la reproducción
- Soporte de anuncios complementarios a través de los callbacks
renderStitchedAd y renderTrackingEvent de RAF
- La certificación de Roku requiere el uso de RAF — los reproductores de anuncios personalizados son rechazados durante la revisión
Fire TV (IMA SDK)
- Utiliza la implementación de Android ExoPlayer + IMA SDK adaptada para la UI Leanback de Fire TV
- Navegación con D-pad para el botón de omitir y el clic en "Más información" en las superposiciones de anuncios
- Se utiliza el Fire TV Ad ID para la segmentación de anuncios en las solicitudes VAST
Apple TV (AVKit + Personalizado)
AVPlayerViewController con interstitialTimeRanges para indicadores de UI de pausa publicitaria nativa
- Cues SCTE-35 analizados a través de
AVPlayerItemMetadataCollector
- Reproducción de anuncios gestionada en una instancia
AVQueuePlayer separada para una clara separación de contenido/anuncios
- Manejador de clics del control remoto de tvOS para elementos interactivos de anuncios
Gestión de Pods de Anuncios
- Relleno de Pods — Múltiples anuncios VAST ensamblados para llenar la duración de la pausa señalada
- Cascada — Si el servidor de anuncios principal no devuelve relleno, se consultan secuencialmente fuentes de demanda secundarias/terciarias
- Ajuste de Duración — El constructor de pods selecciona combinaciones de anuncios que encajen dentro de la duración de la pausa (tolerancia de ±0.5s)
- Deduplicación — La misma creatividad de anuncio no se muestra dos veces en un solo pod
- Limitación de Frecuencia — Límites por usuario y por sesión aplicados en el lado del cliente para evitar la fatiga publicitaria
- Bumpering — Creatividades de "bumper" cortas ("Volveremos enseguida" / "Bienvenido de nuevo") envuelven los pods de anuncios
Seguimiento de Eventos de Anuncios y Analíticas
- Eventos VAST Estándar —
impression, start, firstQuartile, midpoint, thirdQuartile, complete, skip, clickThrough
- Visibilidad — Píxeles de visibilidad MOAT/IAS disparados basándose en la visibilidad del viewport del anuncio y umbrales de duración
- Eventos Personalizados — Eventos a nivel de aplicación (inicio/fin de pausa publicitaria, tasa de relleno de pod, tiempo de precarga, respaldo activado)
- Pipeline de Servidor — El cliente dispara eventos a un colector de eventos ligero, que los distribuye a GAM, MOAT y el almacén de analíticas interno
- Reconciliación — Reconciliación de registros del lado del servidor con eventos del lado del cliente para detección de discrepancias
Manejo de Bloqueadores de Anuncios (Web)
- Detección — Solicitud VAST "canary" a un dominio de anuncios conocido; el tiempo de espera o el bloqueo indican un bloqueador de anuncios
- Estrategia de Respaldo — Servir anuncios internos o tráilers promocionales desde el dominio CDN de primera parte
- Restricción de Contenido — Barrera suave opcional: solicitar al usuario que incluya el sitio en la lista blanca antes de que se reproduzca el contenido
- Analíticas — Tasa de detección de bloqueadores de anuncios rastreada por navegador, geografía y página
Características Clave
- CSAI Multiplataforma — Inserción unificada de anuncios en web, iOS, Android, Roku, Fire TV y Apple TV
- Análisis SCTE-35 del Cliente — Análisis de HLS
EXT-X-DATERANGE, CUE-OUT/IN y DASH EventStream
- Anuncios Interactivos — Superposiciones clicables, banners complementarios y botones para omitir en todas las plataformas
- Orquestación de Pods de Anuncios — Relleno de pausas de múltiples anuncios con cascada, ajuste de duración y deduplicación
- Precarga — Creatividades de anuncios precargadas durante la reproducción de contenido para transiciones de anuncios sin latencia
- Seguimiento de Visibilidad — Integración MOAT/IAS para los requisitos de visibilidad de los compradores de anuncios premium
- Cumplimiento con TV Conectada — Integraciones de Roku RAF, Fire TV IMA y Apple TV AVKit que cumplen los requisitos de certificación
- Resiliencia a Bloqueadores de Anuncios — Detección y respaldo a anuncios internos de primera parte en la web