במדריך הזה מוסבר איך להוסיף הפסקות למודעה באמצעות השיטה Ad pod Timing Metadata (נתוני מטא של תזמון רצף מודעות, ATM) כדי לאחזר את התזמון והמשך המדויקים של ההפסקות למודעה, כולל מודעות לפני סרטון (pre-roll).
כדי להוסיף מודעות לפני סרטון ולנהל את החזרה לתוכן אחרי הפסקות למודעה באמצע סרטון, מומלץ להפעיל את ממשקי ה-API הבאים:
- Ad pod Timing Metadata (ATM) API: שאילתת תוצאות של החלטות לגבי רצפי מודעות, כולל משכי הזמן של המודעות ושל שקופיות החסות.
- נקודת הקצה של פלח המודעה: בקשה של פלחים של מודעות או של לוחות, עם אפשרות להפסיק את בלוק המודעות הנוכחי.
אופציונלית, לאירועים של שידורים חיים עם מספר גבוה של צופים בו-זמנית, מומלץ להתקשר אל Early Ad Break Notification (EABN) API כדי לתזמן החלטות לגבי הצגת מודעות לפני תחילת הפסקה למודעה.
דרישות מוקדמות
כדי להתחיל, צריך להגדיר אירוע שידור חי מסוג הפניה אוטומטית להצגת מודעות בשיטת Pod (הוספת מודעות דינמית, 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.
בקשת מטא-נתונים של תזמון למודעות לפני סרטון
כדי לבדוק את ההגדרות של הפרסומות שלפני הסרטון באירוע בשידור חי, אפשר להשתמש באפשרויות הבאות:
כדי לאחזר את תוצאות ההחלטה לגבי מודעה שלפני הסרטון, שולחים בקשה ל-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.ts
#EXTINF:5.000,
contentorigin.com/8.ts
בדוגמה הבאה מוצג מניפסט שהוחלף:
#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.ts
#EXTINF:5.000,
contentorigin.com/8.ts
פלחים של מודעות 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, כלי המניפולציה של קובץ המניפסט צריך להוסיף את הפרמטר sd= לכתובת ה-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&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
יצירת פלחים של לוח
כדי למלא את הפער בין המודעה לתוכן, מוסיפים קטעי לוח.
משתמשים במערך slates.segment_durations.values מתגובת ה-JSON של ATM API כדי לקבוע את משך הזמן של כל פלח בלוח. חוזרים על רצף משכי הזמן של הפלחים לפי הצורך כדי למלא את כל ההפסקה למודעה.
כדי לחזור לתוכן לפני שהמודעות מסתיימות, למשל כשמזהים תג EXT-X-CUE-IN, מוסיפים את הפרמטר sd= לכתובת ה-URL של קטע המודעות הסופי. הפרמטר הזה מקצר את הקטע כדי שלא ישפיע על ציר הזמן של נגן הווידאו בצד הלקוח. הערך של הפרמטר sd= צריך להיות מספר שלם שמייצג את משך הזמן באלפיות שנייה שבו צריך לקצר את הקטע.
בדוגמה הבאה מוצג פלח של לוח:
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 בין כל חזרה על הלוח. לפלח האחרון, מוסיפים את הפרמטר sd= באלפיות השנייה
כדי להתאים לנקודת ההתחלה של התוכן.
חזרה מיידית: מוסיפים קטע אחד של לוח שינוי מיקום באמצעות הפרמטר sd= ואחריו תוכן.
נגן הווידאו חוזר לתוכן בלי לשנות את ציר הזמן.
בדוגמה הבאה נוצר מעבר על ידי מילוי שארית משך הפסקת הפרסום בקטעי לוח.
#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&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
בשיטה הזו, הכלי לשינוי מניפסט חוזר על לוח המודעות לפי הצורך ומצרף את פרמטר כתובת ה-URL sd= רק לפלח האחרון של לוח המודעות. התהליך הזה מתבצע בדיוק בזמן ההתחלה המתוכנן של התוכן הבסיסי.
בדוגמה הבאה אפשר לראות איך משתמשים בפלח אחד של לוח חלק עם הפרמטר sd= כדי לשמור על דיוק ציר הזמן של הנגן כשלא ממלאים את כל ההפסקה שנותרה בלוחות חלקים שמופעלים בלולאה.
#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&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
אופציונלי: תזמון של הפסקה למודעה
כדי לשפר את שיעור המילוי, צריך לשלוח הודעה על הפסקת פרסום מוקדמת (EABN) עם משך רצף המודעות, פרמטרים מותאמים אישית לטירגוט ונתוני אותות SCTE-35. פרטים נוספים זמינים במאמר בנושא שליחת התראות על הפסקות פרסום מוקדמות.