Anzeigen mit Timing-Metadaten für Anzeigenblöcke einfügen

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:

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:

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:

  1. Generieren Sie ein HMAC-Token.
  2. Rufen Sie die ATM API mit dem HMAC-Token auf.

Signiertes HMAC-Token generieren

So authentifizieren Sie Ihre Anfragen:

  1. 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 Sie preroll 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.
  2. 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.

  3. Verwenden Sie den heruntergeladenen HMAC-Schlüssel, um die SHA256-Signatur des Token-Strings zu generieren.

  4. Verketten Sie den Tokenstring und die generierte Signatur.

  5. 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:

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:

  1. Das Livestream-Manifest wird geparst, um die Anzeigenmarkierungen zu finden, die das Timing und die Dauer für jede Mid-Roll-Werbeunterbrechung enthalten.
  2. 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.