Nous avons construit un framework CSAI multiplateforme avec une couche d'orchestration publicitaire unifiée qui analyse les marqueurs SCTE-35 des manifestes HLS/DASH, communique avec les serveurs publicitaires VAST/VMAP, et gère le cycle de vie de la lecture des annonces sur les lecteurs web (Video.js/Shaka), iOS (AVPlayer), Android (ExoPlayer), et de télévision connectée.
Architecture
- Diffusion de contenu : Flux HLS/DASH avec marqueurs SCTE-35 via AWS MediaPackage + CloudFront
- Serveur de décision publicitaire : Google Ad Manager (GAM) / SpotX avec support VAST 4.2 et VMAP
- Lecteur Web : Video.js avec un analyseur de repères SCTE-35 personnalisé et l'intégration du Google IMA SDK
- Lecteur iOS : AVPlayer avec un écouteur
AVDateRangeMetadataGroup et le IMA iOS SDK
- Lecteur Android : ExoPlayer avec un écouteur
MetadataOutput et le IMA Android SDK
- Télévision connectée : Lecteurs natifs de la plateforme (Roku RAF, Fire TV IMA, Apple TV AVKit) avec adaptateurs de framework publicitaire
- Analyse publicitaire : Pipeline d'événements personnalisé pour le suivi des impressions, des quartiles, de la complétion, des clics et de la visibilité
- Repli : Diffusion de bandeaux/annonces internes lorsque le remplissage d'annonces est indisponible ou qu'un bloqueur de publicité est détecté
Analyse SCTE-35 Côté Client
Marqueurs de manifeste HLS
Les signaux SCTE-35 apparaissent dans les manifestes HLS sous deux formats, tous deux analysés par le client :
EXT-X-DATERANGE (HLS v7+)
- Le lecteur écoute les balises
#EXT-X-DATERANGE avec les attributs SCTE35-OUT et SCTE35-IN
- Les attributs incluent
PLANNED-DURATION pour la durée de la coupure publicitaire et ID pour la corrélation d'événements
- Format préféré pour les lecteurs modernes (AVPlayer, ExoPlayer, Shaka)
EXT-X-CUE-OUT / EXT-X-CUE-IN (Hérité)
#EXT-X-CUE-OUT:DURATION= marque le début de la coupure publicitaire
#EXT-X-CUE-IN marque le retour au contenu
- Pris en charge pour la rétrocompatibilité avec les lecteurs et encodeurs plus anciens
Marqueurs de manifeste DASH
- Les signaux SCTE-35 apparaissent sous forme d'éléments
dans le DASH MPD avec schemeIdUri="urn:scte:scte35:2013:xml"
- Les éléments
contiennent presentationTime, duration et une charge utile binaire SCTE-35 encodée en base64
- Shaka Player et ExoPlayer les analysent nativement via leurs API d'écoute d'événements
Flux de traitement des marqueurs
- Détection — L'écouteur de métadonnées du lecteur détecte l'événement de repère SCTE-35 pendant l'analyse du manifeste
- Extraction — Durée de la coupure, ID de l'événement et type de segmentation extraits du marqueur
- Demande d'annonce — Demande VAST/VMAP envoyée au serveur de décision publicitaire avec les paramètres de ciblage (ID de contenu, genre, type d'appareil, segment d'utilisateur, géolocalisation)
- Planification du Pod — Réponse publicitaire analysée pour construire un pod publicitaire (liste ordonnée de créatifs publicitaires remplissant la durée de la coupure)
- Préchargement — Créatifs publicitaires préchargés pendant la lecture du contenu pour éliminer la latence au début de la coupure publicitaire
- Pause et Changement — La lecture du contenu est mise en pause au point de repère, le lecteur passe à la lecture des annonces
- Lecture des Annonces — Annonces lues séquentiellement avec suivi par quartile, affichage de bannières complémentaires et gestion des clics
- Reprise — Après la complétion du pod, la lecture du contenu reprend à la trame exacte après le point de repère
Implémentations Spécifiques aux Plateformes
Web (Video.js + IMA SDK)
- Un plugin Video.js personnalisé intercepte les métadonnées
#EXT-X-DATERANGE via les événements de changement de repère textTrack
- Le Google IMA HTML5 SDK gère les demandes d'annonces VAST, la lecture des annonces et le rendu des bannières complémentaires
- Une superposition de conteneur d'annonces positionnée au-dessus de l'élément vidéo pour le support des clics et des boutons de saut
- Détection des bloqueurs de publicité via une demande canary — revient aux annonces internes ou à la reprise du contenu en cas de détection
- Support des annonces preroll, midroll et postroll via VMAP ou planification manuelle des points de repère
iOS (AVPlayer + IMA SDK)
AVPlayerItem.navigationMarkerGroups et AVDateRangeMetadataGroup utilisés pour détecter les repères SCTE-35
- Le délégué
AVPlayerItemMetadataOutput se déclenche sur chaque événement de repère avec un timing et une charge utile analysés
- Le Google IMA iOS SDK gère les demandes VAST et la lecture des annonces dans une instance
AVPlayer distincte
- Le Picture-in-Picture (PiP) est mis en pause pendant les coupures publicitaires selon la politique publicitaire de la plateforme
- Audio en arrière-plan géré — les annonces ne sont pas lues en mode arrière-plan
Android (ExoPlayer + IMA SDK)
Player.Listener.onMetadata() avec MetadataOutput capture les événements SCTE-35 des HLS/DASH
- Le Google IMA Android SDK intégré via l'extension
ImaAdsLoader d'ExoPlayer
- La lecture des annonces utilise une
MediaSource distincte pour éviter de polluer le tampon de contenu
- Gère le cycle de vie de l'Activity — l'état de l'annonce est préservé lors des changements de configuration et de la mise en arrière-plan
- Android TV et mobile partagent la même logique publicitaire avec des adaptations de la couche UI
Plateformes de Télévision Connectée
Roku (RAF — Roku Ad Framework)
- La bibliothèque RAF native de Roku analyse directement les marqueurs SCTE-35 des manifestes HLS
RAF.setAdUrl() configuré avec un point d'extrémité VAST ; RAF gère la demande d'annonce, la construction du pod et la lecture
- Prise en charge des annonces complémentaires via les callbacks
renderStitchedAd et renderTrackingEvent de RAF
- La certification Roku exige l'utilisation de RAF — les lecteurs d'annonces personnalisés sont rejetés lors de l'examen
Fire TV (IMA SDK)
- Utilise l'implémentation Android ExoPlayer + IMA SDK adaptée à l'interface utilisateur Leanback de Fire TV
- Navigation par D-pad pour le bouton de saut et le clic "En savoir plus" sur les superpositions d'annonces
- ID d'annonce Fire TV utilisé pour le ciblage publicitaire dans les requêtes VAST
Apple TV (AVKit + Personnalisé)
AVPlayerViewController avec interstitialTimeRanges pour les indicateurs d'interface utilisateur natifs de coupure publicitaire
- Repères SCTE-35 analysés via
AVPlayerItemMetadataCollector
- Lecture d'annonces gérée dans un
AVQueuePlayer distinct pour une séparation nette du contenu et des annonces
- Gestionnaire de clics de télécommande tvOS pour les éléments publicitaires interactifs
Gestion des Pods Publicitaires
- Remplissage de Pod — Plusieurs annonces VAST assemblées pour remplir la durée de coupure signalée
- Cascade — Si le serveur d'annonces principal ne renvoie aucun remplissage, les sources de demande secondaires/tertiaires sont interrogées séquentiellement
- Adaptation de la Durée — Le constructeur de pod sélectionne des combinaisons d'annonces qui s'insèrent dans la durée de coupure (tolérance de ±0,5 s)
- Déduplication — Le même créatif publicitaire n'est pas affiché deux fois dans un seul pod
- Plafonnement de la Fréquence — Plafonnements par utilisateur et par session appliqués côté client pour éviter la fatigue publicitaire
- Bumpering — De courts créatifs de bumper ("Nous revenons tout de suite" / "Bienvenue de retour") encadrent les pods publicitaires
Suivi et Analyse des Événements Publicitaires
- Événements VAST Standard —
impression, start, firstQuartile, midpoint, thirdQuartile, complete, skip, clickThrough
- Visibilité — Pixels de visibilité MOAT/IAS déclenchés en fonction de la visibilité de la fenêtre d'affichage de l'annonce et des seuils de durée
- Événements Personnalisés — Événements au niveau de l'application (début/fin de coupure publicitaire, taux de remplissage de pod, timing de préchargement, déclenchement du repli)
- Pipeline Serveur — Le client envoie des événements à un collecteur d'événements léger, qui les distribue à GAM, MOAT et à l'entrepôt d'analyse interne
- Rapprochement — Rapprochement des journaux côté serveur avec les événements côté client pour la détection des écarts
Gestion des Bloqueurs de Publicité (Web)
- Détection — Requête VAST "canary" vers un domaine publicitaire connu ; un timeout ou un blocage indique un bloqueur de publicité
- Stratégie de Repli — Diffuser des annonces internes ou des bandes-annonces promotionnelles depuis le domaine CDN propriétaire
- Accès Conditionnel au Contenu — Accès conditionnel doux optionnel : inviter l'utilisateur à ajouter le site à la liste blanche avant la lecture du contenu
- Analytique — Taux de détection des bloqueurs de publicité suivi par navigateur, géographie et page
Fonctionnalités Clés
- CSAI Multiplateforme — Insertion d'annonces unifiée sur web, iOS, Android, Roku, Fire TV et Apple TV
- Analyse SCTE-35 Côté Client — Analyse de HLS
EXT-X-DATERANGE, CUE-OUT/IN et DASH EventStream
- Annonces Interactives — Superpositions cliquables, bannières complémentaires et boutons de saut sur toutes les plateformes
- Orchestration des Pods Publicitaires — Remplissage de coupures multi-annonces avec cascade, adaptation de la durée et déduplication
- Préchargement — Créatifs publicitaires préchargés pendant la lecture du contenu pour des transitions publicitaires sans latence
- Suivi de la Visibilité — Intégration MOAT/IAS pour les exigences de visibilité des acheteurs d'annonces premium
- Conformité Télévision Connectée — Intégrations Roku RAF, Fire TV IMA et Apple TV AVKit répondant aux exigences de certification
- Résilience aux Bloqueurs de Publicité — Détection et repli vers des annonces internes propriétaires sur le web