Repères d'annonce

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 la adTagMacros 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.

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&macro=%%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&macro=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'attribut SCTE35-OUT indique le point d'entrée immédiat d'une coupure publicitaire.
  • Une balise #EXT-X-DATERANGE avec l'attribut SCTE35-IN indique le point d'épissure de fin immédiat d'une coupure publicitaire.
  • Les valeurs de SCTE35-OUT et SCTE35-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 ou 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

#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.