Insérer des annonces à l'aide de la redirection de segment

Ce guide explique comment configurer votre outil de manipulation du fichier manifeste pour demander des segments d'annonces ou de slate à l'aide de la méthode pod segment.

Sélectionnez un protocole de streaming :

Prérequis

Avant de continuer, vous devez configurer un événement en direct pour le type d'insertion dynamique d'annonce (DAI, Dynamic Ad Insertion) Redirection de la diffusion de pods et les profils d'encodage. Pour configurer un événement en direct, choisissez l'une des méthodes suivantes :

Après avoir configuré l'événement de diffusion en direct, récupérez les profils d'encodage de l'événement à partir de l'interface utilisateur ou de l'API Ad Manager en appelant la méthode DaiEncodingProfileService.getDaiEncodingProfilesByStatement.

Récupérer le flux de contenu

Lorsqu'un utilisateur sélectionne un événement de diffusion 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.

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: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

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/6.mp4
#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 bloc d'annonces. À 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.

Générer un jeton HMAC (Hash-based Message Authentication Code)

Chaque requête de segment effectuée à l'aide du service de pods de redirection de segment doit inclure un jeton signé HMAC pour l'authentification.

Calculez ce jeton une fois par coupure publicitaire et partagez-le entre toutes les sessions de flux.

Recueillir les paramètres du jeton

Pour remplir le corps du jeton, rassemblez les informations suivantes à partir de la coupure publicitaire actuelle :

Paramètres de jeton
custom_asset_key Obligatoire Clé d'élément de diffusion en direct personnalisée de Google Ad Manager.
cust_params Facultatif Paramètres de ciblage personnalisé. Consultez les cust_params.
exp Obligatoire Code temporel d'expiration du jeton actuel, en secondes.
network_code Obligatoire Code de réseau Ad Manager 360.
pod_id Obligatoire Identifiant de la coupure publicitaire. Entier commençant à 1. Pour chaque coupure publicitaire, cet identifiant est incrémenté de un.

Cette valeur doit être identique pour tous les utilisateurs qui regardent la même coupure publicitaire dans l'événement en cours.

pd Obligatoire, sauf pour les événements pour lesquels les coupures publicitaires sans durée sont activées. Durée de la coupure publicitaire en millisecondes. Appelé ad_pod_duration.
scte35 Facultatif Signal SCTE-35 encodé en base64. Google DAI copie toujours le signal dans le bloc d'annonces créé, même s'il est incorrect. Si elle est incorrecte, vous recevez un message dans l'en-tête HTTP X-Ad-Manager-Dai-Warning de la réponse, et le signal continue de créer un break publicitaire. Pour en savoir plus sur la façon dont l'insertion dynamique d'annonces utilise le signal SCTE-35, consultez les marqueurs publicitaires compatibles.

Créer une chaîne de jeton

Pour créer une chaîne de jetons, listez chaque paramètre par ordre alphabétique, au format NAME=VALUE, en séparant chaque paire nom-valeur par un tilde ~.

Pour les paramètres facultatifs inutilisés, utilisez une chaîne vide comme valeur ou supprimez complètement le paramètre.

L'exemple suivant met en forme une chaîne de jetons :

custom_asset_key=CUSTOM_ASSET_STRING~exp=EXPIRATION~network_code=NETWORK_CODE~pd=POD_DURATION~pod_id=AD_POD_INDEX~scte35=SCTE35_MESSAGE

Générer une signature HMAC

La signature HMAC est un hachage SHA-256 de la chaîne de jeton au format HEX. La clé secrète est la clé d'authentification HMAC associée à votre événement en direct dans Google Ad Manager.

Chaîne de jeton de signature

Une fois la signature HMAC générée, ajoutez-la à la chaîne de jeton au format suivant :

~hmac=HMAC_SIGNATURE

Encoder la chaîne de jeton

Pour transmettre le jeton en tant que paramètre d'URL, encodez l'URL pour plus de sécurité.

L'exemple suivant génère un jeton HMAC signé et encodé, où les paramètres facultatifs inutilisés sont des chaînes vides :

custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g~cust_params=~exp=1489680000~network_code=6062~pd=180000~pod_id=5~scte35=

Secret key:
A7490591290583E4B93189DEE7E287C299FC686872ABC7ADC9F9F536443505F

HMAC signature:
86d7e5f8c96fe4c83141d764df376ae14a0e2066f2e6b2ccfb9e1e2d3c869a88

Signed token:
custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g~cust_params=~exp=1489680000~network_code=6062~pd=180000~pod_id=5~scte35=~hmac=86d7e5f8c96fe4c83141d764df376ae14a0e2066f2e6b2ccfb9e1e2d3c869a88

URL-encoded signed token:
custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~scte35%3D~hmac%3D86d7e5f8c96fe4c83141d764df376ae14a0e2066f2e6b2ccfb9e1e2d3c869a88

L'exemple suivant génère un jeton HMAC signé et encodé sans paramètres facultatifs inutilisés :

custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g3~exp=1489680000~network_code=6062~pd=180000~pod_id=5

Secret key:
A7490591290583E4B93189DEE7E287C299FC686872ABC7ADC9F9F536443505F

HMAC signature:
6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9

Signed token:
custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g~exp=1489680000~network_code=6062~pd=180000~pod_id=5~hmac=6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9

URL-encoded signed token:
custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9

Créer des URL de segments publicitaires

Remplacez chaque segment de contenu entre les balises EXT-X-DISCONTINUITY par une URL pointant vers la méthode de segment de groupe d'annonces.

L'exemple suivant assemble un segment de bloc d'annonces. Notez que les segments d'annonces utilisent un index basé sur zéro :

https://dai.google.com/linear/pods/v1/seg/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/0.ts?sd=AD_SEGMENT_DURATION&pd=AD_BREAK_DURATION&stream_id=SESSION_ID&auth-token=HMAC

L'exemple suivant insère les segments du bloc d'annonces dans le fichier manifeste :

#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/seg/network/
NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/0.ts?sd=5000&so=0&pd=15000&stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/seg/network/
NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/1.ts?sd=5000&so=5000&pd=15000&stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/seg/network/
NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/2.ts?sd=5000&so=10000&pd=15000&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

Facultatif : Programmer une coupure publicitaire

Pour améliorer votre taux de remplissage, envoyez une notification de coupure publicitaire anticipée (EABN) avec la durée du bloc 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 pauses publicitaires.