ה-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 |
פרמטר היפותטי שתואם לפורמט השידור. אחד מהבאים:
|
אחזור של זרם התוכן
משתמשים במזהה ה-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.
לדוגמה: |
bitrate |
Required |
מספר שלם שמייצג את קצב העברת הנתונים המקסימלי של הפרופיל הזה בבייטים לשנייה. |
frames_per_second |
Required |
ה-FPS של הנקודה הצפה בסרטון. |
resolution |
Required |
ערך בקידוד JSON שמכיל את 'width' ו-'height' בפיקסלים.
לדוגמה: |
הגדרות האודיו | ||
codec |
Required |
מחרוזת קודק RFC6381.
לדוגמה: |
bitrate |
Required |
מספר שלם שמייצג את קצב העברת נתוני האודיו המקסימלי של הפרופיל בבייטים
לשנייה.
לדוגמה: |
channels |
Required |
מספר שלם שמייצג את מספר ערוצי האודיו, כולל ערוצים בתדר נמוך. |
sample_rate |
Required |
מספר שלם שמייצג את קצב דגימת האודיו בהרץ.
לדוגמה: |
הגדרות כתוביות | ||
format |
Required |
פורמט הקובץ שבו נעשה שימוש בכתוביות. הערכים הנתמכים הם
webvtt או ttml .
|
language |
Optional |
שפת הכתוביות כמחרוזת שפה RFC5646. אם צוין ערך, הערך הזה ישמש רק לעיבוד DASH.
לדוגמה: |
אפשרויות DAI | ||
dash_profile |
Optional |
פרופיל MPEG-DASH שיחול על מניפסטים של רצף מודעות. ההגדרה הזו משמשת
למניפסטי DASH בלבד. הערכים המותרים הם live או on-demand . ערך ברירת המחדל הוא on-demand .
הערך
הערך |
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>
מקורות מידע נוספים
- הצגת פודים באמצעות IMA SDK:
- הפעלה של הצגת פודים באמצעות DAI API