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