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 deradTagMacros
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
.
Google Ad Manager-Integration
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¯o=%%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¯o=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 AttributSCTE35-OUT
gibt den sofortigen Beginn einer Werbeunterbrechung an. - Ein
#EXT-X-DATERANGE
-Tag mit dem AttributSCTE35-IN
gibt den sofortigen Endpunkt einer Werbeunterbrechung an. - Die Werte für
SCTE35-OUT
undSCTE35-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
oderEXT-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.