Przerwy na reklamy

Opis

Pakiet Web Deliveryr SDK zapewnia natywną obsługę przerw na reklamy i reklam towarzyszących w obrębie danego strumienia multimediów. Udostępnia on interfejsy API do określania pozycji reklamy, źródła reklam i działania przerw na reklamę oraz powiązanych z nimi klipów. W tym przewodniku Break oznacza interwał odtwarzania zawierającego co najmniej 1 reklamę lub bumper, a każda reklama i przerywnik są określane jako BreakClip. Przerwy są powiązane z multimediami, które są wczytywane lub odtwarzane.

Typy reklam

Pakiet SDK odbiornika internetowego obsługuje wstawianie reklam po stronie klienta (CSAI) i wstawianie reklam połączonych z serwerem (SSAI). Reklamy połączone z klientem można ustawiać ręcznie przez aplikację lub wyodrębniać z plików szablonów VAST i VMAP. Reklamy połączone z serwerem należy określić ręcznie przed wczytaniem treści jako reklamy umieszczone lub dynamicznie podczas odtwarzania treści jako wbudowane reklamy rozwinięte. Implementacje każdego z tych typów reklam znajdziesz szczegółowo poniżej.

ręcznie połączone przez klienta

Przerwa na reklamę ręcznie połączona z klientem jest rodzajem przerwy na reklamę, która jest łączona przez klienta i określana ręcznie przez aplikację za pomocą interfejsów API pakietu SDK. Ten typ reklamy nie jest umieszczony w strumieniu treści głównej. BreakClip musi zawierać contentId, czyli adres URL wskazujący treść reklamy, contentType opisujący format treści reklamy oraz title.

Break musi mieć isEmbedded i expanded ustawione na wartość domyślną false. Element position może być ustawiony na przerwę na reklamę przed filmem, w trakcie filmu lub po filmie (więcej informacji znajdziesz w sekcji pozycjonowanie przerwy na reklamę). Podczas przygotowywania reklamy do odtwarzania pakiet Web pickupr SDK generuje inną instancję odtwarzacza do wczytania i odtworzenia treści reklamy. Te przerwy wymagają użycia funkcji stitched timeline i należy je dodać statycznie (więcej informacji znajdziesz w sekcji dotyczącej wstawiania reklam). Poniższy przykład przedstawia podstawową implementację reklamy połączonej ręcznie przez klienta:

// Create the BreakClip.
let clipClient = new cast.framework.messages.BreakClip('bc_client');
clipClient.title = 'The Ad Title to be displayed during playback';
clipClient.contentId = 'https://example.com/ad.m3u8';
clipClient.contentType = 'application/vnd.apple.mpegurl';

// Optional: Used when HLS ad container formats differ from the main content's.
clipClient.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.FMP4;

// Create the Break using the BreakClip id above.
let breakPostrollClient = new cast.framework.messages.Break(
    'break_postroll_client', ['bc_client'], -1);
breakPostrollClient.isEmbedded = false; // Optional: default is false.
breakPostrollClient.expanded = false; // Optional: default is false.

VAST

Pakiet Web Deliveryr SDK obsługuje dodawanie reklam zgodnych ze standardem IAB VAST (szablon wyświetlania reklamy wideo). Jeśli szablon XML jest podany, jest analizowany w celu wygenerowania następnego klipu przerwy połączonego z klientem po wejściu w interakcję z przerwami.

Aby utworzyć reklamę VAST, aplikacja odbierająca musi utworzyć obiekt VastAdsRequest i podać go we właściwości BreakClip vastAdsRequest. Obiekt VastAdsRequest musi mieć zdefiniowaną właściwość adsResponse (czyli ciąg reprezentujący szablon XML) lub adTagUrl (adres URL, pod którym hostowany jest szablon XML). Jeśli podasz adres URL, pakiet SDK pobierze szablon. Kodowanie elementu Break jest zgodne z konwencjami reklam połączonych z klientem. Reklamy te można dodawać razem z innymi reklamami ręcznie połączonymi w ramach tej samej przerwy lub w osobnych przerwach na ten sam fragment treści. Poniższy przykład przedstawia podstawową implementację reklamy VAST:

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/ads.xml'

// Create the BreakClip.
let clipVast = new cast.framework.messages.BreakClip('bc_vast');
clipVast.vastAdsRequest = vastTemplate;

// Create the Break using the BreakClip id above.
let breakPostrollVast = new cast.framework.messages.Break(
    'break_postroll_vast', ['bc_vast'], -1);
breakPostrollVast.isEmbedded = false; // Optional: default is false.
breakPostrollVast.expanded = false; // Optional: default is false.

Po wpisaniu obiektu Break z parametrem BreakClip VAST pakiet SDK dostawcy treści internetowych opcjonalnie pobierze i przeanalizuje szablon. Podczas analizy pakiet SDK wygeneruje nowy BreakClip i uzupełni go wyodrębnionymi wartościami z szablonu, takimi jak contentId, contentType, title, duration, whenSkippable i clickThroughUrl. Wartość id wygenerowanego klipu przerwy na reklamę jest ustawiona na GENERATED:N, gdzie N to liczba całkowita, która zwiększa się o 1 dla każdego nowego klipu przerwy VAST utworzonego od 0. Wygenerowana reklama jest następnie dodawana do tablicy BreakClip. Wartość id każdego klipu przerwy VAST w bieżącym Break jest następnie zastępowana odpowiadającym mu id klipem przerwy Fragmenty kodu poniżej pokazują zmiany w wiadomościach MEDIA_STATUS, które dotyczą reklam przed taką przerwą i po niej.

Break i BreakClip przed rozpoczęciem przerwy w reklamach VAST.

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "bc_vast"
    ],
    "position": 0,
    "isWatched": false
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  }
]

Informacje o wartościach Break i BreakClip po przerwie w reklamie VAST.

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "GENERATED:0"
    ],
    "position": 0,
    "isWatched": true
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  },
  {
    "id": "GENERATED:0",
    "contentId": "https://example.com/break-clip-1.mpd",
    "contentType": "application/dash+xml",
    "title": "Ad Title Extracted from Template",
    "duration": 10,
    "whenSkippable": 5,
    "clickThroughUrl": "https://example.com/ad-target"
  }
]

VMAP

Pakiet Web Deliveryr SDK obsługuje standard IAB VMAP (Video Multiple Ad Playlisty). Po udostępnieniu VMAP pakiet SDK Web pickupr przeanalizuje odpowiedź VMAP i wygeneruje połączone z klientem obiekty Break dla dowolnych wpisów <AdBreak> w odpowiedzi. Wygeneruje także odpowiedni kod BreakClips z obiektem vastAdsRequest dla każdej pozycji <AdSource> podanej w VAPP. Aby umożliwić wstawianie reklam za pomocą VMAP, aplikacja musi utworzyć obiekt VastAdsRequest i przypisać go do właściwości vmapAdsRequest elementu MediaInformation w obszarze LoadRequestData. Reklamy te należy wstawiać statycznie (więcej informacji znajdziesz w sekcji Wstawianie reklam). Poniżej znajdziesz fragment kodu tworzenia żądania VMAP.

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/vmap.xml'

// Add it to the MediaInformation of the LoadRequest.
loadRequestData.media.vmapAdsRequest = vastTemplate;

umieszczony

Umieszczona przerwa na reklamę to typ przerwy na reklamę, który jest połączony po stronie serwera ze strumieniem głównej treści. Czas trwania właściwości Break jest odejmowany od czasu trwania głównej treści przy obliczaniu czasu odtwarzania treści.

BreakClip musi zawierać duration treści reklamy oraz title. Break musi mieć wartość isEmbedded ustawioną na true, a expandedfalse. position można ustawić jako przerwę na reklamę przed filmem lub w trakcie filmu. Przerwy na reklamę po filmie są obsługiwane z dokładnymi dodatnimi wartościami position. Więcej informacji na ten temat znajdziesz w sekcji pozycjonowanie przerw na reklamy. Po wywołaniu reklamy w celu jej odtworzenia pakiet Web Receivedr SDK kontynuuje odtwarzanie strumienia w miarę umieszczania w niej segmentów reklam. Ten typ reklamy nie ma dodatkowego mechanizmu ładowania. Odpowiednie metadane reklamy są wyświetlane użytkownikowi, gdy suwak odtwarzania mieści się w przedziale czasu przerwy. Te przerwy wymagają elementu embedded timeline i należy je dodać statycznie (więcej informacji znajdziesz w sekcji dotyczącej wstawiania reklam). Przykład poniżej przedstawia podstawową implementację reklamy embedded.

// Create the BreakClip.
let clipEmbedded = new cast.framework.messages.BreakClip('bc_embedded');
clipEmbedded.title = 'The Ad Title to be displayed during playback';
clipEmbedded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbedded = new cast.framework.messages.Break(
    'break_preroll_embedded', ['bc_embedded'], 0);
breakPrerollEmbedded.isEmbedded = true;
breakPrerollEmbedded.expanded = false; // Optional: default is false.

umieszczone rozwinięte

Umieszczona przerwa na reklamę to typ przerwy na reklamę, który jest połączony po stronie serwera ze strumieniem głównej treści. Czas trwania elementu Break jest uwzględniany w czasie trwania treści głównej przy obliczaniu czasu odtwarzania treści.

BreakClip musi zawierać duration treści reklamy oraz title. Break musi mieć wartość isEmbedded ustawioną na true oraz expanded na true. position można ustawić jako przerwę na reklamę przed filmem lub w trakcie filmu. Przerwy na reklamę po filmie są obsługiwane z dodatnimi wartościami position. Więcej informacji na ten temat znajdziesz w sekcji pozycjonowanie przerw na reklamy. Po wywołaniu reklamy w celu jej odtworzenia pakiet Web Receivedr SDK kontynuuje odtwarzanie strumienia w miarę umieszczania w niej segmentów reklam. Ten typ reklamy nie ma dodatkowego mechanizmu ładowania. Odpowiednie metadane reklamy są wyświetlane użytkownikowi, gdy suwak odtwarzania mieści się w przedziale czasu przerwy. Przerwy te wymagają parametru embedded timeline i można je dodawać statycznie lub dynamicznie (więcej informacji znajdziesz w sekcji dotyczącej wstawiania reklam). Poniższy przykład przedstawia podstawową implementację reklamy embedded expanded:

// Create the BreakClip.
let clipEmbeddedExpanded =
    new cast.framework.messages.BreakClip('bc_embedded_expanded');
clipEmbeddedExpanded.title = 'The Ad Title to be displayed during playback';
clipEmbeddedExpanded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbeddedExpanded = new cast.framework.messages.Break(
    'break_preroll_embedded_expanded', ['bc_embedded_expanded'], 0);
breakPrerollEmbeddedExpanded.isEmbedded = true;
breakPrerollEmbeddedExpanded.expanded = true;

Typy osi czasu odtwarzacza

Podczas tworzenia instancji odtwarzacza pakiet Web pickupr SDK wybiera typ osi czasu, który umożliwia odtwarzanie reklam podczas odtwarzania treści. Każda oś czasu umożliwia dodanie określonych typów przerw na reklamę. Typ osi czasu zależy od typów reklam występujących w czasie wczytywania w MediaInformation elementu LoadRequestData. Jeśli istnieją osadzone przerwy na reklamę, wybierana jest oś czasu embedded. Jeśli istnieją przerwy na reklamę połączone z klientem, wybierana jest oś czasu stitched. Jeśli nie ma żadnych reklam, pakiet SDK domyślnie używa osi czasu embedded. Po wybraniu osi czasu nie można jej zmienić dla bieżącego elementu multimedialnego. W tabeli poniżej znajdziesz szczegółowy opis każdego z harmonogramów.

Typ osi czasu Opis
osadzona oś czasu Reprezentacja czasu odtwarzania multimediów, która uwzględnia reklamy umieszczone w głównej treści (osadzone i osadzone przerwy na reklamę). Gdy występuje nierozszerzona przerwa na reklamę, jej czas trwania jest odejmowany od łącznego czasu trwania treści. Jeśli natomiast występuje rozwinięta przerwa reklamowa, jej czas jest traktowany jako część głównej treści.
połączonej osi czasu Reprezentacja czasu mediów, która obsługuje reklamy pochodzące z zewnętrznych plików multimedialnych (przerwy na reklamy połączone ręcznie, VAST i VMAP). Gdy to zrobisz, czas trwania przerwy na reklamę nie będzie stanowił części głównej treści.

Na rysunkach 1–3 poniżej widać niektóre treści z różnymi typami reklam i odpowiednimi wartościami na osi czasu. Dla treści jest ustawiona przerwa przed filmem zawierająca 2 klipy przerwy oraz przerwy na reklamy w trakcie filmu i po filmie zawierające pojedynczy klip przerwy. Pod każdą z tych wartości wyrównany jest czas ścienny od rozpoczęcia odtwarzania treści, czas odtwarzania multimediów głównej treści oraz czas aktualnie odtwarzanego klipu przerwy na reklamę.

Oś czasu reklam połączonych przez klienta
Rysunek 1. Oś czasu przedstawiająca niektóre treści i 3 powiązane z klientem przerwy na reklamę.


Oś czasu reklam umieszczanych z serwera połączonych z serwerem
Rysunek 2. Oś czasu przedstawiająca część treści i 3 przerwy na reklamy połączone z serwerem.


Oś czasu umieszczonych rozwiniętych reklam połączonych z serwerem
Rysunek 3. Oś czasu przedstawiająca część treści i 3 rozwinięte rozwinięte reklamy umieszczone w serwerze.

Pozycjonowanie przerwy

Pakiet Web pickupr SDK pozwala programistom określić, gdzie powinny zostać umieszczone przerwy na reklamę, ustawiając właściwość position obiektu Break. Ta wartość odpowiada czasowi odtwarzania multimediów w głównej treści i może służyć do tworzenia przerw na reklamę pre-roll, mid-roll oraz post-roll. Są one zdefiniowane w następujący sposób:

Pozycja przerwy Opis
reklama przed filmem Przerwa na reklamę, która jest odtwarzana przed główną treścią. Jest to wskazywane przez ustawienie w polu breakPosition wartości 0
reklama w trakcie filmu Przerwa na reklamę w trakcie odtwarzania treści. Oznacza to, że czas rozpoczęcia przerwy breakPosition jest późniejszy niż początek głównej treści, a czas jej zakończenia jest krótszy niż czas zakończenia głównej treści.
reklama po filmie Przerwa na reklamę, która jest odtwarzana po głównej treści. Wskazuje to ustawienie breakPosition na -1 na połączonych osiach czasu. W przypadku osadzonych osi czasu wartość breakPosition powinna być ustawiona na czas trwania głównej treści odjęty przez czas trwania przerwy. Nieobsługiwane w przypadku treści na żywo.

Macierz interoperacyjności

Dla ułatwienia w tabeli 1 znajdziesz omówienie typów reklam oraz ich zgodności z funkcjami związanymi z reklamami.

Tabela 1. Macierz interoperacyjności z reklamami
Obsługa funkcji reklama połączona ręcznie przez klienta VAST VMAP reklama umieszczona umieszczona rozwinięta reklama
zgodny z VAST ręcznie połączone przez klienta Nie dotyczy umieszczone rozwinięte umieszczony
oś czasu zszyte zszyte zszyte umieszczony umieszczony
wstawianie reklam statyczne statyczne statyczne statyczne statyczne, dynamiczne
usunięcie reklam
reklama przed filmem
reklama w trakcie filmu
reklama po filmie
pominięcie reklamy
przechwytywanie przerw na przechwytywanie
przechwytujący ładowanie klipu

Wydarzenia

Gdy wystąpią kluczowe zdarzenia przerwy, pakiet SDK przesyłania będzie wysyłać zdarzenia typu BreaksEvent. Aplikacja odbierająca może je subskrybować za pomocą interfejsu API PlayerManager addEventListener.

Zdarzenia te mogą służyć do statystyk i śledzenia odtwarzania reklam. Gdy używane są reklamy VMAP (lista reklam wideo z różnymi reklamami) i VAST (szablon wyświetlania reklamy wideo), wszystkie standardowe zdarzenia śledzenia udostępniane w odpowiedziach są automatycznie wysyłane przez pakiet SDK.

Typy zdarzeń są wymienione w tabeli 2 wraz ze szczegółowym opisem, kiedy są uruchamiane.

Cykl życia zdarzeń przerwania
Rysunek 4. Cykl życia zdarzeń przerwy w działaniu
Tabela 2.Zdarzenia przerwy i ich opisy
Zdarzenie przerwy Opis
BREAK_STARTED Uruchamiane, gdy bieżący czas odtwarzania treści głównych jest równy position nieobejrzanej przerwy.
BREAK_CLIP_LOADING Uruchamiane tylko wtedy, gdy rozpoczyna się wczytywanie połączonego klipu osi czasu.
BREAK_CLIP_STARTED Uruchamiane, gdy rozpoczyna się odtwarzanie klipu przerwy.
BREAK_CLIP_ENDED Uruchamiane po zakończeniu klipu przerwy. Pole endedReason zostanie wypełnione w tych sytuacjach:
  • Połączony klip przerwy na osi czasu odtworzony w całości.
  • Złączony klip przerwy na osi czasu przechodzi do kolejnego klipu przerwy.
  • Każdy klip przerwy jest pomijany.
  • Ostatni klip przerwy odtworzony w całości w trakcie osadzonej przerwy po filmie.
  • Wystąpił błąd.
BREAK_ENDED Uruchamiane, gdy kończy się ostatni klip przerwy w przerwie.

Wstawianie reklam

Pakiet SDK do przesyłania umożliwia aplikacjom wstawianie i usuwanie reklam w różnych momentach sesji przesyłania. Są 2 rodzaje wstawiania reklam: statyczne i dynamiczne. Statyczne wstawianie reklam wymaga określenia reklam w LoadRequestData przed utworzeniem odtwarzacza. Dynamiczne wstawianie reklam korzysta z interfejsu BreakManager addBreak API do wstawiania przerw w już wczytywanych treściach. Każdy typ metody wstawiania jest zgodny z określonymi typami reklam. Omówienie zgodności znajdziesz w tabeli interoperacyjności.

Statyczne wstawianie reklam

Statyczne wstawianie reklam polega na dodaniu odpowiednich metadanych reklamy przed utworzeniem odtwarzacza. Te informacje znajdziesz w MediaInformation dokumentu LoadRequestData. Wartość tę można na przykład ustawić w pierwotnym żądaniu wczytania połączonego nadawcy lub wstawić ją przez aplikację Web Received, przechwytując żądanie LOAD. Odtwarzacz zostanie utworzony po zwróceniu pakietu LoadRequestData do pakietu SDK Web Readr do przetworzenia w celu przetworzenia. Dowiedz się więcej o ładowaniu multimediów. Przykład poniżej pokazuje reklamę ręcznie połączoną z klientem dodaną w przechwycie do przechwytywania żądania LOAD.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {

  // Create the BreakClip.
  let clipClient = new cast.framework.messages.BreakClip('bc_client');
  clipClient.title = 'The Ad Title to be displayed during playback';
  clipClient.contentId = 'https://example.com/ad.mp4';
  clipClient.contentType = 'video/mp4';

  // Create the Break using the BreakClip id above.
  let breakPostrollClient = new cast.framework.messages.Break(
      'break_postroll_client', ['bc_client'], -1);

  // Set the ad information in the load request data.
  let media = loadRequestData.media;
  media.breakClips = [clipClient];
  media.breaks = [breakPostrollClient];

  return loadRequestData;
});

Dynamiczne wstawianie reklam

Dynamiczne wstawianie reklam polega na ustawieniu przerwy na reklamę podczas odtwarzania treści. W tym celu uzyskuje się instancję BreakManager i wywołuje interfejs API addBreak. Potrzebne są co najmniej 2 parametry: umieszczona rozwinięta Break i tablica BreakClip. Dołączona jest opcjonalna trzecia właściwość, która wymusza wysyłanie zmian do połączonych nadawców przez transmisję MediaStatus, gdy jest ustawiona na true. Przy dodawaniu przerw i klipów przerwania odpowiadające im identyfikatory nie mogą się powtarzać. Takie reklamy można dodawać dopiero po utworzeniu odtwarzacza. Pakiet Web pickupr SDK uruchamia zdarzenie PLAYER_LOADING po utworzeniu odtwarzacza. Poniżej znajdziesz przykład użycia w module obsługi zdarzeń, który reaguje na zmiany w metadanych ID3 strumienia i tworzy obiekty Break oraz BreakClip, które wstawiają je na osi czasu.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.ID3, (event) => {

  // Create the BreakClip.
  let clipEmbeddedExpanded = parseBreakClipFromData(event.segmentData);
  let breakEmbeddedExpanded = parseExpandedBreakFromData(event.segmentData);

  // Add the break and break clip.
  breakManager.addBreak(breakEmbeddedExpanded, [clipEmbeddedExpanded]);
});

Dynamiczne usuwanie reklam

Aby usunąć dynamiczne przerwy, w trakcie odtwarzania aplikacja powinna wywoływać metodę removeBreakById. Funkcja pobiera z osi czasu identyfikator przerwy w postaci ciągu znaków. Podany breakId musi wskazywać na osadzoną rozszerzoną przerwę na reklamę. Jeśli zostanie wykryty inny typ przerwy na reklamę, pozostanie ona na osi czasu. Zapoznaj się z poniższym przykładem, który usuwa przerwę.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.removeBreakById('break_midroll_embedded_expanded');

Sposób działania przerw

Pakiet SDK określa domyślne zachowanie, gdy odtwarzacz zaczyna i kończy przerwę, oraz umożliwia jego dalsze dostosowywanie za pomocą niektórych interfejsów API dostępnych w BreakManager.

Domyślne zachowanie przerwy

Gdy właściwość Break jest wprowadzana podczas zwykłego odtwarzania lub przez przewinięcie do elementu Break, pakiet SDK oceni, czy użytkownik już go widział, sprawdzając właściwość isWatched. Po utworzeniu przerwy domyślna wartość dla tej właściwości to false. Jeśli właściwość ma wartość true, przerwa nie zostanie odtworzona po wejściu, a główne treści będą nadal odtwarzane. Jeśli właściwość ma wartość false, przerwa zostanie odtworzona po jej wpisaniu.

Podczas wyszukiwania wcześniejszych przerw domyślna implementacja otrzymuje wszystkie elementy Break, których position znajduje się między wartościami seekFrom i seekTo operacji wyszukiwania. Z tej listy przerw pakiet SDK odtworzy funkcję Break, której wartość position jest najbliższa wartości seekTo, a jej właściwość isWatched jest ustawiona na false. Właściwość isWatched tej przerwy zostanie ustawiona na true, a odtwarzacz rozpocznie odtwarzanie jej klipów. Po obejrzeniu przerwy główne odtwarzanie zostanie wznowione od pozycji seekTo. Jeśli przerwa nie występuje, żadna przerwa nie zostanie odtworzona, a główna treść zostanie wznowiona od pozycji seekTo.

Podczas odtwarzania przerwy pakiet SDK przekaże wszelkie istotne aktualizacje do połączonych aplikacji nadawcy w MediaStatus. Te aplikacje będą korzystać z transmisji do aktualizowania interfejsu reklam przez odczytanie właściwości breakStatus. Tę właściwość definiuje się tylko podczas odtwarzania przerwy.

Aplikacje odbierające mogą też bezpośrednio wysyłać zapytania o informacje odnoszące się do pozycji suwaka odtwarzania względem bieżącego czasu elementu BreakClip wyświetlanego przez wywołanie PlayerManager getBreakClipCurrentTimeSec. Podobnie aplikacje mogą wysyłać zapytania o czas trwania bieżącego obiektu BreakClip, wywołując metodę getBreakClipDurationSec.

Niestandardowe zachowanie przerwy

Domyślne zachowanie przerw i klipów przerwy na reklamę można modyfikować za pomocą metod setBreakClipLoadInterceptor i setBreakSeekInterceptor podanych w BreakManager.

Przechwytywanie przerw na przechwytywanie

Element przechwytujący przerwy na reklamę umożliwia aplikacji kontrolowanie sposobu przewijania w przypadku przerw na reklamę. Funkcja jest wyzwalana po wysłaniu żądania operacji wyszukiwania, która przewija co najmniej jedną przerwę do przodu lub do tyłu. Po wywołaniu BreakSeekData jest przekazywany jako parametr do funkcji wywołania zwrotnego. Obiekt BreakSeekData zawiera tablicę obiektów Break, których właściwość position jest ustawiona na wartość między bieżącym czasem odtwarzania zdefiniowanym jako seekFrom a czasem docelowym przewijania seekTo.

Ten obiekt przechwytujący umożliwia modyfikowanie obiektów Break w odpowiednich przerwach. Po zaimplementowaniu tego elementu przechwytujący wyszukiwanie przerwy na reklamę musi określać, które przerwy na reklamy mają zostać odtworzone, zwracając opcjonalnie zmodyfikowany obiekt BreakSeekData. Odtwarzacz rozpocznie odtwarzanie wszystkich przerw podanych w zwracanej wartości. Jeśli parametr przechwytujący wyszukiwanie przerwy na żądanie nie zwróci wartości null lub nic nie zwróci, przerwa zostanie pominięta.

W przykładzie poniżej znajdziesz prostą implementację modułu przechwytującego. Zastąpi ono domyślne zachowanie i wyświetla wszystkie przeszukane przerwy na reklamę z wyjątkiem tych, które zostały już obejrzane.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakSeekInterceptor((breakSeekData) => {

  // Filter the breaks array by removing watched breaks.
  const unwatchedBreaks =
      breakSeekData.breaks.filter(adBreak => !adBreak.isWatched);
  breakSeekData.breaks = unwatchedBreaks;

  return breakSeekData;
});

Element przechwytujący wczytywanie klipu przerwania

Za pomocą modułu przechwytującego wczytywanie klipu przerwania można zmodyfikować obiekt BreakClip przed rozpoczęciem odtwarzania.

Element przechwytujący wczytywanie klipu przerwania jest wywoływany tylko w przypadku połączonych przerw na osi czasu i można go ustawić za pomocą setBreakClipLoadInterceptor. Przed wejściem Break punkt przechwytujący jest wywoływany raz dla każdej osoby BreakClip zdefiniowanej w tej przerwie. SDK przekazuje pierwotny obiekt BreakClip jako parametr funkcji wywołania zwrotnego. Aplikacja może następnie zmodyfikować plik BreakClip i zwrócić go, aby pakiet SDK mógł pobrać i wyświetlić klip przerwy ze zaktualizowaną konfiguracją. Jeśli zostanie zwrócona wartość null lub nie zostanie zwrócona żadna wartość, klip przerywany jest pomijany.

Poniżej znajdziesz przykład, który zmienia contentUrl klipów przerwania za pomocą wywołania funkcji getUrlFromClipId, gdzie id elementu BreakClip jest mapowany na adres URL.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
    (breakClip, breakClipLoadInterceptorContext) => {

  // Obtains the URL of a break clip id from a function call.
  breakClip.contentUrl = getUrlFromClipId(breakClip.id);

  return breakClip;
});

Pomijanie reklam

Pakiet Web pickupr SDK udostępnia interfejsy API umożliwiające pomijanie przerw na reklamy i poszczególnych klipów przerw na reklamy w ramach danej przerwy. Pakiet SDK umożliwia też użytkownikom opcjonalnie pomijanie klipów przerwania przez interakcję z aplikacjami nadawcy lub inteligentnymi ekranami.

Klipy przerwy na reklamę możliwe do pominięcia przez użytkownika

Gdy ustawisz klipy przerwy jako możliwe do pominięcia, użytkownicy będą mogli wchodzić w interakcje z powiązanymi aplikacjami nadawcy i inteligentnymi ekranami, aby opcjonalnie pominąć pozostałą część aktualnie odtwarzanego klipu. Ustawienie dla właściwości whenSkippable nieujemnej liczby sekund spowoduje włączenie tej funkcji w obiekcie BreakClip. Gdy klip przerwy będzie odtwarzany przez określoną liczbę sekund, odtwarzacz uzna, że klip przerwy można pominąć. Ustawienie tej wartości na 0 umożliwia użytkownikom natychmiastowe pominięcie klipu z przerwą.

// Create the BreakClip.
let clip = new cast.framework.messages.BreakClip('bc');
clip.title = 'The Ad Title to be displayed during playback';
clip.whenSkippable = 10; // Users can skip the clip after 10 seconds of playback.

Te informacje można ustawić w pierwotnym żądaniu wczytania nadawcy lub w aplikacji odbierającej. Po pominięciu klip przerwy na reklamę na połączonej osi czasu przerwy na reklamę spowoduje zatrzymanie odtwarzania bieżącego klipu. Odtwarzacz wczyta następny klip przerwy (jeśli jest dostępny) lub główna treść. Pominięcie klipu przerwy na reklamę na osadzonej osi czasu powoduje przewinięcie do jego końca i kontynuowanie odtwarzania strumienia.

Automatyczne pomijanie reklam

Reklamy mogą być też pomijane automatycznie bez udziału użytkownika.

Aby pominąć całą przerwę od odtwarzania, aplikacja powinna ustawić właściwość isWatched właściwości Break na true. Możesz to zrobić w dowolnym momencie podczas sekwencji wczytywania lub odtwarzania treści. Odtwarzacz ocenia właściwość isWatched, gdy czas przerwy w treści (position) zostanie osiągnięty w czasie trwania głównej treści. Wtedy odtwarzacz decyduje, czy należy wstawić przerwę. Zobacz poniższy przykład, który odtwarza wszystkie przerwy i zmienia wartość podczas wczytywania odtwarzacza.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.PLAYER_LOADING,
    (event) => {

  // Obtain the breaks and iterate through each item to skip all ad breaks.
  let breaks = breakManager.getBreaks();
  breaks.forEach((brk) => {
    brk.isWatched = true;
  });
});

Aby automatycznie pomijać określony klip przerwy, należy użyć przechwytującego ładowanie klipu przerwania. Zwrócenie wartości null lub niezwrócenie wartości w funkcji wywołania zwrotnego powoduje pominięcie klipu w tej przerwie.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
      (breakClip, breakClipLoadInterceptorContext) => {
  return null;
});