כלי להפעלת מניפסטים לשידורי VOD

ה-API להצגת פודקאסטים מספק גישה לרצפים של מודעות וידאו עם קצב מותאם של העברת נתונים כך שיהיה אפשר לתפור אותם ישירות לתוך פרוטוקול HLS שפונה למשתמש, פלייליסט של מדיה MPEG-DASH.

המדריך הזה מתמקד בהטמעה של מניפולציה בסיסית במניפסט של הצגת Pod לשרת זרמי VOD.

קבלת בקשות למניפסט של השידור

הכלי לטיפול במניפסט צריך לספק נקודת קצה ל-API כדי להאזין למניפסט בקשות מאפליקציית הלקוח של נגן הווידאו. לכל הפחות, נקודת הקצה איסוף מזהה מקור נתונים מאפליקציית נגן הלקוח. מזהה מקור הנתונים הזה משמש לזהות את הסשן של הסטרימינג ל-Ad Manager בבקשות של רצף המודעות.

כמו כן, עליכם לאסוף מידע נוסף כדי לזהות זרם תוכן, לדוגמה, Content ID.

דוגמה לנקודת קצה (endpoint) של בקשה למניפסט

GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
פרמטרים של נתיב
stream_id מזהה מקור הנתונים ב-Ad Manager מאפליקציית נגן הווידאו של הלקוח.
content_id מזהה היפותטי שתואם לסרטון התוכן במערכת שלכם.
format פרמטר היפותטי שתואם לפורמט של השידור. אחת מהאפשרויות האלה:
mpd לסטרימינג בפורמט MPEG-DASH
m3u8 לסטרימינג בפורמט HLS

אחזור של מקור התוכן

כדי לבחור את התוכן, משתמשים במערכת Content ID שנאסף מבקשת המניפסט כדי לתפור יחד עם מודעות.

בקשת מניפסטים של רצף מודעות

כדי לבקש מודעות מ-Ad Manager, השרת צריך לשלוח בקשת POST למודעה. נקודת הקצה של Pod, העברה של פרופילי הקידוד, תג המודעה והטירגוט המבוקשים . הבקשה הזו כוללת גם את מזהה מקור הנתונים שאספתם בשלב 1.

בתמורה לכך, תקבלו רשימה של אובייקטים של רצף מודעות שמכילים קובצי מניפסט של את רצפי המודעות המבוקשים על ידי תג המודעה של בעל התוכן הדיגיטלי, ומידע על שבו צריך להוסיף אותם לתוכן.

POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
פרמטרים של נתיב
network_code קוד רשת Ad Manager 360 של בעל התוכן הדיגיטלי.
stream_id מזהה הסטרימינג מאפליקציית הלקוח של נגן הווידאו.

גוף JSON

פרמטרים לגוף
encoding_profiles Required רשימה של ייצוגי JSON של פרופילי הקידוד שרוצים לקבל לכל הפסקה למודעה. לעיון בפרטים בהמשך

כדי שההפעלה תהיה חלקה ככל האפשר, קבוצת הפריטים צריכה להיות פרופילי הקידוד שמשמשים בזרם התוכן שלכם.

ad_tag Required תג מודעה לבקשת מודעות VMAP.
cuepoints Optional רשימה של נקודות סימון ברצף התוכן, שבהן ההפסקות למודעות באמצע הסרטון נוסף. נקודות סימון נמדדות בשניות בנקודה צפה.

נדרש רק עבור תגובות VMAP שמכילות מודעות באמצע סרטון (mid-roll) באמצעות הפרשי זמן positional. זה לא תופעה נפוצה.

content_duration_seconds Optional משך התוכן בשניות.

נדרש רק עבור תגובות VMAP שמכילות מודעות באמצע סרטון (mid-roll) באמצעות אחוזי זמן. זה לא תופעה נפוצה.

manifest_type Optional הפורמט של מקורות המודעות המבוקשים, hls או dash. ערך ברירת המחדל הוא hls.
dai_options Optional אפשרויות נוספות לשליטה בהיבטים של אופן העיבוד של המניפסטים. לעיון בפרטים בהמשך
פרופיל קידוד
profile_name Required מזהה של פרופיל הקידוד הזה. הערך הזה יכול להיות כל מחרוזת אבל לא ניתן להפעיל כמה פרופילי קידוד בעלי שם זהה אותו זרם.
type Required סוג הקידוד של הסטרימינג שמתואר על ידי פרופיל הקידוד הזה. תוכן הסוגים הם: media, iframe, subtitles.
container_type Required פורמט המאגר שבו נעשה שימוש בפרופיל הקידוד הזה. הפורמטים של מאגרים הם: mpeg2ts, fmp4cmaf, hls_packed_audio
video_settings Optional נדרש אם סוג פרופיל הקידוד הוא iframe. אחרת, מותרת רק אם סוג המדיה מכיל וידאו. לצפייה בהמשך
audio_settings Optional נדרש אם פרופיל הקידוד מכיל אודיו. מותר רק אם הסוג הוא מדיה. לעיון בפרטים בהמשך
subtitle_settings Optional נדרש אם פרופיל הקידוד מכיל כתוביות. לעיון בפרטים בהמשך
הגדרות וידאו
codec Required מחרוזת קודק RFC6381.

לדוגמה: avc1.4d000c

bitrate Required מספר שלם שמייצג את קצב העברת הנתונים המקסימלי של הסרטון בפרופיל הזה בבייטים לכל שנייה.
frames_per_second Required ה-FPS של הנקודה הצפה בסרטון.
resolution Required ערך בקידוד JSON שמכיל את הערך 'width' ו-'height' של הסרטון בפיקסלים.

לדוגמה: {"width": 640, "height": 320}

הגדרות אודיו
codec Required מחרוזת קודק RFC6381.

לדוגמה: mp4a.40.5

bitrate Required מספר שלם שמייצג את קצב העברת הנתונים המקסימלי של האודיו בפרופיל הזה בבייטים לכל שנייה.

לדוגמה: 300000

channels Required מספר שלם שמייצג את מספר ערוצי האודיו, כולל תדר נמוך הערוצים שלך.
sample_rate Required מספר שלם שמייצג את קצב דגימת האודיו בהרץ.

לדוגמה: 4800

הגדרות כתוביות
format Required פורמט הקובץ המשמש את כתוביות בתוך הרצועה. הערכים שנתמכים הם: webvtt או ttml.
language Optional שפת הכתוביות כמחרוזת שפה מסוג RFC5646. הערך הזה אם צוין משמש רק לעיבוד ב-DASH.

לדוגמה: en-us

אפשרויות של הטמעת מודעות דינמיות (DAI)
dash_profile Optional פרופיל MPEG-DASH שיש להחיל על מניפסטים של רצף מודעות. ההגדרה הזו משמשת עבור מניפסטים של DASH בלבד. הערכים המותרים הם live או on-demand. ערך ברירת המחדל הוא on-demand.

הערך live תואם לפרופיל MPEG-DASH "urn:mpeg:dash:profile:isoff-live:2011"

הערך on-demand תואם לפרופיל MPEG-DASH urn:mpeg:dash:profile:isoff-on-demand:2011

ad_pod_timeout Optional הזמן המקסימלי הנדרש לבחירת מודעות ולבניית רצפי מודעות, בתצוגה צפה בשניות. לאחר פרק הזמן הזה, מערכת Ad Manager תחזיר מודעות שכבר נבחרו בתשובה ad_pods והפסיקה לפעול בעיבוד.
sam_id Optional מציינת מפתח חלופי לניפוי באגים שיכול לשמש לחיפוש סשנים ב פעילות סטרימינג מעקב.

תשובה

פרמטרים של תגובה
valid_for משך הזמן שבו הפלייליסטים של רצף המודעות תקפים ב-dhms פורמט (ימים, שעות, דקות, שניות).
valid_until התאריך והשעה שעדכנתם, הפלייליסטים של רצף המודעות עדיין תקפים לפי תקן ISO8601. מחרוזת של תאריך ושעה, ב-yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm הפורמט.
ad_pods רשימה של רצפי מודעות שנבחרו לשידור הזה.
רצף מודעות
manifest_uris לסטרימינג בפורמט HLS בלבד. מפה של מזהים של פרופילים לקידוד למזהי URI של מניפסט HLS.
mpd_uri לסטרימינג מסוג DASH בלבד. ה-URI של DASH MPD.
type הסוג של רצף המודעות. הסוגים של רצף המודעות הם: pre, mid או post.
start לרצף מודעות באמצע סרטון בלבד. המיקום בזרם שבו רצף המודעות הזה צריך להיכנס בשניות בנקודה צפה (floating-point).
duration משך הזמן של רצף המודעות הזה בשניות עם נקודה צפה (floating-point).
midroll_index לרצף מודעות באמצע סרטון בלבד. האינדקס של רצף המודעות הנוכחי באמצע הסרטון. הוספה לאינדקס מתחיל ב-1.

בקשה לדוגמה (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

דוגמה לגוף הבקשה

זהו התוכן של request-body.json שהוזכר בקריאת ה-cURL שלמעלה.

{
  "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"
}

דוגמה לתגובה

{
  "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
    }
  ]
}

חיבור רצפי מודעות לתוכן

התהליך של חיבור רצפי המודעות לשידורי התוכן משתנה בהתאם על ההטמעה שלך, על פורמט השידור ועל התכונות שבחרת להטמיע לפי מפרט הפורמט. תהליכי העבודה הבאים הם הצעות לטיפול בתהליך. הפרטים המדויקים של ההטמעה עשויה להשתנות בהתאם לצרכים של העסק ולתוכן בסטרימינג.

שידורי HLS

אם אתם יוצרים זרם בפורמט HLS, רב-משתנים פלייליסט של קישורים למניפסטים נפרדים של זרם נתונים, אחד לכל פרופיל קידוד. המודעה שלכם צריך להוסיף Pod לכל אחד ממניפסטי הווריאנטים האלה. אחת הדרכים לעשות זאת היא להכין את כל המניפסטים של הווריאנטים ולהעביר אותם אל תוכן רשת משלוחים (CDN) עבור אירוח. הפלייליסט מרובה-המשתנים האחרון הוא קבוצת קישורים אל הפריטים האלה שמתארחים ב-CDN מניפסטים.

איטרציה מעל פרופילי קידוד

לכל פרופיל קידוד, צריך לאסוף את כל המניפסטים המשויכים של רצף המודעות מ- התשובה של Ad Manager ומועדי ההתחלה המשויכים אליהן. למודעה לפני סרטון (pre-roll) רצפי מודעות, צריך להגדיר את שעת ההתחלה ל-0. במודעות בסוף סרטון, יש לציין את משך הזמן של התוכן כ- שעת ההתחלה של רצף המודעות. זיהוי של זרם הווריאנטים בר-המשתנים פלייליסט שתואם להגדרות האודיו והווידאו של כל פרופיל קידוד.

דוגמה למערך של רצפי מודעות
"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
    }
  ]
דוגמה לפלייליסט של תוכן רב-משתנים
#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
דוגמאות לנתוני וריאנטים שנאספו
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

הוספת מודעות לכל מניפסט של וריאנט

עבור כל זרם של הווריאנטים, עוברים על הקטעים במניפסט התוכן, תוך שמירה על סך כל זמן התוכן שחלף. כשמגיעים למיקום ההתחלתי מרצף מודעות, מחלצים את רשימת הפלחים מהמניפסט של רצף המודעות, של פלחים בשני תגי #EXT-X-DISCONTINUITY, ומוסיפים את הרשימה את המיקום הנוכחי במניפסט התוכן. המשך התהליך עד שכל המודעות רצפי המודעות ושידורים של הווריאנטים עברו עיבוד.

המניפסטים שייווצרו חייבים לעמוד בתקן HLS. לכן, בהתאם לגבי התכונות של המפרט שמניפסט התוכן שלך כולל, ייתכן שיהיה צורך לבצע העברה סופית של המניפסט המשולב כדי לתקן מדיה מספרי רצף, משך תוכן, מספרים של רצף אי-רציפות וכל תגים אחרים שצריך לעדכן כדי להביא בחשבון את פלחי המודעות החדשים. לאחר תיקון הפערים בתקן, לוחצים על מניפסט וריאנט ספציפי למשתמש ב-CDN שלך לצורך אירוח.

אם מניפסט התוכן מוצפן, עליך לאחסן את ההצפנה האחרונה שנמצא לפני ההתחלה של רצף המודעות הנוכחי בתג #EXT-X-KEY. לאחר מכן: כדי להסיר את ההצפנה צריך להוסיף את התג #EXT-X-KEY:METHOD=NONE את הקטע הראשון בכל רצף מודעות. לבסוף, עליך להוסיף עותק של #EXT-X-KEY לפני קטע התוכן הראשון אחרי כל רצף מודעות, כדי לשחזר את הצפנת התוכן.

דוגמאות לנתוני וריאנטים שנאספו
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
דוגמה למניפסט של תוכן

זהו התוכן של המניפסט https://{...}/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
#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
{...}
דוגמה למניפסט של רצף מודעות

זה התוכן של מניפסט אחד (https://dai.google.com/{...}/pod/1/profile/1080p.m3u8) מפורטות בנתוני הווריאנטים שנאספו.

#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
דוגמה למניפסט של וריאנט תפור

זה יהיה מניפסט הווריאנט המחובר שמתקבל, שמועבר ל-CDN ול- מתארח ב-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
{...}

בנייה של פלייליסט רב-משתנים

לאסוף את כתובות ה-CDN עבור כל מניפסט וריאנט שהושלם, יחד עם תואם לפרטים של פרופיל קידוד, ולהרכיב את התוצאות רב-משתנים. המניפסט הספציפי למשתמש הזה מוחזר כתגובה לבקשת המניפסט שקיבלתם בשלב 1.

דוגמה לפלייליסט רב-משתנים סופי
#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

אם תיצור זרם בפורמט MPEG DASH, עליך רק להפיק בקובץ אחד. כך קל יותר לחבר שידורים של DASH מאשר פרוטוקול HLS.

קובץ של תיאור מצגת מדיה MPEG DASH מוכן כראוי (MPD) מורכבות מכמה נקודות, שכל אחת מהן מכילה כמה ייצוגים. כל אחד צריך להתאים לאחד מפרופילי הקידוד שלכם. כל רצף מודעות שהוחזר מ-Ad Manager הוא גם קובץ MPD שמכיל רצף של נקודות וייצוגים תואמים.

כדי לחבר את קובצי ה-MPD האלה יחד, חשוב לרשום את זמני ההתחלה של בכל רצף מודעות. עבור מודעה לפני סרטון, יש להוסיף את נקודות רצף המודעות לפני הסרטון לפני תוכן כלשהו של התקופה. במודעות בסוף סרטון, יש להוסיף את הנקודות של רצף המודעות בסוף הסרטון (post-roll) אחרי כל התוכן לתקופות שונות. לבצע איטרציה לאורך התקופות ב-MPD של התוכן, כדי לעקוב זמן ההפעלה שחלף לכל תקופות התוכן שעובדו. כשמגיעים לגבול בין התקופות שתואמות לשעת ההתחלה של רצף המודעות, מזינים את הנקודות מקובץ ה-MPD התואם של רצף המודעות באמצע הסרטון בגבול הזה.

קובץ ה-MPD המחובר הסופי חייב להיות תואם במלואו למפרט MPEG_DASH, כך שייתכן שתצטרכו לחזור על הקובץ הסופי פעם נוספת כדי לתקן של זמני ההתחלה, כדי לתקן את משך ההצגה של המדיה כדי להביא בחשבון תקופות של מודעות שנוספו לאחרונה, ופתרון התנגשויות אחרות שעשויות היה לגרום נוצר מתהליך החיבור.

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>

דוגמה לקובץ JSON של רצף מודעות

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

דוגמה ל-MPD של רצף מודעות

זהו התוכן של ה-mpd_uri מ-JSON של רצף המודעות שלמעלה.

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

דוגמה ל-MPD שנתפר

ישמש כתגובה לבקשת המניפסט הראשונית של השידור.

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

מקורות מידע נוספים