Wstawianie reklam z metadanymi czasu trwania bloku reklamowego

Z tego przewodnika dowiesz się, jak wstawiać przerwy na reklamę za pomocą metody metadanych czasu trwania bloku reklamowego (ATM), aby pobierać dokładny czas i czas trwania przerw na reklamę, w tym reklam przed filmem.

Aby wstawiać reklamy przed filmem i zarządzać powrotem do treści po przerwach na reklamy w trakcie filmu, zalecamy wywoływanie tych interfejsów API:

W przypadku transmisji na żywo o dużej liczbie jednoczesnych wyświetleń zalecamy wywoływanie interfejsu API Early Ad Break Notification (EABN), aby zaplanować decyzje dotyczące reklam przed rozpoczęciem przerwy na reklamę.

Wymagania wstępne

Na początek musisz skonfigurować zdarzenie transmisji na żywo dla typu dynamicznego wstawiania reklam (DAI) wyświetlanie bloków reklamowych przekierowanie. Wybierz jedną z tych metod:

Pobieranie strumienia treści

Gdy użytkownik wybierze wydarzenie transmitowane na żywo, aplikacja kliencka wyśle do Google Ad Managera żądanie transmisji. W odpowiedzi strumieniowej aplikacja wyodrębnia identyfikator sesji Google DAI i metadane, aby uwzględnić je w żądaniu pliku manifestu strumienia.

W tym przykładzie identyfikator sesji Google DAI jest przekazywany do manipulatora pliku manifestu:

https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY

Podczas przetwarzania żądania odtworzenia treści wideo zapisz identyfikator sesji DAI Google i CUSTOM_ASSET_KEY z żądania, aby przygotować się do wstawiania reklam.

Pobieranie metadanych dotyczących czasu trwania bloku reklamowego

Aby pobrać czas trwania bloku reklamowego, wykonaj te czynności:

  1. Wygeneruj token HMAC.
  2. Wywołaj interfejs API bankomatu za pomocą tokena HMAC.

Generowanie podpisanego tokena HMAC

Aby uwierzytelnić żądania, wykonaj te czynności:

  1. Utwórz ciąg tokena, łącząc te parametry w kolejności alfabetycznej i oddzielając je tyldą ~:

    Parametr Wymagana czy opcjonalna Opis
    ad_break_id Wymagane Ciąg znaków, który określasz w celu identyfikacji przerwy na reklamę, np. ad-break-1. W przypadku reklam przed filmem użyj wartości preroll.
    custom_asset_key Wymagane Niestandardowy klucz pliku zdarzenia transmisji na żywo.
    cust_params Opcjonalny Parametry kierowania niestandardowego. Więcej informacji znajdziesz w artykule Dodawanie parametrów kierowania do strumienia.
    exp Wymagane Czas wygaśnięcia tego tokena mierzony jako łączna liczba sekund, które upłynęły od początku epoki systemu Unix.
    network_code Wymagane Twój kod sieci Google Ad Managera. Więcej informacji znajdziesz w artykule Gdzie znaleźć informacje o koncie Ad Managera.
    pd Wymagane Czas trwania przerwy na reklamę w milisekundach. W przypadku reklam przed filmem Google DAI zastępuje ten parametr ustawieniami zdarzenia transmisji na żywo.
    scte35 Opcjonalny Sygnał SCTE-35 zakodowany w formacie Base64. Sprawdź, czy sygnał jest prawidłowy. Jeśli jest nieprawidłowy, w odpowiedzi wysyłany jest komunikat do nagłówka HTTP X-Ad-Manager-Dai-Warning, a sygnał jest nadal propagowany w celu utworzenia bloku reklamowego. Więcej informacji o obsługiwanych znacznikach przerw na reklamę znajdziesz w artykule Integracja HLS.
  2. Pobierz klucz uwierzytelniania Google DAI typu HMAC. Więcej informacji znajdziesz w artykule Uwierzytelnianie żądań strumienia wideo na żywo za pomocą kluczy uwierzytelniania DAI.

  3. Użyj pobranego klucza HMAC, aby wygenerować podpis SHA256 ciągu tokena.

  4. Połącz ciąg tokena z wygenerowanym podpisem.

  5. Zastosuj kodowanie adresu URL do połączonego ciągu znaków. Zakodowany ciąg znaków to podpisany token HMAC służący do uwierzytelniania żądań interfejsu API metadanych o czasie trwania bloku reklamowego.

Poniższy przykład generuje podpisany token HMAC dla reklam przed filmem:

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

Metadane czasu trwania żądania w przypadku reklam przed filmem

Sprawdź ustawienia reklamy przed filmem w przypadku wydarzenia transmitowanego na żywo, korzystając z tych opcji:

Aby uzyskać wyniki decyzji dotyczącej reklamy przed filmem, wyślij żądanie do interfejsu ATM API.

Ten przykład wysyła żądanie ATM dotyczące reklam przed filmem:

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"

Wysyłanie prośby o metadane dotyczące czasu wyświetlania reklam w trakcie filmu

Aby pobrać metadane bloku reklamowego w przypadku reklam wstawianych w trakcie filmu, wykonaj te czynności:

  1. Przeanalizuj manifest transmisji na żywo, aby znaleźć znaczniki reklam zawierające czas i czas trwania każdej przerwy na reklamę w trakcie filmu.
  2. Wywołaj punkt końcowy interfejsu ATM API, aby poprosić o dokładny czas trwania bloku reklamowego i reklamy. Interfejs API zwraca obiekt JSON z wynikami decyzji dotyczących bloku reklamowego.

Ten przykład wysyła żądanie ATM dotyczące reklam w trakcie filmu:

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"

Jeśli operacja się powiedzie, zobaczysz dane wyjściowe podobne do tego obiektu JSON:

{
  "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
          ]
        }
      }
    }
  }
}

Wstawianie reklam do manifestu treści

W sekcjach poniżej znajdziesz instrukcje modyfikowania manifestu transmisji na żywo i dodawania segmentów reklam.

Określanie segmentów przerw na reklamy i wstawianie nieciągłości

Podczas przetwarzania każdego pliku manifestu odmiany zidentyfikuj w strumieniu tagi EXT-X-CUE-INEXT-X-CUE-OUT, które wskazują początek i koniec bloku reklamowego.

Zastąp tagi EXT-X-CUE-INEXT-X-CUE-OUT elementami EXT-X-DISCONTINUITY, aby odtwarzacz wideo klienta mógł przełączać się między treściami a reklamami.

W przykładzie poniżej tagi EXT-X-CUE-INEXT-X-CUE-OUT zostały zastąpione:

#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

Poniższy przykład przedstawia zastąpiony plik manifestu:

#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

Segmenty reklam DAI w Google nie są szyfrowane. Jeśli Twoje treści są zaszyfrowane, usuń szyfrowanie, wstawiając element EXT-X-KEY:METHOD=NONE przed pierwszym segmentem reklamy w każdej przerwie na reklamę. Po zakończeniu przerwy na reklamę przywróć szyfrowanie, wstawiając odpowiedni tag EXT-X-KEY.

Śledź czas rozpoczęcia, czas trwania i indeks nadchodzącej przerwy na reklamę.

Tworzenie adresów URL segmentów reklam

Zastąp segmenty treści między tagami EXT-X-DISCONTINUITY adresami URL w przypadku każdego segmentu reklamy. Aby określić, ile segmentów reklam wstawić, użyj wartości ads.segment_durations.values podanej w odpowiedzi JSON z interfejsu ATM API.

Aby wcześniej zakończyć blok reklamowy po wykryciu tagu EXT-X-CUE-IN, dodaj parametr d= do adresu URL ostatniego segmentu reklamy. Ten parametr skraca segment, aby nie wpływać na oś czasu odtwarzacza wideo klienta.

W tym przykładzie do manifestu dodawany jest adres URL segmentu reklamy przed filmem. Uwaga: segmenty reklam używają indeksu opartego na zerze:

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

W tym przykładzie pokazujemy, jak dodać do manifestu adres URL segmentu reklamy w trakcie filmu:

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

Poniższy przykład pokazuje, jak wstawić segmenty reklam do pliku manifestu:

#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

Tworzenie segmentów planszy

Aby wypełnić lukę między reklamą a treścią, wstaw segmenty planszy. Użyj tablicy slates.segment_durations.values z odpowiedzi JSON interfejsu ATM API, aby określić czas trwania każdego segmentu slajdu. W razie potrzeby powtarzaj sekwencję czasów trwania segmentów, aby wypełnić całą przerwę na reklamę.

W tym przykładzie tworzymy segment slajdów:

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

Symbol slate/0 w przykładzie oznacza numer iteracji slajdu. Sprawdź zgodność i możliwości buforowania odtwarzacza wideo klienta, aby określić, czy zacząć od 0 i zwiększać tę liczbę w przypadku każdej pętli, czy też pozostawić ją na poziomie 0 we wszystkich iteracjach.

Zarządzanie powrotem do treści

Po wstawieniu wszystkich segmentów z bloku reklamowego wybierz jedną z tych metod, aby wrócić do strumienia treści:

Metoda Opis Wpływ na odtwarzacz wideo klienta
Wypełnij segmentami planszy Wstawia segmenty tablicy i zapętla ją. Wypełnia czas trwania i wstawia elementy EXT-X-DISCONTINUITY między poszczególnymi iteracjami tablicy. Brak efektów.
Odtwarzacz wideo wraca do treści bez zmienionej osi czasu.
Ponowne wyrównanie za pomocą pojedynczego segmentu slate Wstawia pojedynczy segment tablicy. Używa parametru d=, aby wypełnić czas do rozpoczęcia treści. Brak efektów.
Odtwarzacz wideo wraca do treści bez zmienionej osi czasu.
Natychmiastowy zwrot Wstaw segmenty treści. Oś czasu odtwarzacza wideo zostanie zmieniona.
Odtwarzacz wideo klienta musi obsługiwać zmienioną oś czasu.

Opcjonalnie: zaplanuj przerwę na reklamę

Aby zwiększyć współczynnik wypełnienia, wyślij powiadomienie o wczesnej przerwie na reklamę (EABN) z czasem trwania bloku reklamowego, niestandardowymi parametrami kierowania i danymi sygnału SCTE-35. Więcej informacji znajdziesz w artykule Wysyłanie powiadomień o wcześniejszej przerwie na reklamy.