Anzeigenmarkierungen

In diesem Leitfaden werden die Anzeigenmarkierungen beschrieben, die von der Video Stitcher API unterstützt werden. Die Video Stitcher API identifiziert die Grenzen von Werbeunterbrechungen anhand von Anzeigenmarkierungen im HLS-/DASH-Quellmanifest eines Livestreams und führt für jede Sitzung des Livestreams das Stitching von Anzeigen innerhalb einer Werbeunterbrechung durch.

Hinweise

Sie müssen mit den einführenden Konzepten und der Terminologie der Video Stitcher API vertraut sein. Weitere Informationen finden Sie in der technischen Übersicht.

Siehe SCTE-35-Spezifikation Digital Program Insertion Cueing Message For Cable.

SCTE-35-Befehle

Anzeigenmarkierungen für Livestreams werden durch standardmäßige SCTE-35-Signale dargestellt. Die Video Stitcher API unterstützt die folgenden beiden SCTE-35-Befehle:

  • splice_insert
  • time_signal

Mit time_signal kannst du zusätzliche beliebige Metadaten für die zugehörige Werbeunterbrechung in der UPID (Unique Program Identifier) der ersten Segmentierung angeben.

Die Video Stitcher API erwartet für segmentation_upid_type den Wert 0x0C, der für MPU() steht. Der private_data in MPU() sollte ein base64-codierter JSON-String sein, in dem bestimmte JSON-Schlüssel für die folgenden Zwecke reserviert sind:

  • %%AD_TAG_ID%%: Gibt das Anzeigen-Tag an, das für die Werbeunterbrechung verwendet werden soll. Die Anzeigen-Tag-ID sollte einer der Schlüssel in der adTagMacros der Live-Sitzung sein.
  • %%SLATE_ID%%: Gibt an, welcher Slate für die Werbeunterbrechung verwendet werden soll. Die Slate-ID muss mit der ID für einen Slate übereinstimmen, der bereits im selben Google Cloud-Projekt erstellt wurde.

Alle anderen Schlüssel/Wert-Paare in der UPID-Nutzlast werden für den Ersatz von Anzeigen-Tag-Makros verwendet.

Wenn der URI eines Anzeigen-Tags beispielsweise https://example.com?key=[foo] ist und private_data eyJmb28iOiJiYXIifQ== ist, also die Base64-Darstellung von {"foo":"bar"}, ersetzt die Video Stitcher API [foo] durch bar und sendet eine Anzeigen-Tag-Anfrage an https://example.com?key=bar.

Für den Google Ad Manager-Integrationsablauf können SCTE35-Nachrichten bestimmte Werte enthalten, die im Anzeigen-Tag ersetzt werden können. Liste der unterstützten Makros

Achte darauf, dass die adTagUri, die in der Live-Konfiguration registriert ist, die ausgewählten Makros enthält.

Wenn die SCTE35-Nachricht beispielsweise einen Wert für %%SPLICE_INSERT_EVENT_ID%% übergibt, muss das Makro auf adTagUri vorhanden sein, wie im folgenden Beispiel gezeigt:

AD_TAG_URI&macro=%%SPLICE_INSERT_EVENT_ID%%

Wenn die Video Stitcher API die Anzeigenmetadaten anfordert und in der splice_insert-SCTE35-Nachricht splice_insert_event_id auf 123 festgelegt ist, wird das folgende Anzeigen-Tag verwendet:

AD_TAG_URI&macro=123

HLS-Anzeigenmarkierungen

EXT-X-DATERANGE

Die Verwendung von #EXT-X-DATERANGE ist in der HTTP Live Streaming-Spezifikation festgelegt:

  • Ein #EXT-X-DATERANGE-Tag mit dem Attribut SCTE35-OUT gibt den sofortigen Beginn einer Werbeunterbrechung an.
  • Ein #EXT-X-DATERANGE-Tag mit dem Attribut SCTE35-IN gibt den sofortigen Endpunkt einer Werbeunterbrechung an.
  • Die Werte für SCTE35-OUT und SCTE35-IN müssen hexadezimal codiert sein.

Beispiel:

#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

EXT-X-CUE-OUT und EXT-X-CUE-IN

Ein #EXT-X-CUE-OUT-Tag gibt den sofortigen Beginn einer Werbeunterbrechung an und ein #EXT-X-CUE-IN-Tag das sofortige Ende.

Ein #EXT-OATCLS-SCTE35-Tag kann für eine SCTE-35-Nachricht verwendet werden. Der Wert wird voraussichtlich Base64-codiert.

Beispiel (ohne SCTE-35-Nachricht):

#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN

Beispiel (mit SCTE-35-Nachricht):

#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN

Wenn die Dauer eines EXT-X-CUE-OUT-Tags angegeben ist, hat dieser Wert Vorrang, auch wenn die Dauer der Werbeunterbrechung in der SCTE-35-Nachricht damit in Konflikt steht. Wenn die Dauer des EXT-X-CUE-OUT-Tags nicht angegeben ist und in der zugehörigen SCTE-35-Nachricht eine Dauer angegeben ist, wird der Wert aus der SCTE-35-Nachricht verwendet.

DASH-Anzeigenmarkierungen

Derzeit werden in der Video Stitcher API nur DASH-Manifeste mit mehreren Zeiträumen unterstützt. In einem DASH-Manifest mit mehreren Zeiträumen sollte eine Werbeunterbrechung durch eine Period mit einem Ereignisstream mit einer Cue-Out-Markierung dargestellt werden. Eine Cue-in-Markierung ist nicht erforderlich, da das Ende des Werbeunterbrechungszeitraums das Ende der Werbeunterbrechung angibt.

Wenn im SCTE-35-Ereignisstream einer Werbeunterbrechung mehrere Cue-out-Ereignisse vorhanden sind, wird in der Video Stitcher API nur das erste verwendet. Die Präsentationszeit des Cue-out-Ereignisses wird ignoriert, da die Pausenstartzeit mit der Startzeit des Zeitraums übereinstimmt.

Die folgende Liste enthält die unterstützten schemeIdUri für einen SCTE-35-Ereignisstream:

  • urn:scte:scte35:2014:xml+bin
  • urn:scte:scte35:2013:xml

urn:scte:scte35:2014:xml+bin

Ein Ereignisstream, dessen schemeIdUri auf urn:scte:scte35:2014:xml+bin gesetzt ist, enthält Ereignisse, die SCTE-35-Nachrichten in base64-codiertem Binärformat darstellen.

Beispiel:

  <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

Ein Ereignisstream, dessen schemeIdUri auf urn:scte:scte35:2013:xml festgelegt ist, enthält Ereignisse, die SCTE-35-Nachrichten in Klartext-XML darstellen.

Beispiel:

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

Frühzeitige Benachrichtigung zu Werbeunterbrechungen bei Livestreams

Bei der Live-Stitch-Funktion werden Anzeigen-Tags synchron verarbeitet, wenn die Video Stitcher API die Anzeigenmarkierung für den Cue-out im Manifest eines Livestreams empfängt. Diese synchrone Verarbeitung löst eine große Anzahl von Anzeigen-Tag-Anfragen aus und führt bei einem stark frequentierten Stream zu langen Verzögerungen bei den Wiedergabeanfragen der Live-Sitzung.

Mit der frühzeitigen Benachrichtigung zu Werbeunterbrechungen (Early Ad Break Notification, EABN) hat die Video Stitcher API mehr Zeit, Anzeigen vorzubereiten. Dazu wird die API über eine anstehende Werbeunterbrechung informiert.

Frühzeitige Benachrichtigung zu Werbeunterbrechungen bei HLS

Damit die API über eine bevorstehende Werbeunterbrechung informiert werden kann und die Anzeigen im Voraus vorbereitet werden können, muss die HLS-Playlist eines Livestreams folgende Anforderungen erfüllen:

  • #EXT-X-DATERANGE oder EXT-X-CUE-OUT als Anzeigenmarkierung verwenden
  • Anzeigenmarkierung für Cue-out im Quellmanifest des Livestreams wiederholen

#EXT-X-DATERANGE

Wenn der Quellencoder eine anstehende Werbeunterbrechung plant, kann er eine #EXT-X-DATERANGE-Cue-out-Markierung in das Quellmanifest einfügen. Das X-TYPE-Attribut der Markierung gibt den Anzeigenmarkierungstyp an. Bei einer Benachrichtigung über eine vorzeitige Werbeunterbrechung sollte der Wert für X-TYPE EABN sein. Das START-TIME-Attribut der Markierung gibt die tatsächliche oder geplante Startzeit der Werbeunterbrechung an. Das DURATION-Attribut der Markierung ist erforderlich, um die Dauer der Werbeunterbrechung anzugeben. Diese Markierung wird als EABN-Cue-out bezeichnet.

Am tatsächlichen Beginn der Werbeunterbrechung muss der Quell-Encoder eine #EXT-X-DATERANGE-Cue-Out-Markierung in das Quellmanifest einfügen. Das ID-Attribut der Markierung muss mit dem entsprechenden Cue-out der EABN übereinstimmen. Die START-TIME der Markierung muss mit der Medienzeit des Segments übereinstimmen, an der diese Markierung eingefügt wird. Diese Markierung wird als sofortiger Cue-out bezeichnet.

Das folgende Beispielmanifest enthält einen EABN-Cue-out, einen sofortigen Cue-out und einen 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

  • #EXT-X-CUE-OUT als Anzeigenmarkierung verwenden
  • Anzeigenmarkierung für Cue-out im Quellmanifest des Livestreams wiederholen

Wenn der Quellencoder eine anstehende Werbeunterbrechung plant, kann er auch eine #EXT-X-CUE-OUT-Cue-out-Markierung in das Quellmanifest einfügen. Das X-TYPE-Attribut der Markierung gibt den Anzeigenmarkierungstyp an. Bei einer Benachrichtigung über eine vorzeitige Werbeunterbrechung sollte der Wert für X-TYPE EABN sein. Das DURATION-Attribut der Markierung muss die Dauer der Werbeunterbrechung angeben. Diese Markierung wird als EABN-Cue-out bezeichnet.

Am tatsächlichen Beginn der Werbeunterbrechung muss der Quell-Encoder eine #EXT-X-CUE-OUT-Cue-out-Markierung in das Quellmanifest einfügen. Das ID-Attribut der Markierung muss mit dem entsprechenden Cue-out der EABN übereinstimmen. Diese Markierung wird als sofortiger Cue-Out bezeichnet.

Das folgende Beispielmanifest enthält einen EABN-Cue-out, einen sofortigen Cue-out und einen 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

Frühzeitige Benachrichtigung zu Werbeunterbrechungen (DASH)

Damit die API über eine bevorstehende Werbeunterbrechung informiert wird und Anzeigen im Voraus vorbereiten kann, muss ein DASH-Livestream-Manifest das Ereignis „Anzeigenmarkierung“ in Main Period und Ad Break Period wiederholen.

Die erste Anzeige in Main Period benachrichtigt die API über eine bevorstehende Werbeunterbrechung. Die zweite Anzeige in Ad Break Period gibt den sofortigen Beginn der Werbeunterbrechung an.

Hier ein Beispiel für ein Manifest:

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

Nächste Schritte

Weitere Informationen zum Ausführen von Video Stitcher API-Tasks.