Wstawianie reklam z metadanymi czasu trwania bloku reklamowego

Z tego przewodnika dowiesz się, jak wstawiać przerwy na reklamę za pomocą metody Ad pod Timing Metadata (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 reklamę w trakcie filmu, zalecamy wywoływanie tych interfejsów API:

Opcjonalnie w przypadku transmisji na żywo o dużej współbieżności 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

Aby rozpocząć, musisz skonfigurować transmisję na żywo z dynamicznym wstawianiem reklam (DAI) typu Przekierowanie do wyświetlania bloku reklamowego. Wybierz jedną z tych metod:

Pobieranie strumienia treści

Gdy użytkownik wybierze transmisję na żywo, aplikacja kliencka wysyła żądanie strumienia do Google Ad Managera. W odpowiedzi strumienia aplikacja wyodrębnia identyfikator sesji Google DAI i metadane, które mają zostać uwzględnione 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 Google DAI i CUSTOM_ASSET_KEY z żądania, aby przygotować się do łączenia reklam.

Pobieranie metadanych dotyczących czasu trwania bloku reklamowego

Aby pobrać czas trwania bloku reklamowego:

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

Wysyłanie prośby o metadane dotyczące czasu trwania reklam przed filmem

Sprawdź ustawienia reklam przed filmem w transmisji na żywo, korzystając z tych opcji:

Aby pobrać wyniki decyzji dotyczących reklam przed filmem, wyślij żądanie do interfejsu API ATM.

W tym przykładzie wysyłamy żą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 trwania reklam w trakcie filmu

Aby pobrać metadane bloku reklamowego dotyczące reklam w trakcie filmu:

  1. Przeanalizuj plik manifestu 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 API ATM , aby poprosić o dokładny czas trwania bloku reklamowego i planszy. Interfejs API zwraca obiekt JSON z wynikami decyzji dotyczących bloku reklamowego.

W tym przykładzie wysyłamy żą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
          ]
        }
      }
    }
  }
}

Łączenie reklam z plikiem manifestu treści

W sekcjach poniżej dowiesz się, jak zmodyfikować plik manifestu transmisji na żywo i dodać segmenty reklam.

Określanie segmentów przerw na reklamę i wstawianie przerw

Podczas przetwarzania każdego wariantu pliku manifestu zidentyfikuj w strumieniu tagi EXT-X-CUE-IN i EXT-X-CUE-OUT, które wskazują początek i koniec przerwy na reklamę.

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

W tym przykładzie pliku manifestu zastępujemy tagi EXT-X-CUE-IN i EXT-X-CUE-OUT:

#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.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

W tym przykładzie pokazujemy 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/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Segmenty reklam Google DAI nie są szyfrowane. Jeśli Twoje treści są zaszyfrowane, usuń szyfrowanie, wstawiając element EXT-X-KEY:METHOD=NONE przed pierwszym segmentem reklamy każdej przerwy na reklamę. Na końcu przerwy na reklamę dodaj szyfrowanie, wstawiając odpowiedni element 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 każdego segmentu reklamy. Aby określić, ile segmentów reklam należy wstawić, użyj elementu ads.segment_durations.values podanego w odpowiedzi JSON z interfejsu API ATM.

Aby wrócić do treści przed zakończeniem bloku reklamowego, np. po wykryciu tagu EXT-X-CUE-IN, manipulator pliku manifestu musi dodać parametr d= do adresu URL końcowego segmentu reklamy. Ten parametr skraca segment, aby nie wpływać na oś czasu odtwarzacza wideo klienta.

W tym przykładzie tworzymy adres URL segmentu reklamy przed filmem w pliku manifestu: Pamiętaj, że 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 tworzymy adres URL segmentu reklamy w trakcie filmu w pliku manifestu:

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

W tym przykładzie wstawiamy segmenty reklam do pliku 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
#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
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Tworzenie segmentów planszy

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

Aby wrócić do treści przed zakończeniem bloku reklamowego, np. po wykryciu tagu EXT-X-CUE-IN, dodaj parametr d= do adresu URL końcowego segmentu planszy. Ten parametr skraca segment, aby nie wpływać na oś czasu odtwarzacza wideo klienta. Wartość parametru d= musi być liczbą całkowitą reprezentującą czas trwania w milisekundach, o który należy skrócić segment.

W tym przykładzie tworzymy segment planszy:

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

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

Zarządzanie powrotem do treści

Gdy manipulator pliku manifestu wstawi wszystkie segmenty z bloku reklamowego, musi wrócić do strumienia treści. Aby wrócić do strumienia treści, wybierz jedną z tych metod. Każda metoda wymaga końcowego segmentu ponownego wyrównania, aby zachować dokładność osi czasu strumienia.

Wypełnij i wyrównaj ponownie: wstaw segmenty planszy i powtórz planszę. Wypełnij czas trwania i wstaw EXT-X-DISCONTINUITY elementy między każdą iterację planszy. W przypadku ostatniego segmentu dołącz parametr d= w milisekundach aby dopasować go do początku treści.

Natychmiastowy powrót: wstaw pojedynczy segment planszy ponownego wyrównania, używając parametru d=, a następnie treści.

Odtwarzacz wideo wraca do treści bez zmienionej osi czasu.

W tym przykładzie tworzymy przejście, wypełniając pozostały czas trwania przerwy na reklamę segmentami planszy:

#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&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

W tej metodzie manipulator pliku manifestu powtarza planszę w razie potrzeby i dołącza parametr adresu URL d= tylko do ostatniego segmentu planszy. Ten proces jest dokładnie zgodny z zaplanowanym początkiem aktualnie emitowanych treści.

W tym przykładzie pokazujemy, jak używać pojedynczego segmentu planszy z parametrem d=, aby zachować dokładność osi czasu odtwarzacza, gdy nie wypełniasz całej pozostałej przerwy powtarzanymi planszami.

#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&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Opcjonalnie: planowanie przerwy na reklamę

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