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

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

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

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

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

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

כדי לבקש מודעות מ-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 שמכילות מודעות באמצע סרטון (mid-roll) עם הפרשי זמן מיקום. זה מצב נדיר.

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

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

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

קובץ ה-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>

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