במדריך הזה מוסבר איך להוסיף הפסקות למודעה באמצעות השיטה Ad pod Timing Metadata (נתוני מטא של תזמון רצף מודעות, ATM) כדי לאחזר את התזמון והמשך המדויקים של ההפסקות למודעה, כולל מודעות לפני סרטון (pre-roll).
כדי להוסיף מודעות לפני הסרטון ולנהל את החזרה לתוכן אחרי הפסקות לפרסומות באמצע הסרטון, מומלץ להפעיל את ממשקי ה-API הבאים:
- Ad pod Timing Metadata (ATM) API: שאילתת תוצאות של החלטות לגבי רצפי מודעות, כולל משכי הזמן של המודעות ושל שקופיות החסות.
- נקודת קצה של פלח מודעה: בקשה של פלחים של מודעות או של לוחות זמנים עם אפשרות להפסיק את בלוק המודעות הנוכחי.
אופציונלית, לאירועים של שידורים חיים עם מספר גבוה של צופים בו-זמנית, מומלץ להתקשר אל Early Ad Break Notification (EABN) API כדי לתזמן החלטות לגבי הצגת מודעות לפני תחילת ההפסקה למודעה.
דרישות מוקדמות
כדי להתחיל, צריך להגדיר אירוע של שידור חי מסוג הפניה אוטומטית להצגת מודעות בשידור חי (DAI). בוחרים אחת מהשיטות הבאות:
- ממשק המשתמש של Ad Manager: הגדרת שידור חי ל-DAI.
- Ad Manager API: משתמשים בספריית לקוח (אפשרויות זמינות) כדי לקרוא לשיטה
LiveStreamEventService.createLiveStreamEvents. מגדירים את הפרמטרLiveStreamEvent.dynamicAdInsertionTypeלערךPOD_SERVING_REDIRECT.
אחזור מקור נתוני התוכן
כשמשתמש בוחר אירוע בשידור חי, אפליקציית הלקוח שולחת בקשת סטרימינג אל Google Ad Manager. בתגובה של הסטרימינג, האפליקציה מחלצת את מזהה הסשן של Google DAI ואת המטא-נתונים כדי לכלול אותם בבקשה למניפסט של הסטרימינג.
בדוגמה הבאה מועבר מזהה סשן של Google DAI למניפולטור של מניפסט:
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
במהלך העיבוד של בקשת ההפעלה של תוכן הווידאו, מאחסנים את מזהה הסשן של Google DAI ואת CUSTOM_ASSET_KEY מהבקשה כדי להתכונן להוספת מודעות.
אחזור מטא-נתונים של תזמון רצפי מודעות
כדי לאחזר את התזמון של רצף המודעות, יש לבצע את השלבים הבאים:
- יצירת טוקן HMAC.
- שולחים קריאה ל-ATM API עם אסימון HMAC.
בקשת מטא-נתונים של תזמון למודעות לפני סרטון
כדי לבדוק את הגדרות הפרסומות שלפני הסרטון באירוע בשידור חי, אפשר להשתמש באפשרויות הבאות:
כדי לאחזר את תוצאות ההחלטה לגבי מודעה לפני סרטון (pre-roll), שולחים בקשה ל-ATM API.
בדוגמה הבאה מוצגת בקשה למודעות לפני סרטון (pre-roll) דרך ATM:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"
בקשה למטא-נתוני תזמון של מודעות באמצע סרטון
כדי לאחזר מטא-נתונים של רצפי מודעות להצגת מודעות באמצע הסרטון, פועלים לפי השלבים הבאים:
- ניתוח מניפסט השידור החי כדי למצוא את סמני המודעות שמכילים את התזמון ואת משך הזמן של כל הפסקה למודעה באמצע הסרטון.
- מפעילים את נקודת הקצה (endpoint) של ATM API כדי לבקש את משך הזמן המדויק של רצף המודעות ושל המסך השחור. ה-API מחזיר אובייקט JSON עם תוצאות ההחלטה של בלוק המודעות.
בדוגמה הבאה מוצגת בקשה ל-ATM עבור מודעות באמצע הסרטון (mid-roll):
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"
אם הפעולה בוצעה בהצלחה, הפלט ייראה כמו אובייקט ה-JSON הבא:
{
"status": "final",
"ads": [
{
"duration_ms": 5046,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
}
}
}
],
"slate": {
"duration_ms": 0,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
}
}
}
}
הוספת מודעות למניפסט של התוכן
בקטעים הבאים מוסבר איך לשנות את מניפסט השידור החי ולהוסיף את פלחי המודעות.
זיהוי פלחים של הפסקות למודעות והוספת אי-רציפות
במהלך העיבוד של כל מניפסט של וריאנט, צריך לזהות את התגים EXT-X-CUE-IN ו-EXT-X-CUE-OUT בפיד, שמציינים את ההתחלה והסיום של הפסקת הפרסום.
מחליפים את התגים EXT-X-CUE-IN ו-EXT-X-CUE-OUT ברכיבי EXT-X-DISCONTINUITY כדי שנגן הווידאו של הלקוח יוכל לעבור בין תוכן למודעות.
במניפסט לדוגמה הבא, התגים EXT-X-CUE-IN ו-EXT-X-CUE-OUT מוחלפים:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:17.450
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXTINF:2.450,
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
בדוגמה הבאה מוצג מניפסט שהוחלף:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
פלחים של מודעות DAI ב-Google לא מוצפנים. אם התוכן מוצפן, צריך להסיר את ההצפנה על ידי הוספת רכיב EXT-X-KEY:METHOD=NONE לפני פלח המודעה הראשון של כל הפסקה לפרסומות. בסוף הפסקה למודעה, מוסיפים שוב הצפנה על ידי הוספת תג EXT-X-KEY מתאים.
כדאי לעקוב אחרי שעת ההתחלה, משך הזמן והאינדקס של ההפסקה למודעה הקרובה.
יצירת כתובות URL של פלחים לפרסום
מחליפים את פילוחי התוכן בין התגים EXT-X-DISCONTINUITY בכתובות URL
לכל פלח מודעות. כדי לקבוע כמה מקטעי מודעות להוסיף, משתמשים בערך ads.segment_durations.values שמופיע בתגובת ה-JSON מ-ATM API.
כדי לחזור לתוכן לפני שרצף המודעות מסתיים, למשל כשמזהים תג EXT-X-CUE-IN, כלי המניפולציה של קובץ המניפסט צריך להוסיף את הפרמטר d= לכתובת ה-URL של פלח המודעה הסופי.
הפרמטר הזה מקצר את הקטע כדי שלא ישפיע על ציר הזמן של נגן הווידאו של הלקוח.
בדוגמה הבאה מורכבת כתובת URL של פלח מודעה לפני הסרטון למניפסט. הערה: פלחי המודעות מתבססים על אינדקס שמתחיל בספרה אפס:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
בדוגמה הבאה מוצג איך להרכיב כתובת URL של פלח מודעה באמצע הסרטון במניפסט:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
בדוגמה הבאה מוסיפים פלחים של מודעות למניפסט:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/3.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
בניית פלחים של לוח
כדי למלא את הפער בין המודעה לתוכן, מוסיפים קטעי לוח.
משתמשים במערך slates.segment_durations.values מתגובת ה-JSON של ATM API כדי לקבוע את משך הזמן של כל פלח של לוח. חוזרים על רצף משכי הזמן של הפלחים לפי הצורך כדי למלא את כל ההפסקה למודעה.
כדי לחזור לתוכן לפני שרצף המודעות מסתיים, למשל כשמזהים תג EXT-X-CUE-IN, מוסיפים את הפרמטר d= לכתובת ה-URL של קטע השקופית הסופי. הפרמטר הזה מקצר את הפלח כדי שלא ישפיע על ציר הזמן של נגן הווידאו של הלקוח. הערך של הפרמטרים d= צריך להיות מספר שלם שמייצג את משך הזמן באלפיות השנייה שבו צריך לקצר את הפלח.
בדוגמה הבאה מוצג פלח של לוח:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
הערך slate/0 בדוגמה מייצג את מספר האיטרציה של הלוח. כדי להחליט אם להתחיל ב-0 ולהגדיל את המספר הזה בכל לולאה של הלוח, או להשאיר אותו ב-0 לכל האיטרציות, צריך לעיין בתאימות של נגן הווידאו של הלקוח וביכולת שלו לשמור במטמון.
ניהול החזרה לתוכן
אחרי שהכלי לשינוי המניפסט מוסיף את כל הפלחים מתוך רצף המודעות, הכלי לשינוי המניפסט צריך לחזור לזרם התוכן. כדי לחזור לסטרימינג של התוכן, אפשר להשתמש באחת מהשיטות הבאות. כל שיטה דורשת מקטע סופי של יישור מחדש כדי לשמור על דיוק ציר הזמן של הסטרימינג.
מילוי והתאמה מחדש: מוסיפים את קטעי הלוח ומפעילים את הלוח בלולאה.
ממלאים את משך הזמן ומוסיפים רכיבי EXT-X-DISCONTINUITY בין כל חזרה על לוח. לפלח האחרון, מוסיפים את הפרמטר d= באלפיות השנייה
כדי להתאים לנקודת ההתחלה של התוכן.
חזרה מיידית: כדי להוסיף קטע של לוח החלקה יחיד לשינוי מיקום, משתמשים בפרמטר d= ואחריו בתוכן.
נגן הווידאו חוזר לתוכן בלי ציר זמן ששונה.
בדוגמה הבאה נוצר מעבר על ידי מילוי שארית משך ההפסקה למודעה בקטעי לוח.
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
בשיטה הזו, הכלי לשינוי קובץ המניפסט
מריץ בלולאה את לוח התוצאות לפי הצורך ומוסיף את פרמטר כתובת ה-URL d= רק
לפלח האחרון של לוח התוצאות. התהליך הזה מתבצע בדיוק בזמן ההתחלה המתוכנן של התוכן הבסיסי.
בדוגמה הבאה אפשר לראות איך משתמשים בקטע אחד של לוח חלק עם הפרמטר d= כדי לשמור על דיוק ציר הזמן של הנגן כשלא ממלאים את כל ההפסקה שנותרה בלוחות חלקים שמופעלים בלולאה.
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
אופציונלי: תזמון של הפסקה למודעה
כדי לשפר את שיעור המילוי, צריך לשלוח הודעה על הפסקת פרסום מוקדמת (EABN) עם משך רצף המודעות, פרמטרים מותאמים אישית של טירגוט ונתוני אותות SCTE-35. פרטים נוספים זמינים במאמר בנושא שליחת התראות על הפסקות פרסומות מוקדמות.