Die Pod Serving API bietet Zugriff auf Videoanzeigen-Pods mit adaptiver Bitrate, die so vorbereitet wurden, dass sie direkt in eine für den Nutzer sichtbare HLS- oder MPEG-DASH-Medienplaylist eingefügt werden können.
In diesem Leitfaden geht es um die Implementierung eines einfachen Servers zur Manifestbearbeitung für die Pod-Bereitstellung für VOD-Streams.
Stream-Manifestanfragen erhalten
Die Manifestbearbeitung muss einen API-Endpunkt bereitstellen, um Manifestanfragen von der Client-App des Videoplayers zu erfassen. Der Endpunkt muss mindestens eine Stream-ID aus der Clientplayer-App erfassen. Anhand dieser Stream-ID wird in Ihren Anzeigen-Pod-Anfragen die Streamingsitzung für Ad Manager identifiziert.
Außerdem musst du einige weitere Informationen erfassen, um den entsprechenden Contentstream zu identifizieren, z. B. eine Content ID.
Beispiel für Endpunkt einer Manifestanfrage
GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
Pfadparameter | |||||
---|---|---|---|---|---|
stream_id |
Die Ad Manager-Stream-ID aus der Videoplayer-App des Clients. | ||||
content_id |
Eine hypothetische ID, die dem Contentvideo in Ihrem System entspricht. | ||||
format |
Hypothetischer Parameter, der dem Streamformat entspricht. Eine der folgenden Möglichkeiten:
|
Contentstream abrufen
Verwenden Sie die Content ID aus der Manifestanfrage, um den Contentstream auszuwählen, der mit Anzeigen kombiniert werden soll.
Manifeste für Anzeigen-Pod anfordern
Wenn Sie Anzeigen von Ad Manager anfordern möchten, muss Ihr Server eine POST-Anfrage an den Endpunkt der Anzeigen-Pods senden und die angeforderten Codierungsprofile, das Anzeigen-Tag und die Targeting-Parameter übergeben. Diese Anfrage enthält auch die Stream-ID, die Sie in Schritt 1 erfasst haben.
Im Gegenzug erhalten Sie eine Liste von Anzeigen-Pod-Objekten mit Manifestdateien für die Anzeigen-Pods, die vom Anzeigen-Tag des Publishers angefordert wurden, sowie Informationen darüber, wann und wo die Objekte in den Inhalt eingefügt werden sollen.
POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
Pfadparameter | |
---|---|
network_code |
Der Ad Manager 360-Netzwerkcode des Publishers. |
stream_id |
Die Stream-ID aus der Videoplayer-App des Clients. |
JSON-Text
Textparameter | ||
---|---|---|
encoding_profiles |
Required |
Eine Liste mit JSON-Darstellungen der Codierungsprofile, die du für jede Werbeunterbrechung erhalten möchtest. Zusätzliche Informationen
Für eine möglichst nahtlose Wiedergabe sollte dies mit den Codierungsprofilen deines Contentstreams übereinstimmen. |
ad_tag |
Required |
Ein Anzeigen-Tag zum Anfordern von VMAP-Anzeigen |
cuepoints |
Optional |
Eine Liste von Cue-Punkten im Content-Stream, an denen Mid-Roll-Werbeunterbrechungen eingefügt werden. Cue-Punkte werden in Gleitkommasekunden gemessen.
Nur für VMAP-Antworten erforderlich, die Mid-Rolls mit positionsbasierten Zeitverschiebungen enthalten. Das kommt nicht häufig vor. |
content_duration_seconds |
Optional |
Die Contentdauer in Sekunden.
Nur für VMAP-Antworten, die Mid-Rolls enthalten, mit prozentualen Zeitverschiebungen erforderlich. Das kommt nicht häufig vor. |
manifest_type |
Optional |
Das Format der angeforderten Datenstreams, entweder hls oder dash . Der Standardwert ist hls .
|
dai_options |
Optional |
Zusätzliche Optionen, mit denen Aspekte der Darstellung der Manifeste gesteuert werden. Zusätzliche Informationen |
Codierungsprofil | ||
profile_name |
Required |
Eine Kennung für dieses Codierungsprofil. Dieser Wert kann ein beliebiger String sein. Es ist jedoch nicht möglich, mehrere Codierungsprofile mit demselben Namen im selben Stream zu haben. |
type |
Required |
Der Codierungstyp des in diesem Codierungsprofil beschriebenen Streams. Die Inhaltstypen sind: media , iframe und subtitles .
|
container_type |
Required |
Das von diesem Codierungsprofil verwendete Containerformat. Containerformate:
mpeg2ts , fmp4cmaf , hls_packed_audio
|
video_settings |
Optional |
Erforderlich, wenn der Codierungsprofiltyp iframe ist. Andernfalls ist sie nur zulässig, wenn der Medientyp „Video“ enthält. Weitere Informationen finden Sie unten. |
audio_settings |
Optional |
Erforderlich, wenn das Codierungsprofil Audiodaten enthält. Nur zulässig, wenn der Typ „Medien“ ist. Zusätzliche Informationen |
subtitle_settings |
Optional |
Erforderlich, wenn das Codierungsprofil Untertitel enthält. Zusätzliche Informationen |
Videoeinstellungen | ||
codec |
Required |
Der RFC6381-Codec-String.
Beispiel: |
bitrate |
Required |
Eine Ganzzahl, die die maximale Videobitrate dieses Profils in Byte pro Sekunde darstellt. |
frames_per_second |
Required |
Der Gleitkommawert pro Sekunde des Videos. |
resolution |
Required |
Ein JSON-codierter Wert, der „Breite“ und „Höhe“ des Videos in Pixeln enthält.
Beispiel: |
Audioeinstellungen | ||
codec |
Required |
Der RFC6381-Codec-String.
Beispiel: |
bitrate |
Required |
Eine Ganzzahl, die die maximale Audio-Bitrate dieses Profils in Byte pro Sekunde darstellt.
Beispiel: |
channels |
Required |
Eine Ganzzahl, die die Anzahl der Audiokanäle einschließlich Niederfrequenzkanälen darstellt. |
sample_rate |
Required |
Ganzzahl, die die Audio-Abtastrate in Hertz darstellt.
Beispiel: |
Untertiteleinstellungen | ||
format |
Required |
Das für In-Band-Untertitel verwendete Dateiformat. Unterstützte Werte sind webvtt und ttml .
|
language |
Optional |
Die Untertitelsprache als RFC5646-Sprachstring. Wenn dieser Wert angegeben ist, wird er nur für das DASH-Rendering verwendet.
Beispiel: |
Optionen für die dynamische Anzeigenbereitstellung | ||
dash_profile |
Optional |
Das MPEG-DASH-Profil, das auf Anzeigen-Pod-Manifeste angewendet werden soll. Diese Einstellung wird nur für DASH-Manifeste verwendet. Zulässige Werte sind live und on-demand . Der Standardwert ist on-demand .
Der Wert
Der Wert |
ad_pod_timeout |
Optional |
Die maximale Zeit, die für die Auswahl von Anzeigen und die Erstellung von Anzeigen-Pods benötigt wird, in Gleitkommasekunden. Nach Ablauf dieses Zeitraums werden in Ad Manager alle Anzeigen zurückgegeben, die bereits in der ad_pods -Antwort ausgewählt wurden, und die Verarbeitung wird beendet.
|
sam_id |
Optional |
Gibt einen alternativen Schlüssel zur Fehlerbehebung an, mit dem Sitzungen in der Überwachung der Streamaktivität gesucht werden können. |
Antwort
Antwortparameter | |
---|---|
valid_for |
Dauer, für die diese Anzeigen-Pod-Playlists im Format dhms (Tage, Stunden, Minuten, Sekunden) gültig sind.
|
valid_until |
Das Datum und die Uhrzeit, bis zu der diese Anzeigen-Pod-Playlists gültig sind, als ISO8601-Datum/Uhrzeit-String im Format yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm .
|
ad_pods |
Eine Liste der für diesen Stream ausgewählten Anzeigen-Pods. |
Anzeigen-Pod | |
manifest_uris |
Nur für HLS-Streams. Eine Zuordnung von Codierungsprofil-IDs zu HLS-Manifest-URIs. |
mpd_uri |
Nur für DASH-Streams. URI der DASH-MPD-Datei |
type |
Der Typ des Anzeigen-Pods. Die Anzeigen-Pod-Typen sind pre , mid oder post .
|
start |
Nur für Mid-Roll-Anzeigen-Pods. Die Position im Stream, an der dieser Anzeigen-Pod eingefügt werden soll, in Gleitkommasekunden. |
duration |
Die Dauer dieses Anzeigen-Pods in Gleitkommasekunden. |
midroll_index |
Nur für Mid-Roll-Anzeigen-Pods. Der Index des aktuellen Mid-Roll-Anzeigen-Pods. Die Indexierung beginnt mit 1 .
|
Beispielanfrage (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
Beispiel für den Anfragetext
Dies ist der Inhalt von request-body.json
, auf den im obigen cURL-Aufruf verwiesen wird.
{
"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"
}
Beispielantwort
{
"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
}
]
}
Anzeigen-Pods in Content einfügen
Wie Anzeigen-Pods in Contentstreams eingefügt werden, hängt von Ihrer Implementierung, dem Streamformat und den Funktionen ab, die Sie anhand der Formatspezifikationen implementieren. Die folgenden Workflows sind Vorschläge für den Umgang mit diesem Prozess. Die genauen Details Ihrer Implementierung können je nach Ihren Geschäftsanforderungen und Ihren Inhaltsstreams variieren.
HLS-Streams
Wenn Sie einen Stream im HLS-Format zusammenfügen, besteht der Contentstream aus einer mehreren Varianten-Playlist mit Links zu separaten Streammanifesten – einer für jedes Codierungsprofil. Ihre Anzeigen-Pods müssen in jedes dieser Variantenmanifeste eingefügt werden. Eine Möglichkeit besteht darin, alle Variantenmanifeste vorzubereiten und an ein Content Delivery Network (CDN) zum Hosten zu übergeben. Die endgültige Playlist mit mehreren Varianten besteht aus Links zu diesen CDN-gehosteten Manifesten.
Über Codierungsprofile iterieren
Erfassen Sie für jedes Codierungsprofil alle zugehörigen Manifeste des Anzeigen-Pods aus der Ad Manager-Antwort zusammen mit den zugehörigen Startzeiten. Lege für Pre-Roll-Anzeigen-Pods die Startzeit auf 0
fest. Verwenden Sie bei Post-Rolls die Dauer des Inhalts als Startzeit des Anzeigen-Pods. Ermitteln Sie den Variantenstream in der Playlist mit mehreren Varianten, der den Audio- und Videoeinstellungen jedes Codierungsprofils entspricht.
Beispiel für ein Array mit Anzeigen-Pods
"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
}
]
Beispielplaylist für Inhalte mit mehreren Varianten
#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
Beispiele für erfasste Variantendaten
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
Anzeigen in jedes Variantenmanifest einfügen
Gehen Sie für jeden Variantenstream die Segmente des Inhaltsmanifests durch und halten Sie dabei die gesamte verstrichene Inhaltszeit aufrecht. Wenn Sie die Startposition eines Anzeigen-Pods erreichen, extrahieren Sie die Liste der Segmente aus dem Manifest des Anzeigen-Pods, umschließen Sie die Liste der Segmente in zwei #EXT-X-DISCONTINUITY
-Tags und fügen Sie die Liste an der aktuellen Position im Inhaltsmanifest ein. Wiederholen Sie diesen Vorgang, bis alle Anzeigen-Pods und Variantenstreams verarbeitet sind.
Die resultierenden Manifeste müssen dem HLS-Standard entsprechen. Je nachdem, welche Funktionen der Spezifikation in Ihrem Inhaltsmanifest enthalten sind, müssen Sie möglicherweise einen letzten Durchlauf für das kombinierte Manifest ausführen, um Mediensequenznummern, Inhaltsdauer, Diskontinuitätssequenznummern und andere Tags zu korrigieren, die aktualisiert werden müssen, um die neuen Anzeigensegmente zu berücksichtigen. Sobald etwaige Abweichungen mit dem Standard behoben wurden, übertragen Sie jedes nutzerspezifische Variantenmanifest zum Hosting an Ihr CDN.
Wenn das Inhaltsmanifest verschlüsselt ist, müssen Sie den letzten Verschlüsselungsschlüssel, der vor dem Start des aktuellen Anzeigen-Pods gefunden wurde, in einem #EXT-X-KEY
-Tag speichern. Anschließend müssen Sie das Tag #EXT-X-KEY:METHOD=NONE
hinzufügen, um die Verschlüsselung vor dem ersten Segment jedes Anzeigen-Pods zu entfernen. Schließlich müssen Sie nach jedem Anzeigen-Pod vor dem ersten Inhaltssegment eine Kopie des gespeicherten #EXT-X-KEY
-Tags einfügen, um die Inhaltsverschlüsselung wiederherzustellen.
Beispiele für erfasste Variantendaten
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
Beispiel für ein Inhaltsmanifest
Dies ist der Inhalt des Manifests https://{...}/1080p.m3u8
, das in den erfassten Variantendaten aufgeführt ist.
#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
{...}
Beispiel für ein Manifest eines Anzeigen-Pods
Dies ist der Inhalt des Manifests https://dai.google.com/{...}/pod/1/profile/1080p.m3u8
, das in den erfassten Variantendaten aufgeführt ist.
#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
Beispielmanifest für zusammengefügte Varianten
Dies ist das resultierende kombinierte Variantenmanifest, das an das CDN übergeben und unter https://cdn.{...}/{userid}/1080p.m3u8
gehostet wird.
#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
{...}
Playlist mit mehreren Varianten erstellen
Erfassen Sie die CDN-Adressen für jedes abgeschlossene Variantenmanifest zusammen mit den übereinstimmenden Codierungsprofildetails und stellen Sie die Ergebnisse in einem neuen Manifest mit mehreren Varianten zusammen. Dieses nutzerspezifische Manifest wird als Antwort auf die Manifestanfrage zurückgegeben, die Sie in Schritt 1 erhalten haben.
Beispiel für eine finale Playlist mit mehreren Varianten
#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
MPEG DASH-Streams
Wenn Sie einen Stream im MPEG DASH-Format zusammenfügen, müssen Sie nur eine einzelne Datei erstellen. Dadurch lassen sich DASH-Streams einfacher zusammenfügen als HLS.
Eine ordnungsgemäß vorbereitete MPD-Datei (MPEG DASH Media präsentieren) sollte aus mehreren Zeiträumen bestehen, die jeweils mehrere Darstellungen enthalten. Jede Darstellung sollte einem Ihrer Codierungsprofile entsprechen. Jeder von Ad Manager zurückgegebene Anzeigen-Pod ist ebenfalls eine MPD-Datei, die eine Abfolge von Zeiträumen mit übereinstimmenden Darstellungen enthält.
Notieren Sie sich zum Zusammenfügen dieser MPD-Dateien die Startzeiten für jeden Anzeigen-Pod. Fügen Sie für Pre-Roll-Anzeigen die Zeiträume für Pre-Roll-Anzeigen vor einem beliebigen Inhaltszeitraum ein. Fügen Sie für Post-Roll-Anzeigen die Zeiträume für Post-Roll-Anzeigen nach allen Inhaltsperioden ein. Iterieren Sie die Zeiträume in der Inhalts-MPD und erfassen Sie die verstrichene Spielzeit für alle verarbeiteten Inhaltszeiträume. Wenn Sie eine Grenze zwischen Zeiträumen erreichen, die der Startzeit eines Anzeigen-Pods entsprechen, fügen Sie die Zeiträume aus der entsprechenden MPD-Datei des Mid-Roll-Anzeigen-Pods an dieser Grenze ein.
Die fertige zusammengefügte MPD-Datei muss vollständig den MPEG_DASH-Spezifikationen entsprechen. Sie müssen also möglicherweise noch einmal die endgültige Datei iterieren, um die Startzeiten des Zeitraums zu korrigieren, die Dauer der Medienpräsentation für die neu eingefügten Anzeigenzeiträume anzupassen und alle anderen Konflikte zu beheben, die durch den Stitching-Prozess entstanden sein könnten.
MPD-Datei mit Beispielinhalt
<?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>
Beispiel für JSON-Anzeigen-Pod
[{
"mpd_uri": "https://{...}pod/1.mpd",
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
}]
Beispiel-MPD für einen Anzeigen-Pod
Dies ist der Inhalt von mpd_uri
aus der JSON-Datei des Anzeigen-Pods oben.
<?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>
Beispiel für zusammengefügte MPD-Datei
Liefere dies als Antwort auf die ursprüngliche Stream-Manifest-Anfrage.
<?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>
Zusätzliche Ressourcen
- Pod-Auslieferung mit dem IMA SDK:
- Pod-Auslieferung mit der DAI API