Ce guide décrit les repères publicitaires compatibles avec l'API Video Stitcher. L'API Video Stitcher identifie les limites des coupures publicitaires à l'aide de repères publicitaires dans le fichier manifeste HLS/DASH source d'un flux en direct et effectue l'assemblage des annonces dans une coupure publicitaire pour chaque session du flux en direct.
Avant de commencer
Assurez-vous de bien connaître les concepts et la terminologie de l'API Video Stitcher. Pour en savoir plus, consultez la présentation technique.
Consultez la spécification SCTE-35 Digital Program Insertion Cueing Message For Cable (Message de cueing d'insertion de programme numérique pour le câble).
Commandes SCTE-35
Les repères publicitaires de diffusion en direct sont représentés par des signaux SCTE-35 standards. Dans la liste des commandes SCTE-35, l'API Video Stitcher est compatible avec les deux commandes suivantes:
splice_insert
time_signal
Avec time_signal
, vous pouvez fournir des métadonnées arbitraires supplémentaires pour la coupure publicitaire associée dans le premier identifiant de programme unique (UPID) de segmentation.
L'API Video Stitcher s'attend à ce que segmentation_upid_type
soit 0x0C
, qui représente MPU()
. Le private_data
dans le MPU()
doit être une chaîne JSON encodée en base64, dans laquelle certaines clés JSON sont réservées aux fins spécifiques suivantes:
%%AD_TAG_ID%%
: spécifie le tag d'annonce à utiliser pour la coupure publicitaire. L'ID de la balise publicitaire doit être l'une des clés de laadTagMacros
de la session en direct.%%SLATE_ID%%
: spécifie la liste à utiliser pour la coupure publicitaire. L'ID de la série doit correspondre à celui d'une série déjà créée dans le même Google Cloud projet.
Toutes les autres paires clé-valeur de la charge utile UPID sont utilisées pour remplacer la macro du tag d'emplacement publicitaire.
Par exemple, si l'URI d'un tag d'emplacement publicitaire est https://example.com?key=[foo]
et que private_data
est eyJmb28iOiJiYXIifQ==
, qui est la représentation base64 de {"foo":"bar"}
, l'API Video Stitcher remplace [foo]
par bar
et envoie une requête de tag d'emplacement publicitaire à https://example.com?key=bar
.
Intégration de Google Ad Manager
Pour le workflow d'intégration Google Ad Manager, les messages SCTE35 peuvent contenir certaines valeurs qui peuvent être remplacées dans le tag d'annonce. Consultez la liste des macros compatibles.
Assurez-vous que l'adTagUri
enregistré sur la configuration en direct contient les macros choisies.
Par exemple, si le message SCTE35 transmet une valeur pour %%SPLICE_INSERT_EVENT_ID%%
, assurez-vous que la macro existe sur adTagUri
, comme illustré dans l'exemple suivant:
AD_TAG_URI¯o=%%SPLICE_INSERT_EVENT_ID%%
Lorsque l'API Video Stitcher demande les métadonnées de l'annonce et que splice_insert_event_id
est défini sur 123
dans le message splice_insert
SCTE35, elle utilise le tag d'annonce suivant:
AD_TAG_URI¯o=123
Repères d'annonces HLS
EXT-X-DATERANGE
L'utilisation de #EXT-X-DATERANGE
est spécifiée dans la spécification HTTP Live Streaming:
- Une balise
#EXT-X-DATERANGE
avec l'attributSCTE35-OUT
indique le point d'entrée immédiat d'une coupure publicitaire. - Une balise
#EXT-X-DATERANGE
avec l'attributSCTE35-IN
indique le point d'épissure de fin immédiat d'une coupure publicitaire. - Les valeurs de
SCTE35-OUT
etSCTE35-IN
doivent être encodées en hexadécimal.
Exemple :
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036
La balise #EXT-X-DATERANGE
ne s'applique qu'au segment suivant de la playlist de variantes, même si START-DATE
ne correspond pas au code temporel du segment.
EXT-X-CUE-OUT et EXT-X-CUE-IN
Une balise #EXT-X-CUE-OUT
indique le début immédiat d'une coupure publicitaire, et une balise #EXT-X-CUE-IN
indique la fin immédiate d'une coupure publicitaire.
Une balise #EXT-OATCLS-SCTE35
peut être utilisée pour un message SCTE-35. La valeur doit être encodée en base64.
Exemple (sans message SCTE-35):
#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN
Exemple (avec message SCTE-35):
#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN
Si la durée d'une balise EXT-X-CUE-OUT
est spécifiée, cette valeur est prioritaire, même si la durée de la coupure publicitaire dans le message SCTE-35 est en conflit avec elle. Si la durée de la balise EXT-X-CUE-OUT
n'est pas spécifiée et qu'une valeur est spécifiée dans le message SCTE-35 associé, la valeur du message SCTE-35 est utilisée.
Repères d'annonce DASH
Actuellement, l'API Video Stitcher n'est compatible qu'avec les fichiers manifestes DASH multipériodes. Dans un fichier manifeste DASH multipériode, une coupure publicitaire doit être représentée par un Period
avec un flux d'événements contenant un repère de cue-out. Un repère de cue-in n'est pas nécessaire, car la fin de la période de coupure publicitaire indique la fin de la coupure publicitaire.
Si plusieurs événements de cue-out sont présentés dans le flux d'événements SCTE-35 d'une période de coupure publicitaire, l'API Video Stitcher n'utilise que le premier. L'heure de présentation de l'événement de cue-out est ignorée, car l'heure de début de la pause est identique à l'heure de début de la période.
Vous trouverez ci-dessous la liste des schemeIdUri
compatibles pour un flux d'événements SCTE-35:
urn:scte:scte35:2014:xml+bin
urn:scte:scte35:2013:xml
urn:scte:scte35:2014:xml+bin
Un flux d'événements dont schemeIdUri
est défini sur urn:scte:scte35:2014:xml+bin
contient des événements représentant des messages SCTE-35 au format binaire encodé en base64.
Exemple :
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event presentationTime="0" duration="5400000" id="1">
<Signal xmlns="urn:scte:scte35:2014:xml+bin">
<Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
</Signal>
</Event>
</EventStream>
...
</Period>
urn:scte:scte35:2013:xml
Un flux d'événements dont schemeIdUri
est défini sur urn:scte:scte35:2013:xml
contient des événements représentant des messages SCTE-35 au format XML clair.
Exemple :
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000">
<scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
<scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
<scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
Notification anticipée de coupure publicitaire pour les diffusions en direct
Pour le montage en direct, les tags d'annonce sont traités de manière synchrone lorsque l'API Video Stitcher reçoit le repère d'annonce de cue-out dans le fichier manifeste d'un flux en direct. Ce traitement synchrone déclenche un grand nombre de requêtes de tags d'annonces et entraîne de longs délais pour les requêtes de lecture de la session en direct si le flux est très peuplé.
La notification anticipée de coupure publicitaire (EABN) donne à l'API Video Stitcher plus de temps pour préparer les annonces en l'informant d'une prochaine coupure publicitaire.
Notification anticipée de coupure publicitaire HLS
Pour informer l'API d'une prochaine coupure publicitaire afin qu'elle puisse préparer les annonces à l'avance, la playlist HLS d'une diffusion en direct doit:
- Utiliser
#EXT-X-DATERANGE
ouEXT-X-CUE-OUT
comme repère d'annonce - Répéter un repère d'annonce de cue-out dans le fichier manifeste source de la diffusion en direct
#EXT-X-DATERANGE
Lorsque l'encodeur source planifie une coupure publicitaire à venir, il peut insérer un repère de sortie #EXT-X-DATERANGE
dans le fichier manifeste source. L'attribut X-TYPE
du repère indique le type de repère d'annonce. Pour la notification de coupure publicitaire anticipée, la valeur de X-TYPE
doit être EABN
. L'attribut START-TIME
du repère indique l'heure de début de la coupure publicitaire réelle ou planifiée.
L'attribut DURATION
du repère est obligatoire pour indiquer la durée de la coupure publicitaire. Ce repère est appelé cue-out EABN.
Au début de la coupure publicitaire, l'encodeur source doit insérer un repère de sortie #EXT-X-DATERANGE
dans le fichier manifeste source. L'attribut ID
du repère doit être identique à celui de l'extrait EABN correspondant. Le START-TIME
du repère doit être identique au temps multimédia du segment au moment où ce repère est inséré. Ce repère est appelé cue-out immédiat.
L'exemple de fichier manifeste suivant contient un cue-out EABN, un cue-out immédiat et un cue-in:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts
#EXT-X-CUE-OUT
- Utiliser
#EXT-X-CUE-OUT
comme repère d'annonce - Répéter un repère d'annonce de cue-out dans le fichier manifeste source de la diffusion en direct
Lorsque l'encodeur source planifie une coupure publicitaire à venir, il peut également insérer un repère de sortie #EXT-X-CUE-OUT
dans le fichier manifeste source. L'attribut X-TYPE
du repère indique le type de repère d'annonce. Pour la notification de coupure publicitaire anticipée, la valeur de X-TYPE
doit être EABN
. L'attribut DURATION
du repère doit indiquer la durée de la coupure publicitaire.
Ce repère est appelé cue-out EABN.
Au début de la coupure publicitaire, l'encodeur source doit insérer un repère de sortie #EXT-X-CUE-OUT
dans le fichier manifeste source. L'attribut ID
du repère doit être identique à celui de l'extrait EABN correspondant. Ce repère est appelé cue-out immédiat.
L'exemple de fichier manifeste suivant contient un cue-out EABN, un cue-out immédiat et un cue-in:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts
Notification anticipée de coupure publicitaire DASH
Pour informer l'API d'une prochaine coupure publicitaire afin qu'elle puisse préparer les annonces à l'avance, un fichier manifeste de streaming en direct DASH doit répéter l'événement du repère publicitaire dans les Main Period
et Ad Break Period
.
La première apparition dans Main Period
informe l'API d'une coupure publicitaire à venir, et la deuxième apparition dans Ad Break Period
indique le début immédiat de la coupure publicitaire.
Voici un exemple de fichier manifeste:
<MPD>
<Period id="1">
<!-- Main Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" presentationTime="53460000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT9M54S" id="2">
<!-- Ad Break Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT10M54S" id="3">
<!-- Main Period -->
...
</Period>
</MPD>
Étape suivante
Découvrez comment effectuer des tâches spécifiques de l'API Video Stitcher.