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:
- Interfejs API Ad pod Timing Metadata (ATM): wysyłanie zapytań o wyniki decyzji dotyczących bloków reklamowych, w tym o czas trwania reklam i plansz.
- Punkt końcowy segmentu reklamy: wysyłanie żądań segmentów reklam lub plansz z opcją zakończenia bieżącego bloku reklamowego.
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:
- Interfejs Ad Managera: skonfiguruj transmisję na żywo na potrzeby DAI.
- Interfejs API Ad Managera: użyj biblioteki klienta (dostępne
opcje), aby wywołać
LiveStreamEventService.createLiveStreamEventsmetodę. Ustaw parametrLiveStreamEvent.dynamicAdInsertionTypenaPOD_SERVING_REDIRECT.
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:
- Wygeneruj token HMAC.
- 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:
- Reklamy przed filmem w transmisjach na żywo z dynamicznym wstawianiem reklam (wersja beta)
- LiveStreamEvent.prerollsettings
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:
- Przeanalizuj plik manifestu transmisji na żywo, aby znaleźć znaczniki reklam zawierające czas i czas trwania każdej przerwy na reklamę w trakcie filmu.
- 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ę.