Ten przewodnik zawiera informacje o tworzeniu aplikacji klienckiej do wczytywania transmisji na żywo HLS lub DASH za pomocą interfejsu Pod serving API i manipulatora pliku manifestu.
Wymagania wstępne
Zanim przejdziesz dalej, musisz mieć:
Niestandardowy klucz pliku w przypadku wydarzenia transmitowanego na żywo skonfigurowanego z
Pod serving redirect
typem DAI. Aby uzyskać ten klucz, wykonaj te czynności:Skonfiguruj transmisję na żywo na potrzeby dynamicznego wstawiania reklam.
Użyj biblioteki klienta interfejsu API SOAP, aby wywołać metodę
LiveStreamEventService.createLiveStreamEvents
z obiektemLiveStreamEvent
i właściwościądynamicAdInsertionType
ustawioną na wartość wyliczeniowąPOD_SERVING_REDIRECT
Wszystkie biblioteki klienta znajdziesz w artykule Biblioteki klienta i przykładowy kod.
Sprawdź, czy pakiet Interactive Media Ads (IMA) SDK jest dostępny na Twojej platformie. Aby zwiększyć przychody, zalecamy używanie pakietu IMA SDK. Więcej informacji znajdziesz w artykule Konfigurowanie pakietu IMA SDK na potrzeby DAI.
Tworzenie żądania strumienia
Gdy użytkownik wybierze strumień, wykonaj te czynności:
Wyślij żądanie
POST
do metody usługi transmisji na żywo. Więcej informacji znajdziesz w sekcji Metoda: stream.Przekaż parametry kierowania reklam w formatach
application/x-www-form-urlencoded
lubapplication/json
. To żądanie rejestruje sesję strumienia w usłudze Google DAI.Ten przykład wysyła żądanie strumieniowe:
Kodowanie formularza
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const params = new URLSearchParams({ cust_params: 'section=sports&page=golf,tennis' }).toString(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }); console.log(await response.json());
Kodowanie JSON
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cust_params: { section: 'sports', page: 'golf,tennis' } }) }); console.log(await response.json());
Jeśli operacja się powiedzie, zobaczysz dane wyjściowe podobne do tych:
{ "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e:DLS", "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/", "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata", "session_update_url": "https://dai.google.com/linear/.../session", "polling_frequency": 10 }
W odpowiedzi JSON znajdź identyfikator sesji strumienia i zapisz inne dane na potrzeby kolejnych kroków.
Metadane reklamy z ankietą
Aby sprawdzić metadane reklamy:
Odczytaj wartość
metadata_url
z odpowiedzi na rejestrację strumienia.Wyślij żądanie
GET
do punktu końcowego. Więcej informacji znajdziesz w sekcji Metoda: metadata.Ten przykład pobiera metadane reklamy:
const response = await fetch(metadata_url); console.log(await response.json());
Jeśli operacja się uda, otrzymasz odpowiedź PodMetadata dotyczącą bieżących i przyszłych przerw na reklamy:
{ "tags":{ "google_5555555555":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"firstquartile" }, "google_1234567890123456789":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"progress" }, ... }, "ads":{ "0000229834_ad1":{ "ad_break_id":"0000229834", "position":1, "duration":15, "clickthrough_url":"https://.../", ... }, ... }, "ad_breaks":{ "0000229834":{ "type":"mid", "duration":15, "ads":1 }, ... } }
Zapisz obiekt
tags
na potrzeby kolejnych kroków.Ustaw czasomierz za pomocą wartości
polling_frequency
, aby regularnie wysyłać żądania metadanych dla wszystkich kolejnych przerw na reklamy.
Wczytaj strumień do odtwarzacza wideo
Po uzyskaniu identyfikatora sesji z odpowiedzi rejestracyjnej przekaż go do manipulatora pliku manifestu lub utwórz adres URL pliku manifestu, aby załadować strumień do odtwarzacza wideo.
Informacje o przekazywaniu identyfikatora sesji znajdziesz w dokumentacji manipulatora pliku manifestu. Jeśli tworzysz manipulator pliku manifestu, zapoznaj się z artykułem Manipulator pliku manifestu w przypadku transmisji na żywo.
W tym przykładzie pokazujemy, jak utworzyć adres URL pliku manifestu:
https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"
Gdy odtwarzacz będzie gotowy, rozpocznij odtwarzanie.
Nasłuchiwanie zdarzeń reklamowych
Sprawdź format kontenera strumienia pod kątem metadanych czasowych:
Strumienie HLS z kontenerami Transport Stream (TS) używają znaczników ID3 z sygnaturą czasową do przenoszenia metadanych z sygnaturą czasową. Więcej informacji znajdziesz w artykule Informacje o formacie Common Media Application Format z transmisją na żywo przez HTTP (HLS).
Strumienie DASH używają elementów
EventStream
do określania zdarzeń w pliku manifestu.Strumienie DASH używają elementów
InbandEventStream
, gdy segmenty zawierają pola wiadomości o zdarzeniu (emsg
) z danymi ładunku, w tym tagami ID3. Więcej informacji znajdziesz w sekcji InbandEventStream.Strumienie CMAF, w tym DASH i HLS, używają pól
emsg
zawierających tagi ID3.
Aby pobrać tagi ID3 ze strumienia, zapoznaj się z przewodnikiem odtwarzacza wideo. Więcej informacji znajdziesz w przewodniku dotyczącym obsługi metadanych czasowych.
Aby pobrać identyfikator zdarzenia reklamy z tagów ID3:
- Filtruj zdarzenia według kategorii
scheme_id_uri
za pomocą operatorówurn:google:dai:2018
lubhttps://aomedia.org/emsg/ID3
. Wyodrębnij tablicę bajtów z pola
message_data
.Poniższy przykład dekoduje dane
emsg
do formatu JSON:{ "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3", "presentation_time": 27554, "timescale": 1000, "message_data": "ID3TXXXgoogle_1234567890123456789", ... }
Filtruj tagi ID3 w formacie
TXXXgoogle_{ad_event_ID}
:TXXXgoogle_1234567890123456789
Wyświetlanie danych o zdarzeniach związanych z reklamami
Aby znaleźć obiekt
TagSegment
:
Pobierz obiekt metadanych reklamy
tags
z metadanych reklamy z ankietą. Obiekttags
to tablica obiektówTagSegment
.Użyj pełnego identyfikatora zdarzenia reklamowego, aby znaleźć obiekt
TagSegment
o typieprogress
.Aby znaleźć obiekt
TagSegment
innego typu, użyj pierwszych 17 znaków identyfikatora zdarzenia reklamy.Po uzyskaniu wartości
TagSegment
użyj właściwościad_break_id
jako klucza, aby znaleźć obiektAdBreak
w obiekcie metadanych reklamyad_breaks
.Poniższy przykład znajduje obiekt
AdBreak
:{ "type":"mid", "duration":15, "ads":1 }
Użyj danych
TagSegment
iAdBreak
, aby wyświetlić informacje o pozycji reklamy w przerwie na reklamę. Na przykład:Ad 1 of 3
.
Wysyłanie pingów weryfikacyjnych multimediów
W przypadku każdego zdarzenia reklamy, z wyjątkiem typu progress
, wyślij ping weryfikacji multimediów.
Google DAI odrzuca zdarzenia progress
, a częste wysyłanie tych zdarzeń może mieć wpływ na wydajność aplikacji.
Aby wygenerować pełny adres URL do weryfikacji multimediów zdarzenia reklamy, wykonaj te czynności:
Z odpowiedzi strumienia dołącz pełny identyfikator zdarzenia reklamy do wartości
media_verification_url
.Wyślij żądanie
GET
z pełnym adresem URL:// media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/" const completeUrl = `${media_verification_url}google_5555555555123456789`; const response = await fetch(completeUrl);
Jeśli operacja się uda, otrzymasz odpowiedź ze stanem kodu
202
. W przeciwnym razie otrzymasz kod błędu404
.
Za pomocą Narzędzia do monitorowania strumienia aktywności (SAM) możesz sprawdzać historyczny dziennik wszystkich zdarzeń związanych z reklamami. Więcej informacji znajdziesz w artykule Monitorowanie transmisji na żywo i rozwiązywanie problemów z nią.