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

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

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

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

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

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

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

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

אחזור זרם התוכן

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

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

כדי לבקש מודעות מ-Ad Manager, השרת שלכם צריך לשלוח בקשת POST לנקודת הקצה של רצפי המודעות, ולהעביר את פרופילי הקידוד, תג המודעה והפרמטרים של הטירגוט המבוקשים. הבקשה הזו כוללת גם את מזהה מקור הנתונים שאספתם בשלב 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 רשימה של נקודות סימון בתוך זרם התוכן שאליהן יתווספו הפסקות למודעות באמצע הסרטון. נקודות סימון נמדדות בשניות של נקודה צפה (floating-point).

נדרשת רק לתגובות VMAP שיש בהן מודעות באמצע סרטון עם הפרשי זמן מיקום. מצב זה אינו נפוץ.

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

נדרש רק בתגובות VMAP שיש בהן מודעות באמצע סרטון עם הפרשי זמן בין אחוזים. מצב זה אינו נפוץ.

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 הזמן המקסימלי שצריך להשקיע בבחירת מודעות ובבניית רצפי מודעות, בשניות של נקודה צפה (floating-point). לאחר פרק הזמן הזה, מערכת 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 עבור רצפי מודעות באמצע סרטון בלבד. המיקום בזרם שבו יש להוסיף את רצף המודעות הזה, בשניות בנקודה צפה.
duration משך הזמן של רצף המודעות הזה בנקודה צפה בשניות.
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, רצף התוכן יהיה פלייליסט רב-משתנים של קישורים למניפסטים נפרדים של השידור, אחד לכל פרופיל קידוד. צריך להוסיף את רצפי המודעות לכל אחד מהמניפסטים של הווריאנטים. אחת הדרכים לעשות זאת היא להכין את כל המניפסטים של הווריאנטים ולהעביר אותם אל רשת העברת תוכן (CDN) לאירוח. הפלייליסט הרב-משתנים האחרון הוא קבוצת קישורים למניפסטים שמתארחים ב-CDN.

חזרה על פרופילים של קידוד

בכל פרופיל קידוד, צריך לאסוף את כל המניפסטים המשויכים של רצף המודעות מהתגובה של Ad Manager, יחד עם זמני ההתחלה המשויכים להם. עבור רצפי מודעות לפני סרטון, צריך להגדיר את שעת ההתחלה ל-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.

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

כדי לחבר את קובצי ה-MPD האלה יחד, תחילה עליכם לתעד את זמני ההתחלה של כל רצף מודעות. למודעות לפני סרטון, מכניסים את התקופות של רצף המודעות לפני הסרטון לפני כל תקופת תוכן. עבור מודעות בסוף סרטון, מוסיפים את התקופות של רצף המודעות בסוף הסרטון אחרי כל תקופות התוכן. חוזרים על פני התקופות ב-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>

משאבים נוספים