In dieser Anleitung wird beschrieben, wie Sie mit der Methode „Ad pod Timing Metadata“ (ATM) Werbeunterbrechungen einfügen, um die genaue Zeit und 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:
- API für Metadaten zum Timing von Anzeigen-Pods (Ad Pod Timing Metadata, ATM): Ergebnisse von Entscheidungen zu Anzeigen-Pods abfragen, einschließlich der Dauer von Anzeigen und Slates.
- Endpunkt für Anzeigensegmente: Anzeigen- oder Slate-Segmente anfordern und den aktuellen Anzeigenblock 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-Event mit dem DAI-Typ Pod-Auslieferungs-Weiterleitung. 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.createLiveStreamEvents
aufzurufen. Setzen Sie den ParameterLiveStreamEvent.dynamicAdInsertionType
aufPOD_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 Videocontentwiedergabe die Google DAI-Sitzungs-ID und CUSTOM_ASSET_KEY aus der Anfrage, um die Anzeigenzusammenführung vorzubereiten.
Timing-Metadaten für Ad-Pods abrufen
So rufen Sie das Timing von Ad-Pods ab:
- Generieren Sie ein HMAC-Token.
- Rufen Sie die ATM API mit dem HMAC-Token auf.
Signiertes HMAC-Token generieren
So authentifizieren Sie Ihre Anfragen:
Erstellen Sie einen Token-String, indem Sie die folgenden Parameter in alphabetischer Reihenfolge durch eine Tilde
~
getrennt aneinanderhängen:Parameter Erforderlich oder optional Beschreibung ad_break_id
Erforderlich Ein String, den Sie zur Identifizierung der Werbeunterbrechung angeben, z. B. ad-break-1
. Verwenden Siepreroll
für Pre-Roll-Anzeigen.custom_asset_key
Erforderlich Der benutzerdefinierte Asset-Schlüssel des Livestream-Ereignisses. cust_params
Optional Benutzerdefinierte Targeting-Parameter. Weitere Informationen finden Sie unter Targeting-Parameter an einen Stream übertragen. exp
Erforderlich Die Zeit, zu der dieses Token abläuft, gemessen als die Gesamtzahl der Sekunden, die seit der Unix-Epoche vergangen sind. network_code
Erforderlich Ihr Google Ad Manager-Netzwerkcode. Weitere Informationen pd
Erforderlich Die Dauer der Werbeunterbrechung in Millisekunden. Bei Pre-Roll-Anzeigen wird dieser Parameter von Google DAI mit den Einstellungen für Ihr Livestream-Ereignis überschrieben. scte35
Optional Base64-codiertes SCTE-35-Signal. Prüfen Sie, ob das Signal korrekt ist. Wenn der Wert falsch ist, wird eine Nachricht an den X-Ad-Manager-Dai-Warning
-HTTP-Header in der Antwort gesendet und das Signal wird weiterhin weitergegeben, um eine Werbeunterbrechung zu erstellen. Weitere Informationen zu unterstützten Pausenmarkierungen finden Sie unter HLS-Integration.Laden Sie Ihren Google-Authentifizierungsschlüssel für die dynamische Anzeigenbereitstellung vom Typ HMAC herunter. Weitere Informationen finden Sie unter Anfragen für Videostreams der dynamischen Anzeigenbereitstellung authentifizieren.
Verwenden Sie den heruntergeladenen HMAC-Schlüssel, um die SHA256-Signatur des Token-Strings zu generieren.
Verketten Sie den Tokenstring und die generierte Signatur.
Wenden Sie die URL-Codierung auf den verketteten String an. Der codierte String ist das signierte HMAC-Token für die Authentifizierung der Anfragen an die Ad Pod Timing Metadata (ATM) API.
Im folgenden Beispiel wird ein signiertes HMAC-Token für Pre-Roll-Anzeigen generiert:
custom_asset_key="CUSTOM_ASSET_KEY"
exp="1750700000" # Expired on Mon Jun 23 2025 13:33:20 GMT-0400 (Eastern Daylight Time)
network_code="NETWORK_CODE"
ad_break_id="preroll"
pd="0" # Pod duration value is overridden by the livestream event settings.
# The HMAC authentication key associated with your livestream event in Google Ad Manager.
secret_key="24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C"
# Concatenate the parameters, keep the parameters alphabetically ordered by name.
token_string="ad_break_id=${ad_break_id}~custom_asset_key=${custom_asset_key}~exp=${exp}~network_code=${network_code}~pd=${pd}"
# Calculate the SHA256 signature of the token_string.
hmac_signature=$(echo -n "$token_string" | openssl dgst -sha256 -hmac "$secret_key" | awk '{print $2}')
# Concatenate the token string and the signature.
signed_token="${token_string}~hmac=${hmac_signature}"
url_encode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
# Apply URL encoding to the concatenated string.
url_encoded_signed_token=$(url_encode "$signed_token")
echo "Signed HMAC token:"
echo "${url_encoded_signed_token}"
# Example output:
# ad_break_id%3Dpreroll~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D21775744923~pd%3D180000~pod_id%3D5~hmac%3D24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C
Timing-Metadaten für Pre-Roll-Anzeigen anfordern
Prüfen Sie die Einstellungen für Pre-Rolls für Ihr Livestream-Event mit den folgenden Optionen:
- Pre-Rolls in Livestreams mit dynamischer Anzeigenbereitstellung (Beta)
- LiveStreamEvent.prerollsettings
Wenn Sie die Ergebnisse der Entscheidung über Pre-Roll-Anzeigen 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-Werbeblöcke ab:
- Das Livestream-Manifest wird geparst, 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 Werbe-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 Contentmanifest 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 jedes Variantenmanifests nach den Tags EXT-X-CUE-IN
und EXT-X-CUE-OUT
in Ihrem Stream, 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:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
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/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
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.
Behalte 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 den ads.segment_durations.values
, der in der JSON-Antwort der ATM API enthalten ist.
Wenn Sie einen Ad-Pod vorzeitig beenden möchten, wenn ein EXT-X-CUE-IN
-Tag erkannt wird, fügen Sie den Parameter d=
der URL des letzten Anzeigensegments hinzu. Dieser Parameter verkürzt das Segment, um die Zeitachse des Client-Videoplayers nicht zu beeinträchtigen.
Im folgenden Beispiel wird eine Pre-Roll-Anzeigensegment-URL im Manifest zusammengestellt. Anzeigensegmente 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 dem Manifest Werbesegmente hinzugefügt:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
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.00,
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.00,
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:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4
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 ermitteln. Wiederholen Sie die Sequenz der Segmentdauern nach Bedarf, um die gesamte Werbeunterbrechung zu füllen.
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 Sie alle Segmente aus dem Ad-Pod eingefügt haben, können Sie auf eine der folgenden Arten zum Contentstream zurückkehren:
Methode | Beschreibung | Auswirkungen auf den Videoplayer des Clients |
---|---|---|
Mit Slate-Segmenten füllen | Fügt die Slate-Segmente ein und wiederholt sie. Füllt die Dauer aus und fügt zwischen den einzelnen Slate-Wiederholungen EXT-X-DISCONTINUITY -Elemente ein. |
Keine Effekte. Der Videoplayer wechselt ohne Änderungen an der Zeitachse zurück zum Inhalt. |
Mit einem einzelnen Slate-Segment neu ausrichten | Fügt ein einzelnes Slate-Segment ein. Verwendet den Parameter d= , um die Dauer bis zum Beginn des Inhalts anzugeben. |
Keine Effekte. Der Videoplayer wechselt ohne Änderungen an der Zeitachse zurück zum Inhalt. |
Sofortige Rückgabe | Inhaltssegmente einfügen | Die Zeitachse des Videoplayers wird geändert. Ihr Client-Videoplayer muss die geänderte Zeitachse verarbeiten. |
Optional: Werbeunterbrechung planen
Um die Ausfüllrate zu erhöhen, senden Sie eine Early Ad Break Notification (EABN) mit der Dauer des Ad-Pods, benutzerdefinierten Targeting-Parametern und SCTE-35-Signaldaten. Weitere Informationen finden Sie unter Benachrichtigungen über bevorstehende Werbeunterbrechungen senden.