Ce guide explique comment insérer des coupures publicitaires à l'aide de la méthode ATM (Ad pod Timing Metadata) pour récupérer les codes temporels et la durée précis des coupures publicitaires, y compris des annonces pré-roll.
Pour insérer des annonces pré-roll et gérer le retour au contenu après les coupures publicitaires mid-roll, nous vous recommandons d'appeler les API suivantes :
- API Ad pod Timing Metadata (ATM) : interrogez les résultats des décisions concernant les séries d'annonces, y compris les durées des annonces et des écrans noirs.
- Point de terminaison du segment d'annonce : demandez des segments d'annonce ou de slate avec la possibilité de mettre fin à la série d'annonces en cours.
Si vous le souhaitez, pour les événements de diffusion en direct à forte simultanéité, nous vous recommandons d'appeler l'API EABN (Early Ad Break Notification) pour planifier les décisions publicitaires avant le début de la coupure publicitaire.
Prérequis
Pour commencer, vous devez configurer un événement de diffusion en direct pour le type d'insertion dynamique d'annonces (DAI) Redirection de la diffusion de séries d'annonces. Sélectionnez l'une des méthodes suivantes :
- Interface utilisateur Ad Manager : configurer un livestream pour l'insertion dynamique d'annonces.
- API Ad Manager : utilisez une bibliothèque cliente (options disponibles) pour appeler la méthode
LiveStreamEventService.createLiveStreamEvents. Définissez le paramètreLiveStreamEvent.dynamicAdInsertionTypesurPOD_SERVING_REDIRECT.
Récupérer le flux de contenu
Lorsqu'un utilisateur sélectionne un événement en direct, l'application cliente envoie une demande de flux à Google Ad Manager. Dans la réponse du flux, l'application extrait l'ID de session et les métadonnées Google DAI à inclure dans la requête de fichier manifeste du flux.
L'exemple suivant transmet un ID de session Google DAI à un outil de manipulation de fichier manifeste :
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
Lors du traitement de la demande de lecture de contenu vidéo, stockez l'ID de session Google DAI et CUSTOM_ASSET_KEY de la demande pour préparer l'assemblage d'annonces.
Récupérer les métadonnées de timing de la série d'annonces
Pour récupérer le timing de la série d'annonces, procédez comme suit :
- Générez un jeton HMAC.
- Appelez l'API ATM avec le jeton HMAC.
Demander des métadonnées de timing pour les annonces pré-roll
Vérifiez les paramètres des pré-rolls pour votre événement en direct à l'aide des options suivantes :
- Annonces vidéo pré-roll dans les flux en direct pour l'insertion dynamique d'annonce (version bêta)
- LiveStreamEvent.prerollsettings
Pour récupérer les résultats de la décision concernant les annonces pré-roll, envoyez une requête à l'API ATM.
L'exemple suivant effectue une demande ATM pour les annonces pré-roll :
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"
Demander des métadonnées de timing pour les annonces mid-roll
Pour récupérer les métadonnées de la série d'annonces pour les mid-rolls, procédez comme suit :
- Analysez le fichier manifeste de la diffusion en direct pour trouver les repères publicitaires qui contiennent le timing et la durée de chaque coupure publicitaire mid-roll.
- Appelez le point de terminaison de l'API ATM pour demander la durée précise de la série d'annonces et du slate. L'API renvoie un objet JSON contenant les résultats de la décision du pod d'annonces.
L'exemple suivant effectue une requête ATM pour les annonces mid-roll :
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 l'opération réussit, vous obtenez un résultat semblable à l'objet JSON suivant :
{
"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
]
}
}
}
}
}
Insérer des annonces dans le fichier manifeste du contenu
Les sections suivantes vous expliquent comment modifier le fichier manifeste de la diffusion en direct et ajouter les segments d'annonces.
Identifier les segments de coupure publicitaire et insérer des discontinuités
Lorsque vous traitez chaque fichier manifeste de variante, identifiez les tags EXT-X-CUE-IN et EXT-X-CUE-OUT dans votre flux, qui indiquent le début et la fin d'un bloc d'annonces.
Remplacez les tags EXT-X-CUE-IN et EXT-X-CUE-OUT par les éléments EXT-X-DISCONTINUITY pour que le lecteur vidéo client puisse basculer entre le contenu et les annonces.
L'exemple de fichier manifeste suivant remplace les balises EXT-X-CUE-IN et 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:17.450
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXTINF:2.450,
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
L'exemple suivant illustre un fichier manifeste remplacé :
#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/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Les segments d'annonces Google DAI ne sont pas chiffrés. Si votre contenu est chiffré, supprimez le chiffrement en insérant l'élément EXT-X-KEY:METHOD=NONE avant le premier segment d'annonce de chaque coupure publicitaire. À la fin de la coupure publicitaire, réactivez le chiffrement en insérant un EXT-X-KEY approprié.
Suivez l'heure de début, la durée et l'index de la prochaine coupure publicitaire.
Créer des URL de segments d'annonces
Remplacez les segments de contenu entre les balises EXT-X-DISCONTINUITY par les URL de chaque segment d'annonce. Pour déterminer le nombre de segments d'annonces à insérer, utilisez ads.segment_durations.values fourni dans la réponse JSON de l'API ATM.
Pour revenir au contenu avant la fin du bloc d'annonces, par exemple lors de la détection d'un tag EXT-X-CUE-IN, votre outil de manipulation de fichier manifeste doit ajouter le paramètre d= à l'URL du segment d'annonce final.
Ce paramètre raccourcit le segment pour éviter d'affecter la timeline du lecteur vidéo du client.
L'exemple suivant assemble une URL de segment d'annonce pré-roll au fichier manifeste. Notez que les segments d'annonces utilisent un index basé sur zéro :
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
L'exemple suivant assemble une URL de segment d'annonce mid-roll au fichier manifeste :
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
L'exemple suivant insère des segments d'annonces dans le fichier manifeste :
#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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
#EXTINF:2.450,
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/3.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Créer des segments d'ardoise
Pour combler l'espace entre l'annonce et le contenu, insérez des segments de slate.
Utilisez le tableau slates.segment_durations.values de la réponse JSON de l'API ATM pour déterminer la durée de chaque segment de slate. Répétez la séquence des durées de segment si nécessaire pour remplir toute la coupure publicitaire.
Pour revenir au contenu avant la fin de la série d'annonces, par exemple lors de la détection d'un tag EXT-X-CUE-IN, ajoutez le paramètre d= à l'URL du segment de slate final. Ce paramètre raccourcit le segment pour éviter d'affecter la timeline du lecteur vidéo du client. La valeur des paramètres d= doit être un nombre entier représentant la durée en millisecondes de raccourcissement du segment.
L'exemple suivant assemble un segment de slate :
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
Le slate/0 de l'exemple représente le numéro d'itération de l'ardoise. Consultez la compatibilité et la capacité de mise en cache du lecteur vidéo de votre client pour déterminer si vous devez commencer à 0 et incrémenter ce nombre pour chaque boucle de la slate, ou le laisser à 0 pour toutes les itérations.
Gérer le retour au contenu
Une fois que votre outil de manipulation de fichier manifeste a inséré tous les segments de la série d'annonces, il doit revenir au flux de contenu. Pour revenir au flux de contenu, choisissez l'une des méthodes suivantes. Chaque méthode nécessite un segment de réalignement final pour que le calendrier du flux reste précis.
Remplir et réaligner : insérez les segments de clap et mettez-les en boucle.
Indiquez la durée et insérez des éléments EXT-X-DISCONTINUITY entre chaque itération de la prise. Pour le dernier segment, ajoutez le paramètre d= en millisecondes pour qu'il corresponde au début du contenu.
Retour immédiat : insérez un seul segment de clap de réalignement à l'aide du paramètre d=, suivi du contenu.
Le lecteur vidéo revient au contenu sans que la timeline soit modifiée.
L'exemple suivant crée une transition en remplissant le reste de la durée de la coupure publicitaire avec des segments d'écran.
#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
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/1.ts?stream_id=SESSION_ID&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Dans cette méthode, votre outil de manipulation de fichier manifeste boucle l'ardoise selon les besoins et n'ajoute le paramètre d'URL d= qu'au dernier segment de l'ardoise. Ce processus correspond précisément au début prévu du contenu sous-jacent.
L'exemple suivant montre comment utiliser un seul segment d'ardoise avec le paramètre d= pour que la timeline du lecteur reste précise lorsque vous ne remplissez pas toute la pause restante avec des ardoises en boucle.
#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-DISCONTINUITY
#EXTINF:5.000,
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.000,
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.000,
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:2.450,
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&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Facultatif : Planifier une coupure publicitaire
Pour améliorer votre taux de remplissage, envoyez une notification de coupure publicitaire anticipée (EABN) avec la durée de la série d'annonces, les paramètres de ciblage personnalisés et les données de signal SCTE-35. Pour en savoir plus, consultez Envoyer des notifications anticipées pour les coupures publicitaires.