Interfejs Pod Serving API zapewnia dostęp do bloków reklam wideo o adaptacyjnej szybkości transmisji danych przygotowanych w taki sposób, aby można je było bezpośrednio zszywać do playlisty multimediów HLS lub MPEG-DASH przeznaczonej dla użytkowników.
Ten przewodnik skupia się na wdrożeniu podstawowego serwera manipulującego plikiem manifestu bloku reklamowego w przypadku strumieni VOD.
Odbieranie żądań pliku manifestu strumienia
Manipulator pliku manifestu musi udostępnić punkt końcowy interfejsu API, który będzie nasłuchiwać żądań pliku manifestu z aplikacji klienta odtwarzacza. Punkt końcowy musi co najmniej zbierać identyfikator strumienia z aplikacji klienta odtwarzacza. Ten identyfikator strumienia jest używany do identyfikowania sesji strumieniowania w usłudze Ad Manager w żądaniach modułów reklamowych.
Musisz też zebrać inne informacje, aby zidentyfikować odpowiedni strumień treści, na przykład identyfikator treści.
Przykład punktu końcowego żądania pliku manifestu
GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
Parametry ścieżki | |||||
---|---|---|---|---|---|
stream_id |
Identyfikator strumienia Ad Managera z aplikacji klienta odtwarzacza wideo. | ||||
content_id |
Hipotetyczny identyfikator odpowiadający filmowi z Twojego systemu. | ||||
format |
Hipotetyczny parametr odpowiadający formatowi strumienia. Wybierz jedną z tych opcji:
|
Pobieranie strumienia treści
Użyj identyfikatora treści zebranego z żądania pliku manifestu, aby wybrać strumień treści, który ma być zszyty z reklamami.
Prośba o pliki manifestu bloków reklamowych
Aby żądać reklam z Ad Managera, serwer musi wysłać żądanie POST do punktu końcowego adpods, przekazując żądane profile kodowania i tag reklamy. To żądanie zawiera również identyfikator strumienia zebrany w kroku 1.
W zamian otrzymasz listę obiektów modułów reklamowych zawierających pliki manifestu modułów reklamowych żądanych przez tag reklamowy wydawcy oraz informacje o tym, kiedy i gdzie należy je wstawić do treści.
POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
Parametry ścieżki | |
---|---|
network_code |
Kod sieci Ad Managera 360 wydawcy. |
stream_id |
Identyfikator strumienia z aplikacji odtwarzacza wideo klienta. |
Treść w formacie JSON
Parametry ciała | ||
---|---|---|
encoding_profiles |
Required |
Lista reprezentacji w formacie JSON profili kodowania, które chcesz otrzymywać dla każdego przerwy na reklamę. Poniżej dowiesz się więcej na ten temat.
Aby zapewnić możliwie płynne odtwarzanie, należy dopasować go do zestawu profili kodowania użytych w strumieniu treści. |
ad_tag |
Required |
Tag reklamy do żądania reklam VMAP. |
cuepoints |
Optional |
Lista punktów wstawienia reklam w strumieniu treści, w których zostaną wstawione przerwy na reklamy w trakcie filmu. Punkty wstawienia są mierzone w sekundach z dokładnością do 6 cyfr po przecinku.
Wymagane tylko w przypadku odpowiedzi VMAP zawierających reklamy w trakcie filmu korzystające z przesunięć czasowych pozycji. To rzadkie zjawisko. |
content_duration_seconds |
Optional |
Czas trwania treści w sekundach.
Wymagany tylko w przypadku odpowiedzi VMAP zawierających reklamy w trakcie filmu korzystające z przesunięć czasowych w procentach. To rzadkie zjawisko. |
manifest_type |
Optional |
Format strumieni reklam, których dotyczy żądanie: hls lub dash . Wartością domyślną jest hls .
|
dai_options |
Optional |
Dodatkowe opcje kontrolujące sposób renderowania plików manifestu. Poniżej dowiesz się więcej na ten temat. |
Profil kodujący | ||
profile_name |
Required |
Identyfikator tego profilu kodowania. Ta wartość może być dowolnym ciągiem znaków, ale nie możesz mieć kilku profili kodowania o tej samej nazwie w tym samym strumieniu. |
type |
Required |
Typ kodowania strumienia opisanego przez ten profil kodowania. Typy treści: media , iframe , subtitles .
|
container_type |
Required |
Format kontenera używany przez ten profil kodowania. Formaty kontenera:
mpeg2ts , fmp4cmaf , hls_packed_audio
|
video_settings |
Optional |
Wymagany, jeśli typ profilu kodowania to iframe. W przeciwnym razie dozwolone tylko wtedy, gdy typ multimediów zawiera film. Szczegóły znajdziesz poniżej |
audio_settings |
Optional |
Wymagane, jeśli profil kodowania zawiera dźwięk. Dozwolone tylko wtedy, gdy typ to media. Poniżej dowiesz się więcej na ten temat. |
subtitle_settings |
Optional |
Wymagane, jeśli profil kodowania zawiera napisy. Poniżej dowiesz się więcej na ten temat. |
Ustawienia wideo | ||
codec |
Required |
Ciąg kodeka RFC6381.
Przykład: |
bitrate |
Required |
Liczba całkowita reprezentująca maksymalną szybkość transmisji bitów wideo tego profilu w bajtach na sekundę. |
frames_per_second |
Required |
Liczba klatek na sekundę filmu w postaci liczby zmiennoprzecinkowej. |
resolution |
Required |
Wartość zakodowana w formacie JSON zawierająca „szerokość” i „wysokość” filmu w pikselach.
Przykład: |
Ustawienia dźwięku | ||
codec |
Required |
Ciąg kodeka RFC6381.
Przykład: |
bitrate |
Required |
Wartość całkowita reprezentująca maksymalną szybkość transmisji audio tego profilu w bajtach na sekundę.
Przykład: |
channels |
Required |
Liczba całkowita określająca liczbę kanałów audio, w tym kanałów niskiej częstotliwości. |
sample_rate |
Required |
Liczba całkowita określająca częstotliwość próbkowania dźwięku w hercach.
Przykład: |
Ustawienia napisów | ||
format |
Required |
Format pliku używany przez napisy w paśmie. Obsługiwane wartości to webvtt lub ttml .
|
language |
Optional |
Język napisów jako ciąg tekstowy w formacie RFC5646. Jeśli zostanie podana, ta wartość będzie używana tylko do renderowania DASH.
Przykład: |
Opcje DAI | ||
dash_profile |
Optional |
Profil MPEG-DASH do zastosowania w plikach manifestu bloku reklamowego. To ustawienie służy tylko do obsługi plików manifestu DASH. Dozwolone wartości to live lub on-demand . Wartością domyślną jest on-demand .
Wartość
Wartość |
ad_pod_timeout |
Optional |
Maksymalny czas na wybór reklam i tworzenie bloków reklamowych w sekundach z dokładnością do 3 miejsc po przecinku. Po upływie tego czasu Ad Manager zwraca reklamy wybrane w odpowiedzi ad_pods i przestaje przetwarzać dane.
|
sam_id |
Optional |
Określa alternatywny klucz debugowania, który może służyć do wyszukiwania sesji w narzędziu do monitorowania aktywności w transmisji na żywo. |
Odpowiedź
Parametry odpowiedzi | |
---|---|
valid_for |
Czas, przez jaki playlisty z podzbiorami reklam są ważne, w formacie dhms (dni, godzin, minut i sekund).
|
valid_until |
Data i godzina, do których te playlisty reklam są ważne, jako ciąg znaków daty i godziny w formacie ISO 8601 (yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm ).
|
ad_pods |
Lista modułów reklamowych wybranych dla tego strumienia. |
Blok reklamowy | |
manifest_uris |
Tylko w przypadku strumieni HLS. Mapowanie identyfikatorów profili kodowania na identyfikatory URI manifestu HLS. |
mpd_uri |
Tylko w przypadku strumieni DASH. Identyfikator URI pliku MPD DASH. |
type |
Typ podgrupy reklam. Typy bloków reklamowych: pre , mid lub post .
|
start |
Tylko w przypadku bloków reklamowych w trakcie filmu. Pozycja w strumieniu, w której należy wstawić ten blok reklamowy (w sekundach z dokładnością do 3 cyfr po przecinku). |
duration |
Czas trwania tego bloku reklamowego w sekundach z wartością dziesiętno-wykładniczej. |
midroll_index |
Tylko w przypadku bloków reklamowych w trakcie filmu. Indeks bieżącego bloku reklamowego w trakcie filmu. Indeksowanie rozpoczyna się od 1 .
|
Przykładowe żądanie (cURL)
curl -X POST \
-d '@request-body.json' \
-H 'Content-Type: application/json' \
https://dai.google.com/ondemand/pods/api/v1/network/21775744923/streams/6e69425c-0ac5-43ef-b070-c5143ba68541:CHS/adpods
Przykładowa treść żądania
To jest zawartość request-body.json
, do której odwołuje się wywołanie cURL powyżej.
{
"encoding_profiles": [
{
"profile_name": "1080p",
"type": "media",
"container_type": "mpeg2ts",
"video_settings": {
"codec": "avc1.4d000c",
"bitrate": 5000000,
"frames_per_second": 30.0,
"resolution": {
"width": 1920,
"height": 1080
}
},
"audio_settings": {
"codec": "mp4a.40.5",
"bitrate": 300000,
"channels": 2,
"sample_rate": 48000
}
},
{
"profile_name": "360p",
"type": "media",
"container_type": "mpeg2ts",
"video_settings": {
"codec": "avc1.4d000d",
"bitrate": 1000000,
"frames_per_second": 30.0,
"resolution": {
"width": 640,
"height": 360
}
},
"audio_settings": {
"codec": "mp4a.40.5",
"bitrate": 64000,
"channels": 2,
"sample_rate": 48000
}
},
{
"profile_name": "subtitles-webvtt",
"type": "subtitles",
"subtitle_settings": {
"format": "webvtt"
}
}
],
"ad_tag": "https://pubads.g.doubleclick.net/gampad/ads?...",
"manifest_type": "hls"
}
Przykładowa odpowiedź
{
"valid_for": "8h0m0s",
"valid_until": "2023-03-24T08:30:26.839717986-07:00",
"ad_pods": [
{
"manifest_urls":{
"1080p": "https://{...}/pod/0/profile/1080p.m3u8",
"360p": "https://{...}/pod/0/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt"
},
"type": "pre",
"duration": 10.0
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/1/profile/1080p.m3u8",
"360p": "https://{...}/pod/1/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/1/profile/subtitles-en.vtt"
},
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
},
{
"manifest_urls":{
]"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
"360p": "https://{...}/pod/2/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt""
},
"type": "post",
"duration": 10.0
}
]
}
Wplatanie modułów reklamowych w treści
Proces łączenia modułów reklamowych ze strumieniami treści różni się w zależności od implementacji, formatu strumienia i funkcji, które chcesz zaimplementować zgodnie ze specyfikacją formatu. Poniższe przepływy pracy to sugestie dotyczące sposobu postępowania w tym przypadku. Szczegóły wdrożenia mogą się różnić w zależności od potrzeb firmy i strumieni treści.
strumienie HLS,
Jeśli zszywać będziesz strumień w formacie HLS, strumień treści będzie playlistą wielowariantową zawierającą linki do osobnych plików manifestu strumienia, po jednym dla każdego profilu kodowania. Twoje podzbiory reklam muszą zostać wstawione do każdego z tych plików manifestu wariantów. Jednym ze sposobów jest przygotowanie wszystkich plików manifestu wariantów i przekazanie ich do sieci dystrybucji treści (CDN) na potrzeby hostingu. Ostateczna playlista z wieloma wariantami to zestaw linków do tych plików manifestu hostowanych przez sieć CDN.
Przechodzenie przez profile kodowania
W przypadku każdego profilu kodowania pobierz wszystkie powiązane manifesty bloków reklam z odpowiedzi Ad Managera wraz z ich czasami rozpoczęcia. W przypadku podkładów reklam przed filmem ustaw czas rozpoczęcia na 0
. W przypadku reklam końcowych użyj czasu trwania treści jako czasu rozpoczęcia podgrupy reklam. Określ strumień wariantu w multiwariantowej playliście, który pasuje do ustawień dźwięku i obrazu każdego profilu kodowania.
Przykładowa tablica bloków reklamowych
"ad_pods": [
{
"manifest_urls":{
"1080p": "https://{...}/pod/0/profile/1080p.m3u8",
"360p": "https://{...}/pod/0/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/0/profile/subitles-en.vtt"
},
"type": "pre",
"duration": 10.0
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/1/profile/1080p.m3u8",
"360p": "https://{...}/pod/1/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/1/profile/subitles-en.vtt"
},
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
"360p": "https://{...}/pod/2/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/2/profile/subitles-en.vtt"
},
"type": "post",
"duration": 10.0
}
]
Przykładowa playlista z wieloma wariantami
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://{...}/subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{...}/360p.m3u8
Przykład zebranych danych wariantów
Encoding profile: "1080p"
Profile settings: {...}
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
0 -> https://{...}/pod/0/profile/1080p.m3u8
15 -> https://{...}/pod/1/profile/1080p.m3u8
600 -> https://{...}/pod/2/profile/1080p.m3u8
Wstawianie reklam w każdym pliku manifestu wariantu
W przypadku każdego strumienia wariantu przejrzyj segmenty pliku manifestu treści, zwracając uwagę na łączny upływ czasu trwania treści. Gdy dojdziesz do pozycji początkowej bloku reklamowego, wyodrębnij listę segmentów z pliku manifestu bloku reklamowego, ułóż listę segmentów w ramach dwóch tagów #EXT-X-DISCONTINUITY
i wstaw ją w bieżącej lokalizacji w pliku manifestu treści. Kontynuuj ten proces, aż przetworzone zostaną wszystkie podgrupy reklam i warianty.
Wygenerowane pliki manifestu muszą być zgodne ze standardem HLS. Dlatego w zależności od tego, które funkcje specyfikacji zawiera manifest treści, konieczne może być wykonanie ostatniego przejścia przez połączony plik manifestu w celu poprawienia numerów sekwencji multimediów, czasu trwania treści, numerów sekwencji przerwania i innych tagów, które należy zaktualizować, aby uwzględnić nowe segmenty reklam. Gdy usuniesz wszelkie rozbieżności ze standardem, prześlij do sieci CDN manifesty wariantów dla poszczególnych użytkowników, aby je hostować.
Jeśli manifest treści jest zaszyfrowany, musisz przechowywać ostatni klucz szyfrowania znaleziony przed rozpoczęciem bieżącego podgrupy reklam w tagu #EXT-X-KEY
. Następnie musisz dodać tag #EXT-X-KEY:METHOD=NONE
, aby usunąć szyfrowanie przed pierwszym segmentem każdego podzbioru reklam. Na koniec musisz dodać kopię zapisanego tagu #EXT-X-KEY
przed pierwszym segmentem treści po każdym podzbiorze reklam, aby przywrócić szyfrowanie treści.
Przykład zebranych danych wariantów
Encoding profile: "1080p"
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
0 -> https://dai.google.com/{...}pod/0/profile/1080p.m3u8
15 -> https://dai.google.com/{...}pod/1/profile/1080p.m3u8
600 -> https://dai.google.com/{...}pod/2/profile/1080p.m3u8
Przykładowy plik manifestu treści
To zawartość pliku manifestu https://{...}/1080p.m3u8
wymienionego w zbieranych danych wersji.
#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
Przykładowy blok reklamowy z plikiem manifestu
To zawartość pliku https://dai.google.com/{...}/pod/1/profile/1080p.m3u8
manifestu wymienionego w zbieranych danych wersji.
#EXTM3U
{...}
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
Przykład pliku manifestu złączonych wariantów
Jest to wynikowy zszyty manifest wersji, przekazany do CDN i hostowany na https://cdn.{...}/{userid}/1080p.m3u8
.
#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
Tworzenie playlisty z wieloma wariantami
Pobierz adresy CDN dla każdego ukończonego pliku manifestu wersji wraz z odpowiadającymi im szczegółami profilu kodowania i zmontuj wyniki w nowym pliku manifestu wersji. Ten plik manifestu dotyczący konkretnego użytkownika jest zwracany jako odpowiedź na żądanie pliku manifestu otrzymane w kroku 1.
Przykład końcowej playlisty z wieloma wariantami
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://cdn.{...}-subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/{userid}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/{userid}/360p.m3u8
strumienie MPEG DASH,
Jeśli zszywać strumień w formacie MPEG DASH, wystarczy wygenerować jeden plik. Dzięki temu strumienie DASH można łatwiej łączyć niż strumienie HLS.
Odpowiednio przygotowany plik opisu prezentacji multimedialnej MPEG DASH (MPD) powinien składać się z kilku okresów, z których każdy zawiera wiele reprezentacji. Każde z nich powinno odpowiadać jednemu z Twoich profili kodowania. Każdy blok reklamowy zwrócony przez Ad Managera jest też plikiem MPD zawierającym sekwencję okresów z odpowiadającymi sobie reprezentacjami.
Aby połączyć te pliki MPD, zacznij od zapisania czasów rozpoczęcia poszczególnych podgrup reklam. W przypadku reklam przed filmem wstaw okresy reklamy przed filmem przed każdym okresem treści. W przypadku reklam po filmie wstaw okresy reklamy po filmie po wszystkich okresach treści. Przetwarzanie wszystkich okresów w MPD treści z uwzględnieniem upływu czasu odtwarzania wszystkich przetworzonych okresów treści. Gdy dojdziesz do granicy między okresami odpowiadającą czasowi rozpoczęcia bloku reklamowego, wstaw w tym miejscu okresy z pliku MPD pasującego bloku reklamowego w trakcie filmu.
Ostateczny połączony plik MPD musi w pełni odpowiadać specyfikacji MPEG_DASH, więc może być konieczne jeszcze raz przejrzenie końcowego pliku w celu poprawienia czasów rozpoczęcia okresów, skorygowania czasu trwania prezentacji multimediów, aby uwzględnić nowo wstawione okresy reklamowe, oraz rozwiązania wszelkich innych konfliktów, które mogły wystąpić podczas procesu łączenia.
Przykładowy opis MPD
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M00.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Example Stream</Title>
</ProgramInformation>
<Period duration="PT0H0M15.000S" id="content-period-1">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-2">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-3">
...
</Period>
...
</MPD>
Przykładowy kod reklamy w formacie JSON
[{
"mpd_uri": "https://{...}pod/1.mpd",
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
}]
Przykład bloku reklamowego w plikach MPD
To jest zawartość elementu mpd_uri
z pliku JSON pod reklamą podanego powyżej.
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H0M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Ad Pod 1</Title>
</ProgramInformation>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
...
</Period>
...
</MPD>
Przykład połączonego pliku MPD
Prześlij go jako odpowiedź na początkowe żądanie manifestu strumienia.
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Example Stream</Title>
</ProgramInformation>
<Period duration="PT0H0M15.000S" id="content-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-2">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-3">
...
</Period>
...
</MPD>
Dodatkowe materiały
- Odtwarzanie bloków reklamowych za pomocą pakietu IMA SDK:
- Odtwarzanie bloków reklamowych w ramach dynamicznego wstawiania reklam za pomocą interfejsu API