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 redirecttypem 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.createLiveStreamEventsz obiektem- LiveStreamEventi właściwością- dynamicAdInsertionTypeustawioną na wartość wyliczeniową- POD_SERVING_REDIRECTWszystkie 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 - POSTdo metody usługi transmisji na żywo. Więcej informacji znajdziesz w sekcji Metoda: stream.
- Przekaż parametry kierowania reklam w formatach - application/x-www-form-urlencodedlub- application/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_urlz odpowiedzi na rejestrację strumienia.
- Wyślij żądanie - GETdo 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 - tagsna 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 - EventStreamdo 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 - emsgzawierają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_uriza pomocą operatorówurn:google:dai:2018lubhttps://aomedia.org/emsg/ID3.
- Wyodrębnij tablicę bajtów z pola - message_data.- Poniższy przykład dekoduje dane - emsgdo 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 - tagsz metadanych reklamy z ankietą. Obiekt- tagsto tablica obiektów- TagSegment.
- Użyj pełnego identyfikatora zdarzenia reklamowego, aby znaleźć obiekt - TagSegmento typie- progress.
- Aby znaleźć obiekt - TagSegmentinnego typu, użyj pierwszych 17 znaków identyfikatora zdarzenia reklamy.
- Po uzyskaniu wartości - TagSegmentużyj właściwości- ad_break_idjako klucza, aby znaleźć obiekt- AdBreakw obiekcie metadanych reklamy- ad_breaks.- Poniższy przykład znajduje obiekt - AdBreak:- { "type":"mid", "duration":15, "ads":1 }
- Użyj danych - TagSegmenti- AdBreak, 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 - GETz 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łędu- 404.
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ą.