Manifestbearbeitung für VOD-Streams

Die Pod Serving API bietet Zugriff auf Videoanzeigen-Pods mit adaptiver Bitrate. sodass sie direkt in eine für den Nutzer sichtbare HLS- oder MPEG-DASH-Medienplaylist.

In diesem Leitfaden geht es um die Implementierung einer grundlegenden Manifestbearbeitung für die Pod-Auslieferung Server für VOD-Streams.

Anfragen für Streamingmanifeste erhalten

Die Manifestbearbeitung muss einen API-Endpunkt bereitstellen, um das Manifest zu überwachen von der Videoplayer-Client-App gesendet. Dieser Endpunkt muss mindestens eine Stream-ID von der Client-Player-App abrufen. Diese Stream-ID wird für Folgendes verwendet: die Streamingsitzung in Ihren Anzeigen-Pod-Anfragen für Ad Manager identifizieren.

Sie müssen auch einige andere Informationen erfassen, um die entsprechenden z. B. eine Content-ID.

Beispiel für Endpunkt einer Manifest-Anfrage

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 Inhaltsvideo in deinem System entspricht.
format Ein hypothetischer Parameter, der dem Streamformat entspricht. Entweder:
mpd Für MPEG-DASH-Streams
m3u8 Für HLS-Streams

Contentstream abrufen

Die Inhalte werden anhand der Content ID ausgewählt, die in der Manifestanfrage erfasst wurde. einen Stream, um Anzeigen mit Anzeigen zusammenzufügen.

Manifeste des Anzeigen-Pods anfordern

Um Anzeigen von Ad Manager anzufordern, muss Ihr Server eine POST-Anfrage an die Anzeige senden Pod-Endpunkt, die angeforderten Codierungsprofile, das Anzeigen-Tag und das Targeting übergeben. Parameter. Diese Anfrage enthält auch die Stream-ID, die Sie in Schritt erfasst haben. 1.

Im Gegenzug erhalten Sie eine Liste mit Anzeigen-Pod-Objekten, die Manifestdateien für die vom Anzeigen-Tag des Publishers angeforderten Anzeigen-Pods und Informationen wo sie im Content 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 Stream-ID aus der Videoplayer-App des Clients

JSON-Text

Körperparameter
encoding_profiles Required Eine Liste der JSON-Darstellungen der Codierungsprofile, die Sie empfangen möchten für jede Werbeunterbrechung. Zusätzliche Informationen

Für eine möglichst nahtlose Wiedergabe sollte diese Codierungsprofile, die in Ihrem Contentstream verwendet werden.

ad_tag Required Ein Anzeigen-Tag zum Anfordern von VMAP-Anzeigen.
cuepoints Optional Eine Liste von Cue-Punkten im Contentstream, an denen Mid-Roll-Werbeunterbrechungen ausgelöst werden eingefügt werden. Cue-Punkte werden in Gleitkommasekunden gemessen.

Nur für VMAP-Antworten erforderlich, die Mid-Rolls mit positionalen Zeitverschiebungen. Das ist selten.

content_duration_seconds Optional Die Contentdauer in Sekunden.

Nur für VMAP-Antworten erforderlich, die Mid-Rolls mit percentage. Das ist selten.

manifest_type Optional Das Format der angeforderten Anzeigen-Streams, entweder hls oder dash. Der Standardwert ist hls.
dai_options Optional Zusätzliche Optionen, die Aspekte des Renderings der Manifeste steuern. Zusätzliche Informationen
Codierungsprofil
profile_name Required Eine Kennung für dieses Codierungsprofil. Dieser Wert kann ein beliebiger String sein, auswählen, aber du kannst nicht mehrere Codierungsprofile mit demselben Namen auf denselben Stream ansehen.
type Required Der Codierungstyp des von diesem Codierungsprofil beschriebenen Streams. Inhalt Typen sind: 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 nur zulässig, wenn der Medientyp „Video“ enthält. Siehe Details siehe unten
audio_settings Optional Erforderlich, wenn das Codierungsprofil Audio enthält. Nur zulässig, wenn folgender Typ ist: Medien. Zusätzliche Informationen
subtitle_settings Optional Erforderlich, wenn das Codierungsprofil Untertitel enthält. Zusätzliche Informationen
Videoeinstellungen
codec Required Der RFC6381-Codec-String.

Beispiel: avc1.4d000c

bitrate Required Eine Ganzzahl für die maximale Video-Bitrate dieses Profils in Byte pro 2.
frames_per_second Required Die Gleitkommazahl pro Sekunde des Videos.
resolution Required Ein JSON-codierter Wert, der das Video „Breite“ und „Höhe“ in Pixeln enthält.

Beispiel: {"width": 640, "height": 320}

Audioeinstellungen
codec Required Der RFC6381-Codec-String.

Beispiel: mp4a.40.5

bitrate Required Eine Ganzzahl für die maximale Audio-Bitrate dieses Profils in Byte pro 2.

Beispiel: 300000

channels Required Eine Ganzzahl, die die Anzahl der Audiokanäle einschließlich niedriger Frequenz darstellt Kanäle.
sample_rate Required Eine Ganzzahl, die die Audioabtastrate in Hertz darstellt.

Beispiel: 4800

Einstellungen für Untertitel
format Required Das für In-Band-Untertitel verwendete Dateiformat. Unterstützte Werte: webvtt oder ttml.
language Optional Die Sprache der Untertitel als RFC5646-Sprachstring. Dieser Wert, falls angegeben, wird nur für das DASH-Rendering verwendet.

Beispiel: en-us

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 verwendet für Nur DASH-Manifeste. Zulässige Werte sind live oder on-demand. Der Standardwert ist on-demand.

Der Wert live entspricht dem MPEG-DASH-Profil. "urn:mpeg:dash:profile:isoff-live:2011".

Der Wert on-demand entspricht dem MPEG-DASH-Profil. urn:mpeg:dash:profile:isoff-on-demand:2011.

ad_pod_timeout Optional Die maximale Zeit, die für die Auswahl von Anzeigen und die Erstellung von Anzeigen-Pods im Floating-Format benötigt wird Punktsekunden. Nach Ablauf dieser Zeit werden in Ad Manager alle Anzeigen, die bereits in der ad_pods-Antwort ausgewählt wurden, werden gestoppt Datenverarbeitung.
sam_id Optional Gibt einen alternativen Debug-Schlüssel an, mit dem Sitzungen in der Stream-Aktivitäten überwachen.

Antwort

Antwortparameter
valid_for Dauer, für die diese Anzeigen-Pod-Playlists in dhms gültig sind (Tage, Stunden, Minuten, Sekunden).
valid_until Datum und Uhrzeit der Gültigkeit dieser Anzeigen-Pod-Playlists gemäß ISO 8601 Datum/Uhrzeit-String in 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 Codierungsprofil-IDs zu URIs des HLS-Manifests.
mpd_uri Nur für DASH-Streams. Der URI der DASH-MPD.
type Der Typ des Anzeigen-Pods. 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 in Gleitkommasekunden eingefügt werden soll.
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. 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

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 Sie Anzeigen-Pods in Ihren Contentstreams einfügen, hängt davon ab, von der Implementierung, dem Streamformat und den Funktionen, aus den Formatspezifikationen implementieren. Die folgenden Workflows sind Vorschläge dazu, wie Sie diesen Vorgang handhaben können. Die genauen Details Ihrer kann je nach Geschäftsanforderungen und Content variieren. Streams.

HLS-Streams

Wenn Sie einen Stream im HLS-Format zusammenfügen, ist er ein Multivariante Playlist von Links zu separaten Streammanifesten, jeweils eines für jedes Codierungsprofil. Ihre Anzeige Pods müssen in jedes dieser Variantenmanifeste eingefügt werden. Eine Möglichkeit, um Bereiten Sie alle Variantenmanifeste vor und übergeben Sie sie an einen Content- Delivery Network (CDN) für Hosting. Die endgültige Playlist mit mehreren Varianten besteht aus einer Reihe von Links zu diesen CDN-gehosteten Manifests.

Über Codierungsprofile iterieren

Sammeln Sie für jedes Codierungsprofil alle zugehörigen Manifeste des Anzeigen-Pods aus Ad Manager-Antwort und die zugehörigen Startzeiten Für Pre-Roll-Anzeigen Pods, legen Sie die Startzeit auf 0 fest. Verwenden Sie für Post-Rolls die Dauer des Contents wie folgt: die Startzeit des Anzeigen-Pods. Variantenstream in der Multivariante ermitteln die den Audio- und Videoeinstellungen des jeweiligen Codierungsprofils entspricht.

Beispiel-Array von 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
    }
  ]
Beispiel für eine Playlist mit Inhalten 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

Gehen Sie für jeden Variantenstream die Segmente des Contentmanifests durch und halten Sie der verstrichenen Content-Zeit. Wenn Sie zur Startposition kommen, eines Anzeigen-Pods, extrahieren Sie die Liste der Segmente aus dem Manifest des Anzeigen-Pods, verpacken Sie die Liste mit Segmenten in zwei #EXT-X-DISCONTINUITY-Tags und fügen Sie die Liste an der den aktuellen Standort im Content-Manifest ein. Setzen Sie diesen Prozess fort, bis alle Anzeigen Pods und Variantenstreams wurden verarbeitet.

Die resultierenden Manifeste müssen dem HLS-Standard entsprechen. Daher ist es je nach welche Funktionen der Spezifikation in deinem Content-Manifest enthalten sind, muss möglicherweise ein letztes Mal das kombinierte Manifest durchlaufen, um Probleme mit den Medien zu beheben. Sequenznummern, Inhaltsdauer, Diskontinuitätssequenznummern und andere Tags, die aktualisiert werden müssen, um die neuen Anzeigensegmente zu berücksichtigen. Sobald alle Abweichungen mit dem Standard behoben wurden, nutzerspezifisches Variantenmanifest in Ihrem CDN für das Hosting an.

Wenn dein Inhaltsmanifest verschlüsselt ist, musst du die letzte Verschlüsselung speichern Schlüssel, der vor dem Start des aktuellen Anzeigen-Pods in einem #EXT-X-KEY-Tag gefunden wurde. Gehen Sie dann so vor: Sie müssen das Tag #EXT-X-KEY:METHOD=NONE hinzufügen, um die Verschlüsselung vor dem das erste Segment jedes Anzeigen-Pods hinzu. Abschließend müssen Sie eine Kopie der gespeicherten #EXT-X-KEY-Tag vor dem ersten Inhaltssegment nach jedem Anzeigen-Pod, um die Inhaltsverschlüsselung wiederherstellen.

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

Dies ist der Inhalt des Manifests https://{...}/1080p.m3u8, das im Variantendaten erfasst.

#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 der https://dai.google.com/{...}/pod/1/profile/1080p.m3u8-Manifest die in den erfassten Variantendaten aufgeführt sind.

#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 kombiniertes Variantenmanifest

Das wäre das resultierende zusammengefügte Manifest der Variante, das an das CDN übergeben und gehostet bei 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
{...}

Playlist mit mehreren Varianten erstellen

Erfassen Sie die CDN-Adressen für jedes fertige Variantenmanifest zusammen mit dem übereinstimmenden Codierungsprofildetails und stellen Sie die Ergebnisse in einem neuen Manifests mit mehreren Varianten. Dieses nutzerspezifische Manifest wird als Antwort zurückgegeben. an die Manifest-Anforderung an, 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 du einen Stream im MPEG DASH-Format zusammenfügst, musst du nur in einer einzelnen Datei. Dadurch lassen sich DASH-Streams einfacher zusammenfügen als HLS-Streams.

Eine korrekt vorbereitete MPD-Datei (MPEG DASH Media Presentation Description) sollte bestehen aus mehreren Punkten, die jeweils mehrere Darstellungen enthalten. Jedes -Darstellung mit einem Ihrer Codierungsprofile übereinstimmen. Jeder Anzeigen-Pod hat aus Ad Manager ist ebenfalls eine MPD-Datei mit einer Reihe von Punkten, übereinstimmende Darstellungen.

Um diese MPD-Dateien zusammenzufügen, notieren Sie sich zunächst die Startzeiten für für jeden Anzeigen-Pod. Bei Pre-Roll-Anzeigen die Punkte des Pre-Roll-Anzeigen-Pods vor Inhalten einfügen Punkt. Fügen Sie bei Post-Rolls die Post-Roll-Pod-Punkte nach dem gesamten Content ein. Zeiträume. Über die Zeiträume in der MPD-Datei iterieren und dabei die Auswirkungen Verstrichene Wiedergabezeit für alle Zeiträume für verarbeitete Inhalte. Wenn Sie eine Grenze erreichen zwischen den Zeiträumen, die der Startzeit eines Anzeigen-Pods entsprechen, fügen Sie die Punkte aus der MPD-Datei des entsprechenden Mid-Roll-Anzeigen-Pods an dieser Begrenzung.

Die fertig zusammengefügte MPD-Datei muss den MPEG_DASH-Spezifikationen vollständig entsprechen. Möglicherweise müssen Sie die endgültige Datei noch einmal iterieren und alle und die Dauer der Medienpräsentation an die neu eingefügten Anzeigenzeiträumen und lösen alle anderen Konflikte, die beim Zusammenfügen entstanden sind.

MPD-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 Anzeigen-Pod-JSON

[{
  "mpd_uri": "https://{...}pod/1.mpd",
  "type": "mid",
  "start": 15.0,
  "duration": 15.0,
  "midroll_index": 1
}]

Beispiel für Anzeigen-Pod-MPD

Dies ist der Inhalt von mpd_uri aus der obigen JSON-Datei für den Anzeigen-Pod.

<?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

Geben Sie dies als Antwort auf die ursprüngliche Anfrage zum Streammanifest an.

<?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