In dieser Anleitung wird beschrieben, wie du mit der Methode „Anzeigen-Pod-Timing-Metadaten“ (ATM) Werbeunterbrechungen einfügst, um das genaue Timing und die genaue Dauer von Werbeunterbrechungen, einschließlich Pre-Roll-Anzeigen, abzurufen.
Wenn Sie Pre-Roll-Anzeigen einfügen und die Rückkehr zum Inhalt nach Mid-Roll-Werbeunterbrechungen verwalten möchten, empfehlen wir, die folgenden APIs aufzurufen:
- Ad Pod Timing Metadata (ATM) API: Abfrage von Ergebnissen von Entscheidungen zu Anzeigen-Pods, einschließlich der Dauer von Anzeigen und Slates.
- Endpunkt für Anzeigensegmente: Anzeigen- oder Slate-Segmente anfordern und den aktuellen Anzeigen-Pod beenden.
Bei Livestream-Ereignissen mit hoher Parallelität empfehlen wir optional, die Early Ad Break Notification (EABN) API aufzurufen, um Anzeigenentscheidungen vor Beginn der Werbeunterbrechung zu planen.
Vorbereitung
Zuerst benötigen Sie ein Livestream-Ereignis, das für den Typ Pod-Auslieferungs-Weiterleitung der dynamischen Anzeigenbereitstellung (DAI) eingerichtet ist. Sie haben folgende Möglichkeiten:
- Ad Manager-Benutzeroberfläche:Livestream für die dynamische Anzeigenbereitstellung einrichten
- Ad Manager API:Verwenden Sie eine Clientbibliothek (verfügbare Optionen), um die Methode
LiveStreamEventService.createLiveStreamEventsaufzurufen. Setzen Sie den ParameterLiveStreamEvent.dynamicAdInsertionTypeaufPOD_SERVING_REDIRECT.
Contentstream abrufen
Wenn ein Nutzer ein Livestream-Event auswählt, sendet die Client-App eine Streamanfrage an Google Ad Manager. In der Streamantwort extrahiert die App die Google DAI-Sitzungs-ID und die Metadaten, die in die Streammanifestanfrage aufgenommen werden sollen.
Im folgenden Beispiel wird eine Google DAI-Sitzungs-ID an einen Manifest-Manipulator übergeben:
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
Speichern Sie beim Verarbeiten der Anfrage zur Wiedergabe von Videoinhalten die Google-Sitzungs-ID für die dynamische Anzeigenbereitstellung und CUSTOM_ASSET_KEY aus der Anfrage, um das Einfügen von Anzeigen vorzubereiten.
Timing-Metadaten für Anzeigen-Pods abrufen
So rufen Sie das Timing von Anzeigen-Pods ab:
- HMAC-Token generieren
- Rufen Sie die ATM API mit dem HMAC-Token auf.
Timing-Metadaten für Pre-Roll-Anzeigen anfordern
Prüfe die Einstellungen für Pre-Rolls für dein Livestream-Event mit den folgenden Optionen:
- Pre-Rolls in Livestreams mit dynamischer Anzeigenbereitstellung (Beta)
- LiveStreamEvent.prerollsettings
Wenn Sie die Ergebnisse der Pre-Roll-Anzeigenentscheidung abrufen möchten, senden Sie eine Anfrage an die ATM API.
Im folgenden Beispiel wird eine ATM-Anfrage für Pre-Roll-Anzeigen gestellt:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"
Timing-Metadaten für Mid-Roll-Anzeigen anfordern
So rufen Sie Metadaten für Mid-Roll-Anzeigen-Pods ab:
- Parsen Sie das Livestream-Manifest, um die Anzeigenmarkierungen zu finden, die das Timing und die Dauer für jede Mid-Roll-Werbeunterbrechung enthalten.
- Rufen Sie den ATM API-Endpunkt auf, um die genaue Dauer des Anzeigen-Pods und des Slates anzufordern. Die API gibt ein JSON-Objekt mit den Entscheidungsergebnissen des Ad-Pods zurück.
Im folgenden Beispiel wird eine ATM-Anfrage für Mid-Roll-Anzeigen gestellt:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"
Bei erfolgreicher Ausführung wird eine Ausgabe ähnlich dem folgenden JSON-Objekt angezeigt:
{
"status": "final",
"ads": [
{
"duration_ms": 5046,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
}
}
}
],
"slate": {
"duration_ms": 0,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
}
}
}
}
Anzeigen in das Content-Manifest einfügen
In den folgenden Abschnitten erfahren Sie, wie Sie das Livestream-Manifest ändern und die Anzeigensegmente hinzufügen.
Segmente für Werbeunterbrechungen identifizieren und Diskontinuitäten einfügen
Suchen Sie beim Verarbeiten der einzelnen Variantenmanifeste in Ihrem Stream nach den Tags EXT-X-CUE-IN und EXT-X-CUE-OUT, die den Beginn und das Ende einer Werbeunterbrechung angeben.
Ersetzen Sie die Tags EXT-X-CUE-IN und EXT-X-CUE-OUT durch die EXT-X-DISCONTINUITY-Elemente, damit der Client-Videoplayer zwischen Inhalten und Anzeigen wechseln kann.
Im folgenden Beispielmanifest werden die Tags EXT-X-CUE-IN und EXT-X-CUE-OUT ersetzt:
#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:17.450
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXTINF:2.450,
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
Das folgende Beispiel zeigt ein ersetzt Manifest:
#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/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
Google DAI-Anzeigensegmente sind nicht verschlüsselt. Wenn Ihre Inhalte verschlüsselt sind, entfernen Sie die Verschlüsselung, indem Sie das EXT-X-KEY:METHOD=NONE-Element vor dem ersten Anzeigensegment jeder Werbeunterbrechung einfügen. Fügen Sie am Ende der Werbeunterbrechung die Verschlüsselung wieder hinzu, indem Sie ein entsprechendes EXT-X-KEY einfügen.
Behalten Sie die Startzeit, die Dauer und den Index der bevorstehenden Werbeunterbrechung im Blick.
URLs für Anzeigensegmente erstellen
Ersetzen Sie die Inhaltssegmente zwischen den EXT-X-DISCONTINUITY-Tags durch URLs für die einzelnen Anzeigensegmente. Um zu ermitteln, wie viele Werbesegmente eingefügt werden sollen, verwenden Sie die ads.segment_durations.values in der JSON-Antwort der ATM API.
Wenn Sie vor Abschluss des Anzeigen-Pods zum Content zurückkehren möchten, z. B. beim Erkennen eines EXT-X-CUE-IN-Tags, muss Ihr Manifest-Manipulator der URL des letzten Anzeigensegments den Parameter sd= hinzufügen.
Dieser Parameter verkürzt das Segment, um die Zeitachse des Videoplayers des Clients nicht zu beeinträchtigen.
Im folgenden Beispiel wird eine Pre-Roll-Anzeigensegment-URL im Manifest zusammengestellt. Anzeigenblöcke verwenden einen nullbasierten Index:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
Im folgenden Beispiel wird eine Mid-Roll-Anzeigensegment-URL im Manifest zusammengestellt:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
Im folgenden Beispiel werden Werbesegmente in das Manifest eingefügt:
#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-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/3.ts?stream_id=SESSION_ID&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
Slate-Segmente erstellen
Um die Lücke zwischen Anzeige und Inhalt zu schließen, fügen Sie Slate-Segmente ein.
Verwenden Sie das slates.segment_durations.values-Array aus der JSON-Antwort der ATM API, um die Dauer der einzelnen Slate-Segmente zu bestimmen. Wiederholen Sie die Sequenz der Segmentdauern nach Bedarf, um die gesamte Werbeunterbrechung zu füllen.
Wenn Sie zu Inhalten vor dem Ende des Ad-Pods zurückkehren möchten, z. B. wenn ein EXT-X-CUE-IN-Tag erkannt wird, fügen Sie der URL des letzten Slate-Segments den Parameter sd= hinzu. Dieser Parameter verkürzt das Segment, um die Zeitachse des Videoplayers des Clients nicht zu beeinträchtigen. Der Wert für den Parameter sd= muss eine Ganzzahl sein, die die Dauer in Millisekunden angibt, um die das Segment gekürzt werden soll.
Im folgenden Beispiel wird ein Slate-Segment zusammengestellt:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
Die slate/0 im Beispiel steht für die Slate-Iterationsnummer. Anhand der Kompatibilität und der Caching-Funktion des Videoplayers Ihres Clients können Sie festlegen, ob Sie mit 0 beginnen und diese Zahl für jede Schleife des Slates erhöhen oder sie für alle Iterationen bei 0 belassen.
Zurück zum Inhalt
Nachdem Ihr Manifest-Manipulator alle Segmente aus dem Ad-Pod eingefügt hat, muss er wieder zum Contentstream wechseln. Wählen Sie eine der folgenden Methoden aus, um zum Contentstream zurückzukehren. Für jede Methode ist ein letztes Segment zur Neuausrichtung erforderlich, damit die Stream-Zeitachse korrekt bleibt.
Fill and Re-align (Füllen und neu ausrichten): Fügen Sie die Slate-Segmente ein und wiederholen Sie die Slate.
Geben Sie die Dauer an und fügen Sie zwischen den einzelnen Slate-Wiederholungen EXT-X-DISCONTINUITY-Elemente ein. Hängen Sie für das letzte Segment den Parameter sd= in Millisekunden an, damit er mit dem Beginn des Inhalts übereinstimmt.
Sofortige Rückgabe:Fügen Sie mit dem Parameter sd= ein einzelnes Segment für die Neuausrichtung ein und fahren Sie dann mit dem Inhalt fort.
Der Videoplayer wechselt ohne Änderung der Zeitachse zurück zum Inhalt.
Im folgenden Beispiel wird ein Übergang erstellt, indem der Rest der Werbeunterbrechungsdauer mit Slate-Segmenten gefüllt wird.
#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-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
Bei dieser Methode wird das Slate vom Manifest-Manipulator nach Bedarf wiederholt und der sd=-URL-Parameter wird nur an das letzte Slate-Segment angehängt. Dieser Prozess stimmt genau mit dem geplanten Start der zugrunde liegenden Inhalte überein.
Im folgenden Beispiel wird gezeigt, wie Sie ein einzelnes Slate-Segment mit dem Parameter sd= verwenden, um die Player-Zeitachse genau zu halten, wenn Sie die gesamte verbleibende Pause nicht mit wiederholten Slates füllen.
#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-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
Optional: Werbeunterbrechung planen
Um die Ausführungsrate zu erhöhen, senden Sie eine Early Ad Break Notification (EABN) mit der Dauer des Anzeigen-Pods, benutzerdefinierten Targeting-Parametern und SCTE-35-Signaldaten. Weitere Informationen finden Sie unter Benachrichtigungen über bevorstehende Werbeunterbrechungen senden.