Die Pod Serving API bietet Zugriff auf Videoanzeigen-Pods mit adaptiver Bitrate, die so vorbereitet sind, dass sie direkt in eine HLS- oder MPEG-DASH-Medienplaylist für Nutzer eingefügt werden können.
In diesem Leitfaden wird die Implementierung eines einfachen Servers zur Manipulation von Manifesten für das Pod-Bereitstellen für VOD-Streams beschrieben.
Streammanifestanfragen empfangen
Der Manifest-Manipulator muss einen API-Endpunkt bereitstellen, um auf Manifestanfragen von der Client-App des Videoplayers zu warten. Dieser Endpunkt muss mindestens eine Stream-ID von der Client-Player-App erfassen. Diese Stream-ID wird verwendet, um die Streamingsitzung in Ihren Anzeigen-Pod-Anfragen in Ad Manager zu identifizieren.
Außerdem musst du noch einige andere Informationen erfassen, um den entsprechenden Inhaltsstream zu identifizieren, z. B. eine Content-ID.
Beispiel für einen Manifest-Anfrageendpunkt
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 Video mit den Inhalten in deinem System entspricht. | ||||
format |
Ein hypothetischer Parameter, der dem Streamformat entspricht. Eine der folgenden Optionen:
|
Contentstream abrufen
Verwende die Content-ID, die aus der Manifestanfrage erfasst wurde, um den Inhaltsstream auszuwählen, der mit Anzeigen zusammengefügt werden soll.
Manifeste für Anzeigen-Pods anfordern
Wenn du Anzeigen von Ad Manager anfordern möchtest, muss dein Server eine POST-Anfrage an den Endpunkt für Anzeigen-Pods senden und dabei die angeforderten Codierungsprofile und das Anzeigen-Tag übergeben. Diese Anfrage enthält auch die Stream-ID, die du in Schritt 1 erfasst hast.
Im Gegenzug erhalten Sie eine Liste von Anzeigen-Pod-Objekten mit Manifestdateien für die Anzeigen-Pods, die über das Anzeigen-Tag des Publishers angefordert wurden, sowie Informationen dazu, wann und wo sie in Ihre Inhalte 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
Körperparameter | ||
---|---|---|
encoding_profiles |
Required |
Eine Liste der JSON-Darstellungen der Codierungsprofile, die du für jede Werbeunterbrechung erhalten möchtest. Zusätzliche Informationen
Für eine möglichst reibungslose Wiedergabe sollte dies mit den Codierungsprofilen übereinstimmen, die in deinem Inhaltsstream verwendet werden. |
ad_tag |
Required |
Ein Anzeigen-Tag zum Anfordern von VMAP-Anzeigen. |
cuepoints |
Optional |
Eine Liste der Cue-Punkte im Contentstream, an denen Mid-Roll-Werbeunterbrechungen eingefügt werden. Cue-Punkte werden in Gleitkomma-Sekunden gemessen.
Nur für VMAP-Antworten erforderlich, die Mid-Roll-Anzeigen mit positionellen Zeitversatz enthalten. Das kommt selten vor. |
content_duration_seconds |
Optional |
Die Dauer des Inhalts in Sekunden.
Nur für VMAP-Antworten erforderlich, die Mid-Roll-Anzeigen mit prozentualen Zeitversatz enthalten. Das kommt selten vor. |
manifest_type |
Optional |
Das Format der angeforderten Anzeigenstreams, 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 beliebig sein. Es dürfen jedoch nicht mehrere Codierungsprofile mit demselben Namen für denselben Stream vorhanden sein. |
type |
Required |
Der Codierungstyp des Streams, der durch dieses Codierungsprofil beschrieben wird. Folgende Inhaltstypen sind zulässig: media , iframe , subtitles .
|
container_type |
Required |
Das von diesem Codierungsprofil verwendete Containerformat. Containerformate:
mpeg2ts , fmp4cmaf , hls_packed_audio
|
video_settings |
Optional |
Erforderlich, wenn der Typ des Codierungsprofils 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 Audio enthält. Nur zulässig, wenn der Typ „media“ 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 |
Die Framerate des Videos in Gleitkommaformat. |
resolution |
Required |
Ein JSON-codierter Wert, der die Videobreite und -höhe in Pixeln enthält.
Beispiel: |
Audioeinstellungen | ||
codec |
Required |
Der RFC6381-Codec-String.
Beispiel: |
bitrate |
Required |
Eine Ganzzahl, die die maximale Audiobitrate dieses Profils in Byte pro Sekunde darstellt.
Beispiel: |
channels |
Required |
Eine Ganzzahl, die die Anzahl der Audiokanäle einschließlich der Niederfrequenzkanäle angibt. |
sample_rate |
Required |
Eine Ganzzahl, die die Audioabtastrate in Hertz darstellt.
Beispiel: |
Untertiteleinstellungen | ||
format |
Required |
Das Dateiformat, das für In-Band-Untertitel verwendet wird. Unterstützte Werte sind webvtt oder ttml .
|
language |
Optional |
Die Sprache der Untertitel als RFC5646-Sprachstring. Wenn angegeben, wird dieser Wert nur für das DASH-Rendering verwendet.
Beispiel: |
Optionen für die dynamische Anzeigenbereitstellung | ||
dash_profile |
Optional |
Das MPEG-DASH-Profil, das auf Manifeste von Anzeigen-Pods angewendet werden soll. Diese Einstellung wird nur für DASH-Manifeste verwendet. Zulässige Werte sind live oder 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 das Erstellen von Anzeigen-Pods aufgewendet werden darf, in Gleitkommasekunden. Nach Ablauf dieser Zeit gibt Ad Manager alle Anzeigen zurück, die bereits in der ad_pods -Antwort ausgewählt wurden, und beendet die Verarbeitung.
|
sam_id |
Optional |
Gibt einen alternativen Debug-Schlüssel an, mit dem Sitzungen in der Überprüfung der Streamingaktivitäten abgerufen werden können. |
Antwort
Antwortparameter | |
---|---|
valid_for |
Dauer, für die diese Playlists mit Anzeigen-Pods gültig sind, im Format dhms (Tage, Stunden, Minuten, Sekunden).
|
valid_until |
Das Datum und die Uhrzeit, bis zu dem diese Playlists mit Anzeigen-Pods gültig sind, als ISO 8601-Datum/Uhrzeit-String im yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm -Format.
|
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 IDs von Codierungsprofilen zu HLS-Manifest-URIs. |
mpd_uri |
Nur für DASH-Streams. Der URI der DASH-MPD. |
type |
Der Anzeigen-Pod-Typ. Es gibt drei Arten von Anzeigen-Pods: pre , mid und 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 einen Anfragetext
Das 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 Inhalte einfügen
Wie du Anzeigen-Pods in deine Inhaltsstreams einfügst, hängt von deiner Implementierung, dem Streamformat und den Funktionen ab, die du aus den Spezifikationen des Formats implementierst. Die folgenden Workflows sind Vorschläge für den Umgang mit diesem Prozess. Die genauen Details deiner Implementierung können je nach deinen geschäftlichen Anforderungen und deinen Inhaltsstreams variieren.
HLS-Streams
Wenn du einen Stream im HLS-Format zusammenfügst, ist dein Inhaltsstream eine variantenreiche Playlist mit Links zu separaten Streammanifesten, jeweils eines für jedes Codierungsprofil. Ihre Anzeigen-Pods müssen in jedes dieser Manifeste für Varianten eingefügt werden. Eine Möglichkeit besteht darin, alle Variantenmanifeste vorzubereiten und zum Hosting an ein Content Delivery Network (CDN) weiterzuleiten. Die endgültige Playlist mit mehreren Varianten besteht aus einer Reihe von Links zu diesen CDN-gehosteten Manifesten.
Über Codierungsprofile iterieren
Erfasse für jedes Codierungsprofil alle zugehörigen Anzeigen-Pod-Manifeste aus der Ad Manager-Antwort zusammen mit den zugehörigen Startzeiten. Legen Sie für Pre-Roll-Anzeigen-Pods die Startzeit auf 0
fest. Verwende für Post-Rolls die Dauer des Inhalts als Startzeit des Anzeigen-Pods. Bestimme den Variantenstream in der Playlist mit mehreren Varianten, der den Audio- und Videoeinstellungen der einzelnen Codierungsprofile entspricht.
Beispiel für ein Anzeigen-Pod-Array
"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
}
]
Beispiel für eine Playlist 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
Beispiel für erhobene 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
Gehe für jeden Variantenstream die Segmente des Inhaltsmanifests durch und berechne die Gesamtdauer der Inhalte. Wenn du die Startposition eines Anzeigen-Pods erreichst, extrahiere die Liste der Segmente aus dem Manifest des Anzeigen-Pods, greife sie mit zwei #EXT-X-DISCONTINUITY
-Tags auf und füge sie an der aktuellen Position im Inhaltsmanifest ein. Wiederholen Sie diesen Vorgang, bis alle Anzeigen-Pods und Variantenstreams verarbeitet wurden.
Die resultierenden Manifeste müssen dem HLS-Standard entsprechen. Je nachdem, welche Funktionen der Spezifikation in deinem Inhaltsmanifest enthalten sind, musst du das kombinierte Manifest möglicherweise noch einmal durchgehen, um die Mediensequenznummern, die Inhaltsdauer, die Discontinuity Sequence Numbers und alle anderen Tags zu korrigieren, die aktualisiert werden müssen, um die neuen Anzeigensegmente zu berücksichtigen. Nachdem alle Abweichungen vom Standard behoben wurden, schieben Sie jedes nutzerspezifische Variantenmanifest zum Hosting in Ihr CDN.
Wenn Ihr Inhaltsmanifest verschlüsselt ist, müssen Sie den letzten Verschlüsselungsschlüssel, der vor Beginn des aktuellen Anzeigen-Pods gefunden wurde, in einem #EXT-X-KEY
-Tag speichern. Fügen Sie dann das Tag #EXT-X-KEY:METHOD=NONE
vor dem ersten Segment jedes Anzeigen-Pods hinzu, um die Verschlüsselung zu entfernen. Füge abschließend eine Kopie des gespeicherten #EXT-X-KEY
-Tags vor dem ersten Inhaltssegment nach jedem Anzeigen-Pod hinzu, um die Inhaltsverschlüsselung wiederherzustellen.
Beispiel für erhobene 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
Das ist der Inhalt des https://{...}/1080p.m3u8
-Manifests, 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 für einen Anzeigen-Pod
Das ist der Inhalt des https://dai.google.com/{...}/pod/1/profile/1080p.m3u8
-Manifests, 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
Beispiel für ein Manifest für zusammengeführte Varianten
Das ist das resultierende Manifest der zusammengefügten Variante, 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 fertige Variantenmanifest zusammen mit den zugehörigen Details zum Codierungsprofil und stellen Sie die Ergebnisse in einem neuen mehrvariantigen Manifest zusammen. Dieses nutzerspezifische Manifest wird als Antwort auf die Manifestanfrage zurückgegeben, die du in Schritt 1 erhalten hast.
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 du einen Stream im MPEG-DASH-Format zusammenfügst, musst du nur eine einzige Datei erstellen. Dadurch lassen sich DASH-Streams leichter zusammenführen als HLS-Streams.
Eine ordnungsgemäß vorbereitete MPEG-DASH-Datei mit einer Media-Präsentationsbeschreibung (MPD) sollte aus mehreren Zeiträumen bestehen, die jeweils mehrere Darstellungen enthalten. Jede Darstellung sollte mit einem Ihrer Codierungsprofile übereinstimmen. Jeder Anzeigen-Pod, der von Ad Manager zurückgegeben wird, ist auch eine MPD-Datei, die eine Sequenz von Zeiträumen mit übereinstimmenden Darstellungen enthält.
Um diese MPD-Dateien zusammenzuführen, notiere dir zuerst die Startzeiten für jeden Anzeigen-Pod. Füge bei Pre-Rolls die Zeiträume für Pre-Roll-Anzeigen-Pods vor allen Inhaltszeiträumen ein. Füge bei Post-Rolls die Zeiträume für den Anzeigen-Pod nach allen Zeiträumen für den Videocontent ein. Gehe die Zeiträume in der MPD des Inhalts durch und behalte die abgelaufene Wiedergabezeit für alle verarbeiteten Zeiträume im Blick. Wenn du eine Grenze zwischen Zeiträumen erreichst, die der Startzeit eines Anzeigen-Pods entspricht, füge an dieser Grenze die Zeiträume aus der MPD-Datei des übereinstimmenden Mid-Roll-Anzeigen-Pods ein.
Die finale zusammengeführte MPD-Datei muss vollständig den MPEG_DASH-Spezifikationen entsprechen. Daher musst du die finale Datei möglicherweise noch einmal durchgehen, um alle Startzeiten der Werbeunterbrechungen zu korrigieren, die Dauer der Medienpräsentation so anzupassen, dass sie die neu eingefügten Werbeunterbrechungen berücksichtigt, und alle anderen Konflikte zu beheben, die durch das Zusammenführen entstanden sein könnten.
Beispiel für MPD-Inhalte
<?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-Code für einen Anzeigen-Pod
[{
"mpd_uri": "https://{...}pod/1.mpd",
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
}]
Beispiel-MPD für Anzeigen-Pod
Das ist der Inhalt des 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 ein zusammengefügtes MPD
Sende diese Antwort auf die ursprüngliche Anfrage zum Streammanifest.
<?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
- Wiedergabe von Pod-Anzeigenbereitstellung mit dem IMA SDK:
- Wiedergabe der Pod-Auslieferung mit der DAI API